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

目录

前言 

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

一、连接查询

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 去除重复学号

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第1张图片

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)。

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第2张图片

 4.多表连接

多个表相互连接。

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第3张图片

二.嵌套查询 

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

1.带有in谓词的子查询

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

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

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

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

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第4张图片

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

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

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第5张图片

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

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

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第6张图片

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第7张图片

4.带有exists谓词的子查询

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

exists与not exists的区别

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

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

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第8张图片


三、集合查询

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

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

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

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

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

四.基于派生表的查询

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

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

数据库(mysql) 选择语句(select)的应用(查找信息)(二)_第9张图片


总结

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

你可能感兴趣的:(Mysql,mysql,数据库架构)