数据库(子查询)

知识点

1.子查询思想:把一个内部查询的结果作为外部查询的条件的一部分。

2.in子查询用于进行一个给定值是否在子查询中结果集中的判断,格式为:expression[not]in(subquery—子查询,只能返回一列的值,与外部比较条件列相同)

3.比较子查询表达式的值与子查询的值进行比较运算,格式为:expression{比较运算符} {all|some|any} (subquery)

4.All指定表达式要与子查询结果集中的每一个值都要进行比较,当表达式与每个值都满足比较关心时,才返回True,否则返回False。

5.Some或者Any表示表达式只要与子查询结果集中的某个值满足比较关系时,就返回ture,否则返回false。

练习题
1.在score表中查询选修了206号课程或101课程的学生学号。
SELECT 学号 FROM score WHERE 课程号=“206” OR 课程号=“101”;
2.查询选修了206号课程或101课程的学生情况。
//解题分析:先在score表中查询出选修了206号课程或101课程的学生的学号,然后在students表中查询以上学号对应的学生的情况
SELECT * FROM students WHERE IN(SELECT 学号 FROM score WHERE 课程号=“206”OR 课程号=“101”);
3.查询没有选修了206号课程或101课程的学生情况。
//解题分析:在查询出了选修了以上课程的同学基础上取反
SELECT * FROM students WHERE 学号 NOTIN(SELECT 学号 FROM score WHERE课程号=“206” OR 课程号=“101”);
4.在score表中查询101号课程成绩在70分到90分之间的学生的学号。
SELECT 学号 FROM score WHERE 课程号=“101” AND 课程成绩>70 AND 课程成绩<90;
5.查询101号课程成绩在70分到90分之间的学生姓名、性别、专业名。
SELECT 姓名,性别,专业名 FROM students WHERE 学号 IN(SELECT 学号 FROM score WHERE 课程号=“101” AND 课程成绩>70 AND 课程成绩<90;)
6.查询与王林在同一个专业学习的学生情况。
//解题分析:先在students表中查询姓名为王林的同学所在的专业名,然后再在students表中查询该专业学习的学生情况。
SELECT * FROM students WHERE 专业 IN (SELECT 专业 FROM students WHERE 姓名=“王林”);
7.查询所有通信工程专业的学生的成绩。
//解题分析:先在students表中查询专业名为通信工程的所有同学的学号,然后在score表中查询这些同学的成绩。
SELECT 成绩 FROM score WHERE 学号 IN (SELECT 学号 FROM students WHERE专业=“通信工程”);
8.查询比所有通信工程专业学生成绩都高的学生情况。
//解题分析:联系第十二题,查询在score表中存在条件比上面所有的成绩都高的学号,然后在students表中查询这些学号对应的学生信息
SELECT * FROM students WHERE 成绩>(SELECT MAX(成绩) FROM score WHERE 专业=“通信工程”)AND 专业 <> “通信工程” ORDERBY 成绩;
9.将姓名为张蔚的同学的所有成绩加上5分。
UPDATE score SET 成绩=成绩+5 WHERE 姓名=“张蔚”;
10.删除计算机专业所有学生大于90分的成绩记录。
DELETE FROM score WHERE专业=“计算机” AND 成绩>90;
11.把学号为’09001104’的学生的计算机基础成绩减少5分。
UPDATE score SET 成绩=成绩-5 WHERE 学号=“09001104” AND 课程=“计算机基础”;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值