Select进阶查询·连接查询

一、连接查询定义:

  • 把多张表通过连接条件临时组成1张新表,在临时的新表里有连接表的所有表头和数据。
  • 连接查询分类:内连接外连接全连接

二、连接语法结构:

内连接-语法格式:

  1. SELECT 表头名列表 FROM 表1 INNER JOIN 表2;
  2. SELECT 表头名列表 FROM 表1 INNER JOIN 表2 ON 连接条件;
  3. SELECT 表头名列表 FROM 表1 INNER JOIN 表2 ON 连接条件
    WHERE 筛选条件|GROUP BY 分组|HAVING 分组后筛选|ORDER BY 排序列表

外连接-语法格式:

左外连接:

SELECT 表头名列表 FROM 表1 LEFT JOIN 表2 ON 连接条件
WHERE 筛选条件|GROUP BY 分组|HAVING 分组后筛选|ORDER BY 排序列表

右外连接:

SELECT 表头名列表 FROM 表1 RIGHT JOIN 表2 ON 连接条件
WHERE 筛选条件|GROUP BY 分组|HAVING 分组后筛选|ORDER BY 排序列表

全连接-语法格式:

  1. (SELECT语句 )UNION(SELECT语句);
  2. (SELECT语句 )UNION ALL(SELECT语句);

三、内连接:

  • 等值连接:使用相等判断做连接条件
  • 非等值连接:连接条件不是相等判断
  • 自连接: 自己连接自己,把1张表当做2张表(需要给表定义别名)

案例:

  • 等值连接案例:
# 查询每个员工姓名、部门编号、部门名称
mysql> select name,e.dept_id,dept_name from employees as e
        -> inner join departments as d on e.dept_id=d.dept_id;
+-----------+---------+-----------+
| name      | dept_id | dept_name |
+-----------+---------+-----------+
| 梁伟      |       1 | 人事部    |
| 郭岩      |       1 | 人事部    |
...
| 杨金凤    |       8 | 法务部    |
+-----------+---------+-----------+
133 rows in set (0.00 sec)
  • 非等值连接: 使用非相等做判断做连接条件
# 查询2018年12月员工基本工资级别,员工需要显示姓名
mysql> select name as 姓名, date as 发工资日期, basic as 基本工资, grade as 工资等级   
    ->  from employees as e  inner join salary as  s  on e.employee_id=s.employee_id   
    ->  inner join wage_grade as g  on s.basic between g.low and g.high    
    ->  where year(date)=2018 and month(date)=12;
+-----------+-----------------+--------------+--------------+
| 姓名      | 发工资日期      | 基本工资     | 工资等级     |
+-----------+-----------------+--------------+--------------+
| 梁伟      | 2018-12-10      |        17016 | D            |
| 郭岩      | 2018-12-10      |        20662 | E            |
| 李玉英    | 2018-12-10      |         9724 | B            |
...
| 杨金凤    | 2018-12-10      |         6076 | A            |
+-----------+-----------------+--------------+--------------+
120 rows in set (0.00 sec)
  • 自连接案例:
# 自己连接自己 把1张当2张表使用
# 就是查询表的时候给表定义别名来实现。
mysql> select e.name, e.hire_date, em.birth_date 
    -> from employees as e  inner join employees as em
    -> on month(e.hire_date)=month(em.birth_date) and  e.employee_id=em.employee_id;
+-----------+------------+------------+
| name      | hire_date  | birth_date |
+-----------+------------+------------+
| 李玉英    | 2012-01-19 | 1974-01-25 |
| 郑静      | 2018-02-03 | 1997-02-14 |
...
| 王荣      | 2019-11-14 | 1999-11-22 |
+-----------+------------+------------+
7 rows in set (0.01 sec)

四、外连接:

  • 左外连接:左边表的记录全都显示出来 右边的表只显示与条件匹配记录,右边表比左边表少的记录使用NULL匹配
  • 右外连接:右边表的记录全都显示出来 左边的表只显示与条件匹配记录,左表比右边表少的记录使用NULL 匹配
  • 外连接的应用场景: 比较2个表里记录的不同

案例:

  • 左连接查询:
# 输出没有员工的部门名
mysql> select d.dept_name,e.name from departments as d  
        -> left  join employees as e on d.dept_id=e.dept_id
        -> where e.name is null;
+-----------+-----------+
| dept_name | name      |
+-----------+-----------+
| 小卖部    | NULL      |
| 行政部    | NULL      |
| 公关部    | NULL      |
+-----------+-----------+
3 rows in set (0.00 sec)
  • 右连接查询:
# 显示没有部门的员工名
mysql> select e.name ,d.dept_name from departments as d  
        -> right  join employees as e on d.dept_id=e.dept_id 
        -> where d.dept_name is null;
+------+-----------+
| name | dept_name |
+------+-----------+
| bob  | NULL      |
| tom  | NULL      |
| lily | NULL      |
+------+-----------+
3 rows in set (0.00 sec)

五、全连接:

  • 全连接也称联合查询,用来一起输出多个select查询结果
  • 要求查询时,多个select语句查看的表头个数必须一致
  • UNION:默认去重,相当于python中的集合
  • UNION ALL:包含重复项

案例:

  • UNION
mysql> (select  "xyz") union (select "xyz");
+-----+
| xyz |
+-----+
| xyz |
+-----+
1 row in set (0.00 sec)
  • UNION ALL
mysql> (select  "xyz") union all (select "xyz");
+-----+
| xyz |
+-----+
| xyz |
| xyz |
+-----+
2 rows in set (0.00 sec)
  • 输出2018年、2019年、2020年, 01月10 号 总工资最高的员工编号和总工资
mysql> (select employee_id ,date,basic,bonus, basic+bonus as total from tarena.salary where date=20180110 order by total desc limit 1) 
union 
(select employee_id ,date, basic,bonus,basic+bonus as total from tarena.salary where date=20190110 order by total desc limit 1) 
union 
(select employee_id ,date,basic,bonus, basic+bonus as total from tarena.salary where date=20200110 order by total desc limit 1);
+-------------+------------+-------+-------+-------+
| employee_id | date       | basic | bonus | total |
+-------------+------------+-------+-------+-------+
|          37 | 2018-01-10 | 23152 | 11000 | 34152 |
|          37 | 2019-01-10 | 24309 | 11000 | 35309 |
|          53 | 2020-01-10 | 26800 | 11000 | 37800 |
+-------------+------------+-------+-------+-------+
3 rows in set (0.01 sec)           
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,350评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,578评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,489评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,640评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,477评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,361评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,781评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,422评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,726评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,774评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,548评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,388评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,799评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,033评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,316评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,750评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,951评论 2 336

推荐阅读更多精彩内容