MySQL_多表查询

笛卡尔积:没有连接条件,通过笛卡尔积返回的结果中,字段是两个表的和,记录数是两个表记录数的积。

 

  1. 内连接查询(Inner Join

内连接就是在表关系的笛卡尔积数据记录中,保留表关系中所有匹配的数据记录,舍弃不匹

配的数据记录。按照匹配的条件可以分为自然连接、等值连接和不等连接。

    通过“inner join…on”来实现。按照匹配情况:内连接查询可以分为等值连接和不等连接两大类。

  1. 自然连接(Natural Join

根据表关系中相同名称的字段进行记录匹配,然后去掉重复的字段。

           Select  字段  from 表名1  natural  join 表名2;

自然连接的特点:

  1. 会自动判断相同的字段,进行数据值的匹配
  2. 可以指定查询结果中显示的字段值,不能指定匹配条件
  3. 查询结果中,匹配的字段只显示一个,即去掉重复字段

       

2)自连接

   是一种特殊的等值连接。就是指表和其自身进行连接

                  Select 字段 form 表1,表2  where 表1.字段=表2.字段;

                   注意:表1和表2是同一张表的两个不同部分

3)等值连接

                   Select  字段  from  1 inner join 2 on1.字段=2.字段;

                            注意:字段要使用表名字.字段的格式进行书写

                   Select   字段 from 1,表2 where 1.字段=2.字段

                            注意:字段要使用表名字.字段的格式进行书写

                   思路:1.确定需要查询的表和字段的来源;

2 .确定关联的匹配条件;

3.语法要对

 

 

 

4)不等连接

在关键字ON后的匹配条件中使用><>=<=、!=等运算符。

                   Select   字段 from 1,表2 where 1.字段>2.字段

          注意:字段要使用表名字.字段的格式进行书写

  1. 外连接(outer join

外连接就在是表关系的笛卡尔积数据记录中,不仅保留表关系中所有匹配的数据记录,而且

还会保留部分不匹配的数据记录。按照保留不匹配条件数据记录来源可以分为左外连接、右外连接和全外连接。

外连接查询会返回所操作表中至少一个表的所有数据记录。

通过 outer join…on 来实现。

 

1)左外连接(left outer join)

         除了选择相匹配的数据记录,还包含关联左边表中不匹配的数据记录,查询结果中,左边的表所有数据记录都会被查询出来。

         以关键字 left join 左边的表为基准,到右边的表中找到匹配的数据,找不到的匹配的数据就用null补齐

         Select * from 表1 left join 表2 on 表1.字段=表2.字段;

  1. 右外连接(right outer join)

除了选择相匹配的数据记录,还包含关联左边表中不匹配的数据记录,查询结果中,左边的表所有数据记录都会被查询出来。

以关键字 right join右边的表为基准,到左边的表中找到匹配的数据,找不到的匹配的数据就用null补齐

Select * from 表1 right join 表2 on 表1.字段=表2.字段;

 

        

  1. 全外连接(full outer join)

MySQL数据库不支持全外连接

 

  1. 合并操作(union

把查询结果直接合并在一起,同时会剔除重复数据记录

Select 字段1 from 1 union select 字段2 from2;

 

把查询结果直接合并在一起,不会剔除重复数据记录

Select 字段1 from 1 union all select 字段2 from2;

 

注意:两个select语句中查询的字段数必须相同

 

 

 

  1. 子查询

子查询:在一个查询语句中嵌套了其他若干查询,即在一个select查询语句的where或者from子句中包含另外一套select查询语句。

在查询语句中,外层的select查询语句被称为主查询,where子句或者from子句中的select查询叫子查询,也叫嵌套查询。

          通过子查询可以实现多表查询,该查询语句中可能包含in等关键字,也可能包含比较运算符。

理论上子查询可以出现在查询语句任意位置,但是实际使用过程中,一般会用在where和from子句中。

返回单行单列、单行多列、多行单列的数据记录,一般为where子句中的子查询

返回多行多列的数据记录,一般为from子句中子查询。

 

  1. 返回结果为单行单列的子查询

返回结果为单行单列时,该子查询语句一般在主查询的where子句中,一般会包含比较运算符(<、>、=……)

         Select  字段2  from 表名1 where 字段1=(select字段1 from 表名2 where…..);

 

2)返回结果为单行多列的子查询

                            Select  字段1 字段2字段3  from 表名1 where 字段4=(select 字段4 from 表名2  where…..)

 

3)返回结果为多行单列的子查询

                   返回结果为单行单列时,该子查询语句一般在主查询的where子句中,通常包含in等关键字

         Select 字段1 from 表1 where 字段2 in(select 字段2 from表2 where……);

    

4)返回结果为多行多列的子查询:

         返回结果为多行多列,一般会被当成临时表来处理,一般用在from子句中

         Select * from 表1,(select 字段1,字段2 from 表2 where ….)表3 where 表1.字段a=表3.字段a;

         注释:表3= select 字段1,字段2 from 表2 where ….

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值