牛客网-SQL专项训练5

①查询运动员表中运动员的所有信息,按照年龄升序,成绩降序排列。SQL语句为:

SELECT  *  FROM  运动员

ORDER 年龄 ASC, 成绩 DESC;

知识点:

ASC:升序,默认就为升序

DESC:降序

②当WHERE子句、GROUP BY子句、HAVING子句、ORDER BY子句同时出现在一个SQL查询语块中时,最后执行的是( ORDER BY子句)

知识点:

SELECT语法结构:

SELECT [DISTINCT] 字段名

FROM 表名

[WHERE] 条件筛选

[GROUP BY] 分组

[HAVING] 分组筛选

[ORDER BY] 排序

[LIMIT] 名次或分页

执行顺序:

(1)首先运算的是FROM子句,根据FROM子句中指定的一个或多个表创建工作表;

(2)如果存在WHERE子句,则WHERE子句对步骤1获得的工作表进行条件筛选,删除不符合条件的记录;

(3)如果存在GROUP BY子句,则对步骤2生成的结果表按指定字段进行分组,生成一份新的结果表;

(4)如果存在HAVING子句,则对步骤3的结果表按指定条件进行筛选,删除掉不满足筛选条件的记录;

(5)执行SELECT子句,删除不包含在SELECT 字段名,所指定的字段。如果SELECT子句中包含关键字DISTINCT,则执行去重复运算

(6)如果有ORDER BY子句,则按指定的排序规则对结果表进行排序操作;

(7)如果需要找前几名,用LIMIT名次。

③Mysql中表student_table(id,name,birth,sex),查询张姓、李姓的学生总人数,错误的是(C)?

解析:

观察四个选项,A、D选项用的sum函数, 满足条件记为1,不满足条件记为0或者null,最终总和就是符合条件的人数,B、C用的count函数,B选项满足条件记为2,不满足条件记为null,最终记的是2的个数,不计null的个数,最后还是相当于满足条件的人数,而C选项,满足条件的记为1,不满足条件的记为0,最终计算的个数即包括1的个数也包括0的个数,不符合条件 ,故C错。

④下列数据库备份类型中,仅记录自最近一次完整数据库备份以后发生改变的数据的是(B)

 知识点:

1、完全备份
这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。
2、事务日志备份
事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。
3、差异备份
也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。
4、文件备份
数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用

⑤Mysql(版本8.0.25)中表student_table(id,name,birth,sex),插入如下记录:
('1004' , '张三' ,'2000-08-06' , '男');
('1009' , '李四', '2000-01-01', '男');
('1010' , '李四', '2001-01-01', '男');
('1006' , '王五', '2000-08-06' , '女');
('1008' , '张三', '2002-12-01', '女');
('1012' , '张三', '2001-12-01', '女');
('1011' , '李四', '2002-08-06' , '女');

('1013' , '赵六' ,'2000-09-06' , '男');
现有SQL:

select t1.*,t2.*
from (
select * from student_table where sex = '男' ) t1 
full join 
(select * from student_table where sex = '女') t2 

on  t1.name = t2.name ; 
如下SQL中与上述SQL实现的语义和结果一致的是()?
A.

 B.

 C.

 D.

解析:

题中要求是全连接:

内连接:

 左连接:

 右连接:

 C选项中:

第1次union all 左连结且右表字段是null的记录,

第2次union all 右连结且左表字段是null的记录

 这正是与题目中全连接结果相同。

题解中参考别人的讲解:用排除法,画韦恩图就好了。full join是全连接,内连接是两圆的交集,左连接是左圆,右连接是右圆,全连接是左圆去掉交集部分+交集部分+右圆去掉交集部分。“去掉”在代码里表示出来就是XX IS NULL。找两个IS NULL就是答案。

posted on 2022-09-09 21:00  我不想一直当菜鸟  阅读(179)  评论(0编辑  收藏  举报