数据库(mysql) 选择语句(select)的应用(查找信息)(二)

本文详细介绍了SQL中的多表查询技术,包括等值与非等值连接、自身连接、外连接和多表连接。同时,深入探讨了嵌套查询的四种类型:带有in谓词、比较运算符、any或all谓词以及exists谓词的子查询。此外,还讲解了集合查询的并、交和差操作,并提到了基于派生表的查询。通过实例解析,帮助读者掌握这些高级查询技巧。
摘要由CSDN通过智能技术生成

目录

前言 

前面学习了数据单表的查询,接下来我要继续进行多表的查询了。

一、连接查询

1.等值与非等值连接查询

2.自身连接

 3.外连接

 4.多表连接

二.嵌套查询 

1.带有in谓词的子查询

2.带有比较运算符的子查询

3.带有any 或 all 的谓词的子查询

4.带有exists谓词的子查询

三、集合查询

四.基于派生表的查询

总结

以上就是这次复习的了,继续加油。

前言 

https://mp.csdn.net/mp_blog/creation/editor/124282946(单表查询链接)

前面学习了数据单表的查询,接下来我要继续进行多表的查询了。

包括:

1)连接查询

a.等值与非等值连接查询

b.自身连接

c.外连接

d.多表连接

2)嵌套查询

a.带有in谓词的子查询

b.带有比较运算符的子查询

c.带有any 或 all 的谓词的子查询

d.带有exists谓词的子查询

3)集合查询

4)基于派生表的查询

一、连接查询

1.等值与非等值连接查询

连接查询的where子句中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:

[<表名1.>] <列名1><比较运算符>[<表名2.>] <列名2>

举个栗子:select student.sname,sc.sno from student,sc where student.sno=sc.sno;

使用连接谓词的格式:

[<表名1.>] <列名1> between [<表名2.>] <列名2> and [<表名2.>]<列名3>

举个栗子:select student.sname,sc.sno from student,sc where student.sno=sc.sno and sc.cno="22" and sc.grade>90;

当连接符为"="时称为等值连接,使用其他运算符称为非等值连接。

(注意:栗子中的属性(标明颜色)明前都加了表名前缀,这是为了避免混淆,如果属性名在表中唯一,则可以省略表名)

   举栗子:我们可以在select 后加 distinct 去除重复学号

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aKo6KiANzc4,size_20,color_FFFFFF,t_70,g_se,x_16

2.自身连接

一个表和自身进行连接,称为自身连接。

操作:要为同一个表取两个别名,一个是first,另一个是second。

举个栗子:select后包含student表和course表的属性

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aKo6KiANzc4,size_20,color_FFFFFF,t_70,g_se,x_16

 3.外连接

舍弃的元组称为悬浮元组,把悬浮元组存储在结果关系中,而在其他属性上填空值,就叫做外连接;保留左边关系的悬浮元组叫左外连接(left outer join 或 left join),反之,保留在右边的元组就叫做右外连接(right outer join 或 right join)。

举个栗子:查询 每个学生及其选修课程的情况

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aKo6KiANzc4,size_20,color_FFFFFF,t_70,g_se,x_16

 4.多表连接

多个表相互连接。

举个栗子:select后包含student表和course表以及sc表的属性

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aKo6KiANzc4,size_20,color_FFFFFF,t_70,g_se,x_16

二.嵌套查询 

在sql语言中,一个 select-from-where 语句称为一个查询块,将一个查询块嵌套在另一个查询块的  where 子句或 having 短语的条件中的查询称为嵌套查询。

1.带有in谓词的子查询

子查询:第二个 select-from-where 开始的查询块,第一个称为父查询,子查询条件不依赖父查询的称为不相关子查询,反之,称为相关子查询。

(注:子查询的 select 语句不能使用 order by 子句, order by 子句只能对最终结果进行排序)

步骤:先分布来完成各自的查询任务,然后再构造嵌套查询 

举个带 in 谓词的子查询:(不相关子查询)查询没有选修 操作系统 课程的 cs 系的学生的姓名;

(我们思考的顺序应该从后往前读:        1)学生姓名         2)是cs系          3)没选 操作系统)

b774df786d454d7eac2fe124302d60f0.png

2.带有比较运算符的子查询

顾名思义,带比较运算的子查询就是含比较符号的查询。

举个栗子:(相关子查询)找出每个学生超过他自身平均成绩的课程号

efe440c4e1424821b9b7ce1c5b6fb54e.png

3.带有any 或 all 的谓词的子查询

子查询返回单值时可以用比较运算符,但返回多值时要用 any|all 谓词修饰符,使用时必须要搭配比较运算符使用。

举个栗子:查询 非计算机科学系 中比 计算机科学系任意一个学生年龄小或者等于的学生姓名和年龄。

45de91cd21ee44448845d885eaafeb6e.png

 (通常使用聚集函数实现子查询比直接用any或all查询效率更高)

95e64df18786412b91c936ccf3dd3f55.png

4.带有exists谓词的子查询

带有exists谓词的子查询不返回任何数据,只产生逻辑真‘ture’ 和 逻辑假 ‘false’。

exists与not exists的区别

exists是查询的值非空,返回真值,否则返回假值

not exists 是查询的值为空则返回真值,否则返回假值

举栗子:查询所有选修了22号课程的学生姓名

265aae3ff93e420188aebf450bcd766d.png


三、集合查询

        select   语句要查询的是元组的集合,所以多个select语句的结果可以进行集合操作。

集合的操作主要包括并操作union、交操作intersect 和 差操作except.

其中 并操作类似于 或 ,交操作类似于 和

   举差操作的一个栗子: 查询计算机科学系的学生与年龄不大于19岁的学生的差集

​​​select * from student where sdept="cs" except select * from student where sage<=19

四.基于派生表的查询

 子查询不仅可以出现在where 子句中,还可以出现在from子句中,这是子查询生成的临时派生表成为主查询的查询对象。

 举个栗子:查询所有选修了22号课程的学生

43392f4069184132a317f63c7b7b4e17.png


总结

以上就是这次复习的了,继续加油。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值