SQL SELF JOIN:自连接
自连接通常用于将表的某个字段与该表的同一字段的其它值进行比较。
语法
SELF JOIN 的基本语法如下:
SELECT a.column1, b.column1...
FROM table1 AS a, table1 AS b
WHERE a.common_column < 网站站点" rel="nofollow" />
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
现在,让我们使用 SELF JOIN 来比较 SALARY 字段,找到比某个客户工资低的其它所有客户,如下所示:
SQL> SELECT a.ID, a.NAME, a.SALARY, b.NAME AS THIS_NAME, b.SALARY AS THIS_SALARY
FROM CUSTOMER AS a, CUSTOMER AS b
WHERE a.SALARY < b.SALARY;
执行结果如下:
+----+----------+--------+-----------+-------------+
| ID | NAME | SALARY | THIS_NAME | THIS_SALARY |
+----+----------+--------+-----------+-------------+
| 2 | Khilan | 1500 | Ramesh | 2000 |
| 2 | Khilan | 1500 | Kaushik | 2000 |
| 1 | Ramesh | 2000 | Chaitali | 6500 |
| 2 | Khilan | 1500 | Chaitali | 6500 |
| 3 | Kaushik | 2000 | Chaitali | 6500 |
| 6 | Komal | 4500 | Chaitali | 6500 |
| 1 | Ramesh | 2000 | Hardik | 8500 |
| 2 | Khilan | 1500 | Hardik | 8500 |
| 3 | Kaushik | 2000 | Hardik | 8500 |
| 4 | Chaitali | 6500 | Hardik | 8500 |
| 6 | Komal | 4500 | Hardik | 8500 |
| 1 | Ramesh | 2000 | Komal | 4500 |
| 2 | Khilan | 1500 | Komal | 4500 |
| 3 | Kaushik | 2000 | Komal | 4500 |
| 1 | Ramesh | 2000 | Muffy | 10000 |
| 2 | Khilan | 1500 | Muffy | 10000 |
| 3 | Kaushik | 2000 | Muffy | 10000 |
| 4 | Chaitali | 6500 | Muffy | 10000 |
| 5 | Hardik | 8500 | Muffy | 10000 |
| 6 | Komal | 4500 | Muffy | 10000 |
+----+----------+--------+-----------+-------------+
从执行结果可以发现,SELF JOIN 以右表为主,它先将左表中的每一行与右表中的行进行比较,然后再将左表中的行与右表中的第二行进行比较,以此类推,直到右表的一行。
示例2
现在有如下所示的员工表,名字为 employee:
+----+----------+-----+--------+------------+
| id | name | sex | salary | manager_id |
+----+----------+-----+--------+------------+
| 1 | joe | m | 7000 | 3 |
| 2 | henry | m | 8000 | 4 |
| 3 | sam | f | 6000 | NULL |
| 4 | max | m | 9000 | NULL |
| 5 | ramesh | m | 7500 | 3 |
| 6 | khilan | f | 11500 | 4 |
| 7 | Chaitali | m | 8600 | 4 |
| 8 | Komal | f | 7800 | 4 |
+----+----------+-----+--------+------------+
现在,让我们使用 SELF JOIN 找出工资超过各自经理的员工姓名:
SELECT e1.name AS employee_name, e1.salary, e2.name AS manager_name, e2.salary
FROM employee AS e1, employee AS e2
WHERE e1.manager_id = e2.id
AND e1.salary > e2.salary;
运行结果:
+---------------+--------+--------------+--------+
| employee_name | salary | manager_name | salary |
+---------------+--------+--------------+--------+
| joe | 7000 | sam | 6000 |
| ramesh | 7500 | sam | 6000 |
| khilan | 11500 | max | 9000 |
+---------------+--------+--------------+--------+
示例3
现在有如下所示的用户表,名字为 user:
+----+------------+-----------------+--------------------------+-------------+-----------------+
| id | username | password | email | cellphone | ip |
+----+------------+-----------------+--------------------------+-------------+-----------------+
| 1 | mozhiyan | 123456 | java@biancheng网站站点" rel="nofollow" />
DELETE u1 FROM user AS u1, user AS u2 WHERE u1.email = u2.email AND u1.id > u2.id;
执行完该语句,user 表的数据如下:
+----+------------+-----------+--------------------------+-------------+-----------------+
| id | username | password | email | cellphone | ip |
+----+------------+-----------+--------------------------+-------------+-----------------+
| 1 | mozhiyan | 123456 | java@biancheng网站站点" rel="nofollow" />
- 随机文章
- 晋宁 湿地 马尔代夫(晋宁打造湿地公园 犹如身处马尔代夫)
- 怀孕了 马尔代夫(喜讯:在马尔代夫怀孕!)
- 巴黎马尔代夫视频(巴黎和马尔代夫合作制作旅游宣传视频)
- 桐庐 马尔代夫 在哪里(马尔代夫位于中国浙江省桐庐县?)
- 李玟 马尔代夫(李玟甜蜜马尔代夫度假)
- 梦见马尔代夫被淹(梦中马尔代夫消失无踪:淹没在海水中)
- 泰国媲美马尔代夫(泰国:与马尔代夫一样美丽的度假胜地)
- 李溪马尔代夫在哪(李溪游马尔代夫,美轮美奂的海岛仙境)
- 男足马尔代夫加油(中国男足在马尔代夫备战:向胜利进发)
- 国足 马尔代夫 2001(国足绝杀马尔代夫,2001年热血重现)
- 色彩颜料马尔代夫(探索马尔代夫:颜色与文化的奇妙交织)
- 大连 马尔代夫(大连游客可直飞马尔代夫,度假轻松了!)
- 马尔代夫上空视频(空中拍摄的马尔代夫海水世界惊艳亮相)
- 湛江 马尔代夫(湛江市民可直飞马尔代夫,通航航班正式成立)
- 郑和路过马尔代夫(郑和驶向西方,穿越印度洋的珍珠之岛)
- 长岭 马尔代夫(长岭岛:闪耀马尔代夫蓝,探索珊瑚海底世界)
- 重庆马尔代夫烤肉(重庆市民在“马尔代夫”尝鲜烤肉体验)
- 香港足球马尔代夫(香港足球球队将前往马尔代夫参加比赛)
- 马尔代夫丛林大海(探索马尔代夫的自然奇观:丛林和大海)
- 张瀚 马尔代夫(张瀚加入马尔代夫旅游局,将担任中国区首席代表)
- 马尔代夫光脚走路(马尔代夫岛民光脚走路,你是否试过?)
- 东莞 马尔代夫(东莞将打造类似马尔代夫的海岛旅游胜地)
- 马尔代夫厦门出发(厦门直飞马尔代夫,开启梦幻海岛之旅)
- 总督 马尔代夫(马尔代夫新总督就职,将推动经济发展和民主改革)
- 道具 马尔代夫(探秘马尔代夫隐藏版,揭秘未被游客发掘的神秘景点!)
- 马尔代夫原始岛屿(探索马尔代夫原生态——原始岛屿攻略)
- 马尔代夫品牌定位(玩转海洋世界,奢享马尔代夫岛屿体验)
- 珍珠 马尔代夫(重返海岛世界,尽享珍珠般的马尔代夫之旅)
- 苏丹 马尔代夫(苏丹和马尔代夫,两国水资源短缺引发关切)
- 马尔代夫凤凰水城(马尔代夫凤凰水城:一场奢华海底之旅)
