MySQL讲义第27讲——select 查询之自连接查询
MySQL讲义第27讲——select 查询之自连接查询
文章目录
- MySQL讲义第27讲——select 查询之自连接查询
- 一、数据准备
- 二、对自连接的理解
- 三、把以上的查询用自连接表示
顾名思义,自连接查询就是一张表和自己进行连接。就是把一张表看成两张表,使用别名进行区分。
一、数据准备
创建一张员工(emp)表,每个员工都有一个部门领导(leader),数据如下:
mysql> select * from emp;
+------+-----------+--------+---------+--------+
| e_id | e_name | gender | salary | leader |
+------+-----------+--------+---------+--------+
| 1101 | 张美华 | 女 | 5000.00 | 1104 |
| 1102 | 王涛 | 男 | 5200.00 | 1104 |
| 1103 | 张学有 | 男 | 4700.00 | 1104 |
| 1104 | 刘得华 | 男 | 5200.00 | 1104 |
| 1105 | 董雯花 | 女 | 5900.00 | 1104 |
| 1106 | 宋族营 | 男 | 6500.00 | 1104 |
| 2201 | 李霜江 | 男 | 7200.00 | 2202 |
| 2202 | 梁美丽 | 女 | 6400.00 | 2202 |
| 2203 | 王大强 | 男 | 6100.00 | 2202 |
| 3301 | 张美华 | 女 | 7800.00 | 1104 |
| 3302 | 赵紫龙 | 男 | 6900.00 | 1104 |
| 3303 | 诸葛量 | 男 | 9200.00 | 1104 |
| 3304 | 曹梦德 | 男 | 8400.00 | 1104 |
+------+-----------+--------+---------+--------+
13 rows in set (0.00 sec)
二、对自连接的理解
为了更好地理解自连接,根据 emp 表创建一个和 emp 中的数据完全相同的视图,视图名称为 leader。
mysql> CREATE VIEW leader-> AS-> SELECT-> *-> FROM -> emp;
Query OK, 0 rows affected (0.04 sec)mysql> select * from leader;
+------+-----------+--------+---------+--------+
| e_id | e_name | gender | salary | leader |
+------+-----------+--------+---------+--------+
| 1101 | 张美华 | 女 | 5000.00 | 1104 |
| 1102 | 王涛 | 男 | 5200.00 | 1104 |
| 1103 | 张学有 | 男 | 4700.00 | 1104 |
| 1104 | 刘得华 | 男 | 5200.00 | 1104 |
| 1105 | 董雯花 | 女 | 5900.00 | 1104 |
| 1106 | 宋族营 | 男 | 6500.00 | 1104 |
| 2201 | 李霜江 | 男 | 7200.00 | 2202 |
| 2202 | 梁美丽 | 女 | 6400.00 | 2202 |
| 2203 | 王大强 | 男 | 6100.00 | 2202 |
| 3301 | 张美华 | 女 | 7800.00 | 1104 |
| 3302 | 赵紫龙 | 男 | 6900.00 | 1104 |
| 3303 | 诸葛量 | 男 | 9200.00 | 1104 |
| 3304 | 曹梦德 | 男 | 8400.00 | 1104 |
+------+-----------+--------+---------+--------+
13 rows in set (0.00 sec)
然后根据 emp 表和视图 leader 创建连接,查询结果如下:
mysql> SELECT -> e.e_id,-> e.e_name emp_name,-> e.gender,-> e.salary,-> l.leader leader_id,-> l.e_name leader_name-> FROM-> emp e JOIN leader l ON e.leader = l.e_id;
+------+-----------+--------+---------+-----------+-------------+
| e_id | emp_name | gender | salary | leader_id | leader_name |
+------+-----------+--------+---------+-----------+-------------+
| 1101 | 张美华 | 女 | 5000.00 | 1104 | 刘得华 |
| 1102 | 王涛 | 男 | 5200.00 | 1104 | 刘得华 |
| 1103 | 张学有 | 男 | 4700.00 | 1104 | 刘得华 |
| 1104 | 刘得华 | 男 | 5200.00 | 1104 | 刘得华 |
| 1105 | 董雯花 | 女 | 5900.00 | 1104 | 刘得华 |
| 1106 | 宋族营 | 男 | 6500.00 | 1104 | 刘得华 |
| 2201 | 李霜江 | 男 | 7200.00 | 2202 | 梁美丽 |
| 2202 | 梁美丽 | 女 | 6400.00 | 2202 | 梁美丽 |
| 2203 | 王大强 | 男 | 6100.00 | 2202 | 梁美丽 |
| 3301 | 张美华 | 女 | 7800.00 | 1104 | 刘得华 |
| 3302 | 赵紫龙 | 男 | 6900.00 | 1104 | 刘得华 |
| 3303 | 诸葛量 | 男 | 9200.00 | 1104 | 刘得华 |
| 3304 | 曹梦德 | 男 | 8400.00 | 1104 | 刘得华 |
+------+-----------+--------+---------+-----------+-------------+
13 rows in set (0.00 sec)
三、把以上的查询用自连接表示
以上基于 emp 表和 leader 视图的连接要转换为自连接,只需要把视图换成 emp 表,并指定一个别名即可,代码如下:
mysql> SELECT-> e.e_id,-> e.e_name emp_name,-> e.gender,-> e.salary,-> l.leader leader_id,-> l.e_name leader_name-> FROM-> emp e JOIN emp l ON e.leader = l.e_id;
+------+-----------+--------+---------+-----------+-------------+
| e_id | emp_name | gender | salary | leader_id | leader_name |
+------+-----------+--------+---------+-----------+-------------+
| 1101 | 张美华 | 女 | 5000.00 | 1104 | 刘得华 |
| 1102 | 王涛 | 男 | 5200.00 | 1104 | 刘得华 |
| 1103 | 张学有 | 男 | 4700.00 | 1104 | 刘得华 |
| 1104 | 刘得华 | 男 | 5200.00 | 1104 | 刘得华 |
| 1105 | 董雯花 | 女 | 5900.00 | 1104 | 刘得华 |
| 1106 | 宋族营 | 男 | 6500.00 | 1104 | 刘得华 |
| 2201 | 李霜江 | 男 | 7200.00 | 2202 | 梁美丽 |
| 2202 | 梁美丽 | 女 | 6400.00 | 2202 | 梁美丽 |
| 2203 | 王大强 | 男 | 6100.00 | 2202 | 梁美丽 |
| 3301 | 张美华 | 女 | 7800.00 | 1104 | 刘得华 |
| 3302 | 赵紫龙 | 男 | 6900.00 | 1104 | 刘得华 |
| 3303 | 诸葛量 | 男 | 9200.00 | 1104 | 刘得华 |
| 3304 | 曹梦德 | 男 | 8400.00 | 1104 | 刘得华 |
+------+-----------+--------+---------+-----------+-------------+
13 rows in set (0.00 sec)
MySQL讲义第27讲——select 查询之自连接查询相关推荐
- MySQL讲义第 39 讲——select 查询之函数(2):日期时间型函数
MySQL讲义第39讲--select 查询之函数(2):日期时间型函数 文章目录 MySQL讲义第39讲--select 查询之函数(2):日期时间型函数 一.数据准备 二.MySQL 日期时间型函 ...
- MySQL讲义第 41 讲——select 查询之函数(4):流程控制函数
MySQL讲义第41讲--select 查询之函数(4):流程控制函数 文章目录 MySQL讲义第41讲--select 查询之函数(4):流程控制函数 一.数据准备 二.MySQL 流程控制函数介绍 ...
- MySQL讲义第 33 讲——select 查询之静态交叉表查询
MySQL讲义第 33 讲--select 查询之静态交叉表查询 文章目录 MySQL讲义第 33 讲--select 查询之静态交叉表查询 一.数据准备 二.交叉表的形式 三.静态交叉表的实现 1. ...
- MySQL讲义第 40 讲——select 查询之函数(3):数学函数
MySQL讲义第40讲--select 查询之函数(3):数学函数 文章目录 MySQL讲义第40讲--select 查询之函数(3):数学函数 一.数据准备 二.MySQL 数学函数介绍 1.ABS ...
- MySQL讲义第 35 讲——select 查询之正则表达式
MySQL讲义第 35 讲--select 查询之正则表达式 文章目录 MySQL讲义第 35 讲--select 查询之正则表达式 一.正则表达式匹配规则 二.数据准备 三.查询包含某些字符的字段信 ...
- MySQL讲义第 32 讲——select 查询之 select 语句的执行顺序
MySQL讲义第 32 讲--select 查询之 select 语句的执行顺序 文章目录 MySQL讲义第 32 讲--select 查询之 select 语句的执行顺序 一.SELECT 语句的语 ...
- MySQL讲义第 30 讲——select 查询之子查询
MySQL讲义第 30 讲--select 查询之子查询 文章目录 MySQL讲义第 30 讲--select 查询之子查询 一.标量子查询 1.查询高于所有员工平均工资的员工信息 2.查询工资比王涛 ...
- MySQL讲义第 36 讲——select 查询之 INTO OUTFILE参数
MySQL讲义第 36 讲--select 查询之 INTO OUTFILE参数 文章目录 MySQL讲义第 36 讲--select 查询之 INTO OUTFILE参数 一.SELECT ... ...
- MySQL讲义第 31 讲—— DML 语句与 select 查询
MySQL讲义第 31 讲-- DML 语句与 select 查询 文章目录 MySQL讲义第 31 讲-- DML 语句与 select 查询 一. INSERT ... SELECT 语句 二.D ...
最新文章
- Effective STL 为包含指针的关联容器指定比较类型
- Git fetch和git pull的区别
- 3月12日云栖精选夜读:操作阿里云Kibana
- PowerBI随笔(3)-增加自定义列
- 最近任务-2012.05.14
- dataframe 筛选_Spark.DataFrame与Spark.ML简介
- 2013江苏计算机二级vfp试题,2013年3月全国计算机二级VFP真题
- mysql 11.2.16_Navicat for MySQL 11.2
- 使用Postman访问OAuth2保护的WebAPI
- .Net读取Excel(包括Excel2007)
- apache多域名403配置
- 质性数据分析软件NVivo的许可
- 全球及中国冻干菠萝行业市场运行模式及未来发展前景分析报告2022-2028年
- WinRAR 4.01 key!注册文件 注册码
- [C#] NAudio 各种常见使用方式 播放 录制 转码 音频可视化
- GBase 8c亮相国内首款金融数据库性能测试工具开源发布会
- COLD:中文冒犯性语言检测数据集
- 【JZOJ 5776】【NOIP2008模拟】小x游世界树 (树)
- 1033 旧键盘打字 (20分)
- 到底买苹果XS还是XR_苹果xs和苹果xr内部相爱相杀:队友之间该如何选择?