一、连接查询

连接查询是指将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接)

连接查询的意义: 在用户查看数据的时候,需要显示的数据来自多张表。

连接查询: join, 使用方式: 左表 join 右表;左表: join关键字左边的表;右表: join关键字右边的表。

连接查询分类:内连接,外连接,自然连接和交叉连接。

交叉连接: cross join, 从一张表中循环取出每一条记录, 每条记录都去另外一张表进行匹配: 匹配一定保留(没有条件匹配), 而连接本身字段就会增加(保留),最终形成的结果叫做: 笛卡尔积。

blob.pngblob.pngblob.png



内连接:join, 从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.

 blob.png                  blob.png

         

外连接: 以某张表为主,取出里面的所有记录, 然后每条与另外一张表进行连接: 不管能不能匹配上条件,最终都会保留: 能匹配,正确保留; 不能匹配,其他表的字段都置空,外连接分为两种: left join: 左外连接(左连接), 以左表为主表;right join: 右外连接(右连接), 以右表为主表

基本语法: 左表 left/right join 右表 on 左表.字段 = 右表.字段;

blob.png                 

自然连接: select * from t1 a,t2 b where a.id=b.id


二、联合查询

联合查询是将多次查询(多条select语句)在记录上进行拼接(字段不会增加)多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)

语法:select 语句1 Union [union选项] select语句2

其中union选项:all保留所有(不管重复) distinct: 去重(整个重复,默认)

意义:1查询同一张表,但是需求不同,如查询学生信息男生身高升序女生身高降序 2多表查询: 多张表的结构是完全一样的,保存的数据(结构)也是一样的.

blob.pngblob.png

Order by默认为升序,降序为DESC,升序为ASC

blob.png

三、子查询

子查询是在某个查询结果之上进行的(一条select语句内部包含了另外一条select语句),分为按位置分类、结果分类

    按位置分类: 子查询(select语句)在外部查询(select语句)中出现的位置

    1From子查询: 子查询跟在from之后

    2Where子查询: 子查询出现where条件中

    3Exists子查询: 子查询出现在exists里面

按结果分类: 根据子查询得到的数据进行分类(理论上讲任何一个查询得到的结果都可以理解为二维表)

    1标量子查询: 子查询得到的结果是一行一列

    2列子查询: 子查询得到的结果是一列多行

    3行子查询: 子查询得到的结果是多列一行(多行多列) 1,2,3出现的位置都是在where之后)

    4表子查询: 子查询得到的结果是多行多列(出现的位置是在from之后)

标量子查询:

blob.pngblob.png

blob.png

列子查询:

blob.png

找出语文和数学都及格人的名字

select distinct name from t where name not in

(select name from t where score<60)

行子查询:

blob.png

找出年龄最大且身高最高的人(两种方案)

blob.pngblob.png

表子查询:

blob.png

找出每个人最好的成绩

blob.png

Exists子查询:

blob.png

如果存在的话身高大于2米的人,列出表中所有数据

blob.png

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您好,欢迎到访网站!
  查看权限

«   2018年10月   »
1234567
891011121314
15161718192021
22232425262728
293031

最新留言