当前位置:   article > 正文

MySQL多表左右连接查询_左外关联后两条数据如何

左外关联后两条数据如何

多表查询:当查询结果来自多张数据表的时,就需要用到连接查询。

多表连接查询:会出现笛卡尔积的现象:a表有m行,b表有n行,查询结果=m*n行,消除笛卡尔积现象就必须加上关联条件,关联条件的个数=n个表-1。

多表连接查询按照能分类为:
1、内连接:

        等值连接:表之间连接条件用 = 连接 
        非等值连接:表之间连接条件用非等号
        自连接:相当于等值连接,只不过是自己连接自己,不像等值连接是两个不同的表 

语法格式:

  1. select                 
  2.     查询列表       
  3. from                
  4.     表1 别名1,
  5.     表2 别名2
  6.     ......      
  7. where               
  8.      关联条件 and
  9.      筛选条件(针对表的所有记录)       
  10. group by                
  11.     分组字段列表       
  12. having(只能配合group by使用)                
  13.     与分组有关的筛选条件(针对分组后的每组内记录)       
  14. order by                
  15.     排序

后面的关键字查询条件可根据需求进行选择,

自连接 eg:

  1. select
  2. e.name,m.salary
  3. from
  4. employees e, employees m #把同一张表当成两张不同表
  5. where
  6. e.manager_id = m.employee_id
  7. order 不要
  8. m.salary DESC;


2、外连接: 

        左外连接:查询结果以左表为主表查询所有记录,从表无记录数据时为 null
        右外连接:查询结果以右表为主表查询所有记录,从表无记录数据时为 null
        全外连接:Mysql不支持
        交叉连接:就两个记录做笛卡尔积,不加关联条件

语法格式:

  1. select 
  2.     查询列表
  3. from 
  4.     表1 别名1
  5.    【链接类型】 join 表2 别名2
  6.     on 关联条件
  7.    【链接类型】 join 表3 别名3
  8.     on 关联条件
  9. where               
  10.      筛选条件(针对表的所有记录)       
  11. group by                
  12.     分组字段列表       
  13. having(只能配合group by使用)                
  14.     与分组有关的筛选条件(针对分组后的每组内记录)       
  15. order by                
  16.     排序

 

1)【链接类型】的关键字:

内连接:inner (还可以省略)
外连接:
    左外连接 left 【outer】  (outer可以省略)
    右外连接 right 【outer】
    全外连接 full 【outer】(Mysql不支持)
    交叉连接 cross 【outer】(不常用)

2)外连接知识点:

1、外连接的查询结果为主表中有的所有记录
     外表有对应数据,结果记录上显示对应数据
     外表中没有对应的数据,结果记录上填充null

2、外链接与连接的区别:
     内连接:当从表没有记录的时候,主、从表的记录都丢掉!
     外连接:当从表没有记录的时候,会保留主表的记录,对应从表null

3、左外连接:left join左边的是主表,
     右外连接:right join 右边的是主表

4、左外连接和右外连接上是互通的,掌握一个就好啦!

内连接 eg:

  1. select
  2. e.name,j.job_title,d.department_name
  3. from
  4. employees e
  5. inner join departments d
  6. on e.department_id = d.department_id
  7. inner join jobs j
  8. on e.job_id=j.job_id
  9. where e.salary >5000
  10. order by d.department_name;

左连接 eg:

  1. SELECT
  2. d.department_id,d.department_name,e.employee_id
  3. FROM
  4. departments d
  5. LEFT JOIN employees e
  6. ON d.department_id = e.department_id
  7. WHERE
  8. e.employee_id IS NULL;

全外连接查询:

     FULL OUTER JOIN 中会返回所有右边表中的行和所有左边表的行。

  1. ## mysql不支持
  2. SELECT
  3. d.department_id,d.department_name,e.employee_id
  4. FROM
  5. departments d
  6. FULL OUTER JOIN employees e
  7. ON d.department_id = e.department_id
  8. WHERE
  9. e.employee_id IS NULL;

     MYSQL中暂时不支持全外连接,但是可以通过 union+左右连接来完成,感觉不常用

 

ends ~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/953939
推荐阅读
相关标签
  

闽ICP备14008679号