• 每日更新SQL练习题之第一天


    练习题(1)

    
    SELECT product_name,sale_price
    FROM PRODUCT AS P
    WHERE EXISTS (SELECT * FROM SHOPPRODUCT AS SP
    WHERE SP.shop_id =00C’ AND SP.product_id = P.product_id);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其中PRODUCT表示商品表,SHOPPRODUCT指商店在售商品表,其中shop_id字段表示商店id,product_id表示产品id。
    以上这段sql主要是完成了哪个操作?

    答案:选出了‘00C’商店目前在售的商品价格
    product_id将PRODUCT和SHOPPRODUCT进行关联,然后展示在特定店铺即等于‘00C’的商店中,在售的商品的价格

    2.比赛结果result表内容如下:
    Date Win
    2017-07-12 胜
    2017-07-12 负
    2017-07-15 胜
    2017-07-15 负

    显示下面的样子,请写出SQL语句
    比赛日期 胜 负
    2017-07-12 1 1
    2017-07-15 1 1

    select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end), SUM(case when Win='负' then 1 else 0 end) 负 from result group by Date
    
    • 1

    3.某高校采取电子化考试,便于查询学生对应考场号创建视图,已知student表(学号sid,姓名sname,考号s_test_id),room表(考场号rid,座位号rseat,考号s_test_id),下列语句错误的是()
    A

    CREATE VIEW view_room (sname,s_test_id,rid,rseat) AS
    SELECT student.sname, student.s_test_id, room.rid, room.rseat
    FROM student,room WHERE student.s_test_id=room.s_test_id;
    
    • 1
    • 2
    • 3

    B

    CREATE ALGORITHM={TEMPTABLE} VIEW view_room AS
    SELECT student.sname, student.s_test_id, room.rid, room.rseat
    FROM student,room WHERE student.s_test_id=room.s_test_id;
    
    • 1
    • 2
    • 3

    C

    CREATE VIEW view_room AS
    SELECT student.sname, student.s_test_id, room.rid, room.rseat
    FROM student,room WHERE student.s_test_id=room.s_test_id;
    
    • 1
    • 2
    • 3

    D

    CREATE VIEW view_room AS (rid,rseat,sname,s_test_id)
    SELECT student.sname, student.s_test_id, room.rid, room.rseat
    FROM student,room WHERE student.s_test_id=room.s_test_id;
    
    • 1
    • 2
    • 3

    所有选项都是在多表上建立视图,AD选项在视图中重命名了选取列的列名,但是D选项的列名与选取列内容不一致,后续对于视图的操作很容易引起歧义,且指定列名和AS颠倒了位置,错误;B选项增加了将视图存入临时表的操作,然后用临时表来执行语句;C选项未重命名,但是并不影响。

    4.学生、书店和图书三个实体集之间的联系属于()
    二元联系 多元联系 自反联系 一对一联系
    答案:多元联系
    参与联系的实体集个数大于2个时,为多元联系;A选项,二元联系指只有两个实体集参与的联系;C选项,自反联系描述了同一实体集内两部分实体之间的联系,是一种特殊的二元联系;D选项,是二元联系下的一种细分。

    5.某IT公司人事管理采用专门的人事管理系统来实现。后台数据库名为LF。新来的人事部张经理新官上任,第一件事是要对公司的员工做全面的了解。可是他在访问员工信息表EMPL里的工资和奖金字段的时被拒绝,只能查看该表其他字段。作为LF的开发者你将如何解决这一问题:( )
    A.废除张经理的数据库用户帐户对表EMPL里的工资列和奖金列的SELECT权限
    B.添加张经理到db_datareader角色
    C.添加张经理到db_accessadmin角色
    D.授予张经理的数据库用户帐户对表EMPL里的工资列和奖金列的SELECT权限。

    答案: A是废除,明显错误;
    B C权限太大,没必要;
    D是正确操作,给他相应字段查询权限即可
    在这里插入图片描述6.下面哪一个是MySQL查询语句的正确执行顺序:
    A.SELECT —> FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> DISTINCT —> ORDER BY —> LIMIT/OFFSET
    B.SELECT —> DISTINCT —> FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> ORDER BY —> LIMIT/OFFSET
    C.FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> SELECT —> DISTINCT —> ORDER BY —> LIMIT/OFFSET
    D.FROM(including JOINs) —> WHERE —> GROUP BY —> HAVING —> DISTINCT —> SELECT —> ORDER BY —> LIMIT/OFFSET

    正确的执行顺序应该是
    先找到要查询表格或连接要查询的表格,因此FROM才是第一步;
    接下来是进行条件筛选,所以是WHERE紧随其后;
    然后如果遇到表格有分组的需要,则需要先GROUP BY;
    分组时如果也存在筛选条件,这里就要用HAVING进行分组筛选;
    这些执行过后才是查询操作SELECT;
    SELECT的时候如果遇到重复数据,就需要去重,即使用DISTINCT;
    接下来如果要对查询后的数据进行排序,会用到ORDER BY;
    最后如果要指定返回的查询数据范围、条数则要用LIMIT/OFFSET函数。
    综上,只有C选项是正确的,ABD都是错误的执行顺序。
    7.下列选项中不属于结构化查询语言的组成部分的是()
    A.数据定义语言
    B.数据处理语言
    C.数据字典
    D.数据库事务

    SQL语言的组成部分有:数据定义语言、数据处理语言、数据控制语言、数据库事务。数据字典是关于数据库中数据的描述,是元数据,而不是数据本身。

    8.已知职员表employee(eno,ename,gender,birthday,salary),现有一张E表,表结构与职员表一致,要求将E表中没有在职员表中出现的女职员添加到职员表中。下列SQL语句正确的是()
    A.

    INSERT INTO employee(eno,ename,gender,birthday,salary)
    SELECT eno,ename,gender,birthday,salsry
    FROM E
    WHERE E.gender='女'
    
    • 1
    • 2
    • 3
    • 4

    B.

    INSERT INTO employee(eno,ename,gender,birthday,salary)
    SELECT eno,ename,gender,birthday,salsry
    FROM E
    WHERE E.gender='女' and EXISTS(
    SELECT * FROM employee
    WHERE employee.eno=E.eno)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    C.

    INSERT INTO employee(eno,ename,gender,birthday,salary)
    SELECT eno,ename,gender,birthday,salsry
    FROM E
    WHERE E.gender='女' and NOT IN employee
    
    • 1
    • 2
    • 3
    • 4

    D.

    INSERT INTO employee(eno,ename,gender,birthday,salary)
    SELECT eno,ename,gender,birthday,salsry
    FROM E
    WHERE E.gender='女' and NOT EXISTS(
    SELECT * FROM employee
    WHERE employee.eno=E.eno)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    A选项,缺少体现题干中“E表中没有在职员表中出现的女职员”的条件;B选项,语句的含义是“E表中在职员表中出现的女职员“,不符题意;C选项,缺少条件。

    Mysql中表student_table(id,name,birth,sex),插入如下记录:
    (‘1001’ , ‘’ , ‘2000-01-01’ , ‘男’);
    (‘1002’ , null , ‘2000-12-21’ , ‘男’);
    (‘1003’ , NULL , ‘2000-05-20’ , ‘男’);
    (‘1004’ , ‘张三’ , ‘2000-08-06’ , ‘男’);
    (‘1005’ , ‘李四’ , ‘2001-12-01’ , ‘女’);
    执行 select * from student_table where length(name) >= 0 的结果行数是()?
    1 2 3 4
    结果是1001,1004,1005共3行;length无法对null做筛选!

    10.大学生春季运动会的数据库,保存了比赛信息的三个表如下:
    运动员 sporter(运动员编号 sporterid,姓名name,性别 sex,所属系号 department),
    项目 item(项目编号 itemid,名称 itemname,比赛地点 location), 成绩 grade(运动员编号 id,项目编号 itemid,积分 mark)。
    用SQL语句完成在“体育馆”进行比赛的各项目名称及其冠军的姓名,正确的是:( )。
    A.

    SELECT i.itemname,s.name FROM grade g,
      (SELECT itemid iid,MAX(mark) max  FROM grade   WHERE itemid IN ( SELECT itemid FROM item  WHERE location='体育馆') GROUP BY itemid) temp,item i,sporter s 
    WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
    
    • 1
    • 2
    • 3

    B.

    SELECT i.itemname,s.name FROM grade g,
      (SELECT itemid iid,MIN(mark) max  FROM grade   WHERE itemid IN ( SELECT itemid FROM item  WHERE location='体育馆') GROUP BY itemid) temp,item i,sporter s 
    WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
    
    • 1
    • 2
    • 3

    C.

    SELECT i.itemname,s.name FROM grade g,
      (SELECT itemid iid,MAX(mark) max  FROM grade   WHERE itemid IN ( SELECT itemid FROM item  WHERE location='体育馆') ) temp,item i,sporter s 
    WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
    
    • 1
    • 2
    • 3

    D.

    SELECT i.itemname,s.name FROM grade g,
      (SELECT itemid iid,MIN(mark) max  FROM grade   WHERE itemid IN ( SELECT itemid FROM item  WHERE location='体育馆') GROUP BY itemid) temp,item i,sporter s 
    WHERE g.itemid=temp.iid AND g.mark=temp.max AND
    
    • 1
    • 2
    • 3

    由题意,取出冠军,即同一项目编号的组内分数最高者,应取max;
    B D中是取min,故排除B D;
    C中取max时没有分组,取出来的是所有项目最高分,不符合题意,排除

  • 相关阅读:
    在T3开发板上实现SylixOS最小系统(四)——实现调试调试信息打印接口
    《国产服务器操作系统发展报告(2023)》重磅发布
    F. Alex‘s whims Codeforces Round 909 (Div. 3) 1899F
    Chrome Extension 介绍
    38.cuBLAS开发指南中文版--cuBLAS中的Level-2函数her2()
    力扣 设计链表707
    jsp相关知识点
    Vite知识体系简述
    Spring Cloud学习笔记(Ribbon)
    moea中return, risk的计算
  • 原文地址:https://blog.csdn.net/qq_43353213/article/details/125448750