MySQL之子查询与联合查询

子查询
1.in子查询
#查询没有选修“计算机网络”的学生学号和姓名
select 学号,姓名 from student where 学号 not in
   (select 学号 from sc where 课程号 in
      (select 课程号 from course where 课程名称 = '计算机网络'));
#可以观察发现嵌套的时候字段是也进行嵌套

#查询所有成绩大于80分的学生的学号和姓名
select 学号,姓名 from student
  where 学号 in
    (select 学号 from sc where 成绩>80);
·
2.比较运算符查询
#查询选修07003号课程,且平均分数超过平均成绩的学号
select 学号 from sc
   where 课程号 = '07003' and 成绩 >=
     (select avg(`成绩`) from sc);

3.all或all子查询
#any表示大于一组值中的任意一个 all大于一组值中的每一个
#查询成绩最高的学号和成绩
select 学号,成绩 from sc 
   where `成绩`>= all(select 成绩 from sc);

#查询选修07002课程号的成绩高于07004课程号的成绩的学生的学号
select 学号 from  sc
  where 课程号='07002' and 成绩>any
    (select 成绩 from sc
    where 课程号='07004');

4.exists查询
#查询选修07003课程的学生姓名
  select 姓名 from student
   where exists
 ( select * from sc
      where student.`学号`=sc.`学号` and 课程号 = '07003'); 

#查询没有选修07003课程的学生姓名
 select 姓名 from student
   where not exists
 ( select * from sc
      where student.`学号`=sc.`学号` and 课程号 = '07003'); 
 
联合查询
1.union  并集查询,将2个或以上的查询结果合并成一个综合的查询结果
#在student中查询年龄不大于21岁的人和女生的信息
select * from student
  where year(NOW())-year(`出生日期`)<=21
union
 select * from  student
   where `性别`='女'; 

#查询选修课程07002或07003的成绩信息
select * from sc
   where 课程号 = '07002'
union 
select * from sc
   where `课程号` = '07003';

2.join

#查询选修课程07002或选修成绩在85以上的成绩信息
select distinct a.*
  from sc a join sc b on a.学号=b.学号
      where (a.课程号 =  07002 )
           or (a.成绩 >=85);


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/deepseazbw/article/details/79976720
个人分类: MySQL
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭