MySQL 连接查询

2019-11-12  本文已影响0人  村东头老骥

MySQL的连接查询

内连接

内连接使用比较运算符进行表之间的某些列数据的比较操作,并列出这些表中连接相匹配的数据行。根据所使用的比较的方式不同,内连接又分为等值连接,自然连接,和不等值连接三种。
【等值连接】
在连接条件中使用等于号(=)运算符比较被连接列的列值,其中查询结果中列出被连接表中所有的列,包括其中的重复列。

select * from studio inner join class on studio.cl_id = class.cl_id
等值连接.png

【自然连接】
有选择的显示列

select st_id as '编号',st_name as '学生姓名',cl_class as '班级名称' 
from studio inner join class  
    on studio.cl_id = class.cl_id 
order by st_id
-- 有选择的列进行显示
+------+----------+----------+
| 编号 | 学生姓名 | 班级名称 |
+------+----------+----------+
|    2 | 林黛玉   | 百杰二班 |
|    3 | 陆小凤   | 千星一班 |
|    4 | 西门吹水 | 千星二班 |
|    5 | 刘小琴   | 百杰一班 |
|    6 | 黄平     | 百杰二班 |
|    9 | 陈小春   | 百杰一班 |
+------+----------+----------+
6 rows in set (0.00 sec)

【连接多个表进行查询】
对于添加多个表的时候需要注意的是只要使用 inner join 表名 on(匹配条件即可)

SELECT
    st_id AS '编号',
    st_name AS '学生姓名',
    cl_class AS '班级名称',
    ho_coding AS '宿舍编号' 
FROM
    studio
    INNER JOIN class ON studio.cl_id = class.cl_id
    INNER JOIN hostel ON studio.ho_id = hostel.ho_id
多表联查.png

外连接

内连接: 返回结果查询集合中符合查询条件和连接条件的行

外连接: 不仅仅包含符合条件的行,而且还包括左表(左外连接时Left outer join或者Left join)、右表(右外连接Right outer join或者Right join)、和完全连接(Full outer join 或Full join)MySQL中不支持全连接可以使用联合查询左连接右连接实现。

总结: 外连接不只列出与连接条件相匹配的行,而且列出左表,右表,或两个表所有符合的数据行

  1. 左外连接

以左表为主,显示出主表中所有的数据行,如果右边从表中没有之匹配的数据则显示NULL.

select  st.st_id as '学生编号', st.st_name as '学生姓名',
        cl.cl_id as '班级编号',cl.cl_class as '班级名称'
from studio as st left outer join class as cl
    on st.cl_id=cl.cl_id
左外连接.png
  1. 右外连接
    右外连接和左外连接对应,以右边为主表,左边为从表,其他一样
select  st.st_id as '学生编号', st.st_name as '学生姓名',
        cl.cl_id as '班级编号',cl_class as '班级名称'
from studio as st right outer join class as cl
    on st.cl_id=cl.cl_id
右外连接.png

自连接
对于自连接其实笼统的说就是连接关键字的两边都是同一个表

select a.z_zone,b.z_zone 
from zone as a inner join zone as b 
    on a.z_id=b.id 
group by b.z_zone
-- 输出结果
+--------+--------+
| z_zone | z_zone |
+--------+--------+
| 成都   | 四川   |
| 绵阳   | 四川   |
| 北京   | 北京   |
| 南京   | 江苏   |
| 苏州   | 江苏   |
| 常州   | 江苏   |
+--------+--------+
---
+------+--------+
| 地名 | 辖区数 |
+------+--------+
| 北京 |      1 |
| 四川 |      2 |
| 江苏 |      3 |
+------+--------+

上一篇下一篇

猜你喜欢

热点阅读