美文网首页
多表查询语句

多表查询语句

作者: 向日花开 | 来源:发表于2017-05-20 14:16 被阅读76次
连接查询
当运算符为=时,成为等值连接,使用其他运算符称为非等值链接
  1. 查询每个学生及其选修课程的情况
select Student.*,SC.* from Student,SC where Student.Sno=SC.Sno;
  1. 查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
select Student.Sno Sname from Student,SC where Student.Sno='2' and SC.Grade>90;
自身链接

连接也可以自己与自己连接,叫做表的自身连接.

  1. 查询每一门课的间接先修课
select First.Cno, Second.Cpno from Course First,Course Second where First.Cpno=Second.Cno;
外连接
多表连接
  1. 查询每个学生的学号,姓名,选修的课程名以及成绩
select Student.Sno,Sname,Cname,Grade from Student,SC,Course where Student.Sno=Sc.Sno and SC.Cno=Course.Cno;
嵌套查询
带有IN谓词的子查询
  1. 查询与'刘晨'在同一个系学习的学生
select Sno,Sname,Sdept from Student where sdept in (select Sdept from Student where Sname='刘晨');//本例中子查询条件不依赖于父查询,称为不相关子查询,当in 的集合确定只返回一个值时,可以用=替换
  1. 查询选修了课程名为"信息系统"的学生学号和姓名
select Sno,Sname from Student where Sno in (select Sno from SC where Cno in (Select Cno from Course where Cname='信息系统'));//也是不相关子查询
带有比较运算符的子查询
  1. 找出每个学生超过他自己选修课平均成绩的课程号

select Sno,Cno from SC a where Grade>=(Select AVG(Grade) from SC b where b.Sno=a.Sno);//a是SC表的别名(元组变量),可以用来表示SC的一个元组,内层查询是求一个学生所有选修课程平均成绩的,至于是哪个学生的平均成绩要看a.Sno的值,而该值是与父查询相关的,所以叫做相关子查询.
带有ANY(SOME)或ALL谓词的子查询
关键字 含义
>ANY 大于子查询结果中的某个值
>ALL 大于子查询结果中的所有值
<ANY 小于子查询结果中的某个值
<All 小于子查询结果中的所有值
>=ANY 大于等于子查询结果中的某个值
>=ALL 大于等于子查询结果中的所有值
<=ANY 小于等于子查询结果中的某个值
<=All 小于等于子查询结果中的所有值
=ANY 等于子查询结果中的某个值
=All 等于子查询结果中的所有值
!=ANY 不等于子查询结果中的某个值
!=All 不等于子查询结果中的任何值
  1. 查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄
select Sname,Sage from Student where Sage<Any (Select Sage From Student where Sdept='CS') and Sdept !='CS';
  1. 查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名和年龄
select Sname,Sage from Student where Sage<All (select Sage from Student where Sdept='CS') and Sdept !='CS';
带有EXITS(存在)谓词的子查询(带有exits 谓词的子查询不返回任何数据,只产生逻辑值true,false)
  1. 查询所有选修了1号课程的学生姓名
select Sname from Student where exists (Select * from SC Where Sno=Student.Sno and Cno='1');
  1. 查询没有选修1号课程的学生姓名
select Sname from Student where not exists (Select * from SC where Sno=Student.Sno and Cno='1');
  1. 查询选修了全部课程的学生姓名
select Sname from Student where not Exists (select * from Course  where
not exists(select * from  SC where Sno=Student.Sno and Cno=Course.Cno));
  1. 查询至少选修了学生201215122选修的全部课程的学生号码
select distinct Sno from SC SCX where not exists (select * from SC SCY where SCY.Sno='201215122' and not exists (select * from SC SCZ where SCZ.Sno=SCX.Sno and SCZ.Cno=SCY.Cno));
集合查询(并操作union,交操作intersect和差操作except)
  1. 查询计算机科学系的学生及年龄不大于19岁的学生
select * from Student where Sdept ='CS' union select * from Student where Sage<=19;
  1. 查询选修了课程1或者选修了课程2的学生
select Sno from SC where Cno='1' Union select Sno from SC where Sno='2';
  1. 查询计算机科学系的学生与年龄不大于19岁的学生的交集
select * from Student where Sdept ='CS' interSect Select * from Student where Sage<=19;
  1. 查询即选修了课程1又选修了课程2的学生,就是查询选修课程1的学生集合与选修课程2的学生集合的交集
select Sno from SC where Cno='1' intersect select Sno from SC where Cno='2';
  1. 查询计算机科学系的学生年龄不大于19岁的学生的差集
select * from Student where Sdept ='CS' Except select * from Student where Sage <=19;

相关文章

  • 5. DQL语句和查询相关语句以及多表查询

    DQL语句和查询相关语句以及多表查询 一. DQL语句 数据查询语句DQL(Data Query Language...

  • 2018-03-20

    MYSQL查询语句 MYSQL复杂操作语句 MYSQL多表查询方法 函数部分

  • sql

    sql语句 查询 简单查询 例: 多表连接查询 例: 2.更新

  • 查询语句 多表查询

  • 多表查询语句

    连接查询 当运算符为=时,成为等值连接,使用其他运算符称为非等值链接 查询每个学生及其选修课程的情况 查询选修2号...

  • 2018-09-10复习

    一的关系,association嵌套结果,使用多表查询语句。resultMap,绑定数据,多表查询就ok多的关系,...

  • MySQL的多表关联查询

    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是...

  • 1.1 数据库-多表查询

    一、多表查询 --编写多表查询语句的一般过程 --(1)、分析句子要涉及到哪些表 --(2)、对应的表中要查询哪些...

  • SQL常用增删改查

    sql语句 查询 简单查询 例: 多表连接查询 例: 日期格式化 使用DATE_FORMAT(date,forma...

  • 数据产品经理养成记(四):SQL多张表查询

    上一节讲了SQL简单查询,包括SQL语句的分类、基本查询语句(select)、条件语句、运算符等。本节讲一下多表查...

网友评论

      本文标题:多表查询语句

      本文链接:https://www.haomeiwen.com/subject/vxkpxxtx.html