第5次作业-SQL语句的基本使用5-多值子查询
1.在student_info表中查找与“刘东阳”性别相同的所有学生的姓名、出生日期:
SELECT 姓名,出生日期 FROM student_info
WHERE 性别=(SELECT 性别 FROM student_info
WHERE 姓名='刘东阳');
![](https://img2023.cnblogs.com/blog/3276473/202310/3276473-20231017214842635-1864447749.jpg)
2.使用IN子查询查找所修课程编号为0002、0005的学生学号、姓名、性别:
SELECT 学号,性别,姓名 FROM student_info
WHERE 学号 IN(SELECT 学号 FROM grade
WHERE 课程编号 IN('0002','0005'));
![](https://img2023.cnblogs.com/blog/3276473/202310/3276473-20231017215913735-1700857079.jpg)
3.使用ANY子查询查找学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和分数:
SELECT 课程编号,分数 FROM grade
WHERE 学号='0001' AND 分数>ANY(SELECT 分数 FROM grade
WHERE 学号='0002');
![](https://img2023.cnblogs.com/blog/3276473/202310/3276473-20231017222854780-1010801799.jpg)
4.使用ALL子查询查找学号为0001的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数:
SELECT 课程编号,分数 FROM grade
WHERE 学号='0001' AND 分数>ALL(SELECT 分数 FROM grade
WHERE 学号='0002');
![](https://img2023.cnblogs.com/blog/3276473/202310/3276473-20231017223631316-342109050.jpg)
5.使用UNION运算符针student_info表中姓“刘”的学生的学号、姓名与姓“张”的学生的学号、姓名返回在一个表中:
SELECT 学号,姓名 FROM student_info
WHERE 姓名 LIKE '刘%'
UNION
SELECT 学号,姓名 FROM student_info
WHERE 姓名 LIKE '张%';
![](https://img2023.cnblogs.com/blog/3276473/202310/3276473-20231017224705123-808587923.jpg)
6.思考:delete 、drop、truncate区别,并总结:
删除方式 |
drop |
truncate |
delete |
命令分类 |
数据定义语言(DDL) |
数据定义语言(DDL) |
数据操作语言(DML) |
执行速度 |
快 |
较快 |
慢 |
删除对象 |
删除整张表和表结构以及表的索引、约束和触发器 |
只删除表数据,表的结构、索引、约束等会保留 |
只删除表的全部或部分数据,表的结构、索引、约束等会保留 |
删除条件(WHERE) |
不能用 |
不能用 |
可以用 |
回滚 |
不可回滚 |
不可回滚 |
可回滚 |
自增初始值 |
— |
重置 |
不重置 |
1.drop/truncate都是数据定义语言(DDL),执行后会自动提交;而delete是数据操作语言(DML),执行后不会自动提交。
2.对于由 FOREIGN KEY 约束引用的表,不能使用TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
3.TRUNCATE TABLE 不能用于参与了索引视图的表。
7.整理课上关于多值子查询的例子,以笔记形式、或者视频讲授形式呈现。尽可能通俗易懂,不限于形式:
123云盘:https://www.123pan.com/s/9Eshjv-YvXAh.html