Mysql的查询语句、左连接、外连接、右连接、内连接(联合查
询、连接查询、⼦查询等)
Mysql的各个查询语句(联合查询、连接查询、⼦查询等)
⼀、联合查询
关键字:union
语法形式
select语句1
union[union选项]
select 语句2
union[union选项]
select 语句3
union[union选项]
……
作⽤:
所谓的联合查询,就是将多个查询结果进⾏纵向上的拼接,也就是select语句2的查询结果放在select语句1查询结果的后⾯。依次类推!
既然是纵向上的拼接,所以联合查询有⼀个最最基本的语法,就是各个select语句查询出来的结果,其中字段的个数必须相同,⽐如,不能⼀个是4列,⼀个是3列!并且从显⽰的结果上看,⽆论“拼接”了多少个select语句,字段名只显⽰第⼀条select语句的字段名!
其中,这⾥的union选项跟前⾯学习的select选择的值是⼀样的,只是默认值不⼀样:
all:也是缺省值,保留所有的查询结果!
distinct:去重(默认值),去掉重复的查询结果!
union的应⽤
union的主要应⽤有以下的两种情形:
第⼀,获得数据的条件,在同⼀个select语句中存在逻辑冲突,或者很难在同⼀个select语句中实现,这个时候,我们需要把这个业务逻辑进⾏拆分,也就是使⽤多个select语句单独的分别实现,然后再⽤union将各个select语句查询结果“拼接”到⼀起!
案例:
现在想查询上⾯student表中 meiguo中成绩score最⾼的,以及zhangjiang中成绩最低的,如何实现?
这⾥需要有⼏个主意的地⽅:
1,联合查询中如果要使⽤order by,那么就必须对这个select语句加上⼀对括号!
2,联合查询中的order by必须搭配上limit关键字才能⽣效!因为系统默认的联合查询的结果往往⽐较多,所以要加以限制,当然,如果想显⽰全部的数据,可以在limit⼦句后⾯加上⼀个很⼤的数,⽐如:999999
第⼆,如果⼀个项⽬的某张数据表的数据量特别⼤,往往会导致数据查询效率很低下,此时,我们需要对数据表进⾏优化处理,往往就是对该数据表进⾏“⽔平分割”,此时,这些拆分后的数据表,表结构都是⼀样的,只是存放的数据不⼀样!
⽐如:⼀个市区的⼿机号码机主信息,可以按不同⽹段放在不同的数据表中,现在,移动公司想查询平均每⽉消费在500元以上的客户,应该怎么查询?
回答:⼀个表⼀个表的查询,然后再通过union进⾏联合查询!
⼆、连接查询简介
概念
表与表之间是有联系的!
所谓的连接查询,就是指将两张或多张表按照某个指定的条件,进⾏横向上的连接并显⽰!
所以,从查询结果上看,字段数增加了!
⽐如:A表有3个字段,B表有4个字段,A表和B表进⾏连接查询可能有7个字段!
连接查询的操作有很多,根据连接查询的⽅式或性质不同,⼜可以将连接查询分成:
交叉连接、内连接、外连接和⾃然连接!
1、交叉连接
关键字:cross join
含义
就是从⼀张表的⼀条记录去连接另⼀张表中的所有记录,并且保存所有的记录,其中包括两个表的所有的字段!
从结果上看,就是对两张表做笛卡尔积!
笛卡尔积也就是两个表中所有可能的连接结果!如果第⼀张表有n1条记录,第⼆张表有n2条记录,那么笛卡尔积的结果有n1*n2条记录!
交叉连接⼀般没有太⼤的意义,因为有⼤量的⽆效数据!
案例:
中国民间⼩名的取法
因为⼩孩取个贱名不⽣病好养活,所以根据出⽣⽉份和⽇期起名字。根据阳历(公历)⽣⽇中
⽉份:1 长 2 栓 3 ⼤ 4 来 5 狗 6 守 7 傻 8 福 9 屎 10 ⼆ 11 胖 12 臭
⽇期:1 娟 2 妮 3 腿 4 娣 5 球 6 坑 7 年 8 岁 9 娃 10 ⽑ 11 剩 12 姑 13 英 14 妹 15 肥
16 霞 17 狗 18 虎 19 花 20 凤 21 定 22 蛋 23 妞 24 ⽜ 25 ⽊ 26 翠 27 爱 28 财 29 ⽯ 30 美丽 31 发
2.内连接
关键字:inner join
含义
内连接需要区分左表和右表,出现在join关键字左边的就是左表,反之就是右表!
数据在左表中存在,同时在右表中⼜有对应的匹配的结果才会被保存!如果没有匹配上,我们就认为数据没有意义,也就不会保存!
所谓的配合,就是存在某种条件使得两个或多个表之间能够识别彼此!通常就是两张表中存在相同的某个字段!
exists子查询语法规则
select *|字段列表 from 左表 inner join 右表 on 左表.字段 = 右表.字段;
注意:
内连接的本质还是在做交叉连接,只不过是在交叉连接的基础之上加上⼀定的连接条件!符合连接条件
的才会被显⽰,不符合的就不显⽰!所以,如果内连接的时候没有连接条件,此时内连接就相当于是交叉连接!
需要注意的⼏点:
1.内连接中的inner join可以写成join,inner可以省略,默认的就是内连接!
2.  当左表和右表进⾏匹配的字段名相同的时候,字段名的前⾯必须加上表名!
如果这两个匹配的字段名不⼀样,表名则可以省略!
3,表名⼀般都很长,可以⽤别名来代替!
4,这⾥的 on是指定条件的关键字,所以也可以使⽤where代替,但是使⽤on的效率更⾼!
3.外连接
外连接⼜可以分成左外连接和右外连接!
左外连接
关键字:left outer join
语法:select * from 表1  left  outer  join  表2  on 左表字段=右表字段
跟内连接⼀样,也是拿左表的每⼀条记录按照on后⾯的条件去匹配右表,如果匹配成功,那么就保留两张表的所有的记录,如果匹配失败(也就是左表的⼀条记录⽆法匹配右表的所有的记录),此时,只保留左表的记录,右表的记录全部⽤null代替,此时左表也叫作主表!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。