sql92标准仅支持内连接
sql99标准支持内连接+外连接(左外、右外)+交叉连接
按功能分类:内连接:inner等值连接非等值连接自连接外连接:左外连接 left outer右外连接 right outer全连接   full outer交叉连接        cross outerselect 查询的表from 表1 as 别名join 表2 as 别名on 连接条件[where][group][having][order by]


一:等值连接
案例一:查询女生对应的男朋友

mysql> select name,boyname from boys,beauty-> where beauty.boyfriend_id=boys.id;
+------------+-----------+
| name       | boyname   |
+------------+-----------+
| Angelababy | 黄晓明    |
| 热巴       | 鹿晗      |
| 周芷若     | 张无忌    |
| 小昭       | 张无忌    |
| 王语嫣     | 段誉      |
| 赵敏       | 张无忌    |
+------------+-----------+
6 rows in set (0.00 sec)

案例二
查询有奖金的员工名、部门名

mysql> select last_name,department_name,commission_pct-> from employees e,departments d-> where e.department_id=d.department_id and commission_pct is not null;
+------------+-----------------+----------------+
| last_name  | department_name | commission_pct |
+------------+-----------------+----------------+
| Russell    | Sal             |           0.40 |
| Partners   | Sal             |           0.30 |

案例三
查询城市名第二个字符为o最后一个字符为n的部门名和城市名

mysql> select department_name,city-> from departments d,locations l-> where d.location_id=l.location_id and city like '_o%n';
+-----------------+--------+
| department_name | city   |
+-----------------+--------+
| Hum             | London |
+-----------------+--------+
1 row in set (0.00 sec)

二:非等值连接
将等值连接的=号换为其它运算符
三:自连接

mysql> select e.employee_id,e.last_name,m.employee_id,m.last_name-> from employees e,employees m-> where e.manager_id=m.employee_id;
+-------------+-------------+-------------+-----------+
| employee_id | last_name   | employee_id | last_name |
+-------------+-------------+-------------+-----------+
|         101 | Kochhar     |         100 | K_ing     |
|         102 | De Haan     |         100 | K_ing     |
|         103 | Hunold      |         102 | De Haan   |

内连接
select ~
from ~ as ~
inner join ~ as ~
on ~;

#等值连接
mysql> select last_name,department_name-> from employees e-> inner join departments d-> on e.department_id=d.department_id;
+-------------+-----------------+
| last_name   | department_name |
+-------------+-----------------+
| Whalen      | Adm             |
| Hartstein   | Mar             |
| Fay         | Mar             |mysql> SELECT city,COUNT(*)-> FROM locations l-> INNER JOIN departments d-> ON l.location_id=d.location_id-> GROUP BY city-> HAVING COUNT(*)>3;
+---------+----------+
| city    | COUNT(*) |
+---------+----------+
| Seattle |       21 |
+---------+----------+
1 row in set (0.00 sec)mysql> SELECT COUNT(*),department_name-> FROM departments d-> INNER JOIN employees e-> ON d.`department_id`=e.department_id-> GROUP BY department_name-> HAVING COUNT(*)>3-> ORDER BY COUNT(*) DESC;
+----------+-----------------+
| COUNT(*) | department_name |
+----------+-----------------+
|       45 | Shi             |
|       34 | Sal             |
|        6 | Fin             |
|        6 | Pur             |
|        5 | IT              |
+----------+-----------------+
5 rows in set (0.00 sec)
#非等值连接
mysql> SELECT COUNT(*),grade_level-> FROM employees AS e-> INNER JOIN job_grades AS j-> ON e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`-> GROUP BY grade_level-> HAVING COUNT(*)>2-> ORDER BY COUNT(*) DESC;
+----------+-------------+
| COUNT(*) | grade_level |
+----------+-------------+
|       38 | C           |
|       26 | B           |
|       24 | A           |
|       16 | D           |
|        3 | E           |
+----------+-------------+
5 rows in set (0.00 sec)
#自连接
mysql> select a.last_name,b.last_name-> from employees a-> inner join employees b on a.manager_id=b.employee_id;
+-------------+-----------+
| last_name   | last_name |
+-------------+-----------+
| Kochhar     | K_ing     |
| De Haan     | K_ing     |
| Hunold      | De Haan   |
| Ernst       | Hunold    |
| Austin      | Hunold    |

外连接
特点:
外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
左外连接:left join左边的是主表
右外连接:right join右边的是主表
全外连接:full join,显示内容为两表交叉部分以及两表交叉部分以外的部分,为空用null表示

mysql> select b.name,bo.*-> from beauty b-> left outer join boys bo-> on b.boyfriend_id=bo.id;
+------------+------+-----------+--------+
| name       | id   | boyName   | userCP |
+------------+------+-----------+--------+
| 周芷若     |    1 | 张无忌    |    100 |
| 小昭       |    1 | 张无忌    |    100 |
| 赵敏       |    1 | 张无忌    |    100 |
| 热巴       |    2 | 鹿晗      |    800 |
| Angelababy |    3 | 黄晓明    |     50 |
| 王语嫣     |    4 | 段誉      |    300 |
| 柳岩       | NULL | NULL      |   NULL |
| 苍老师     | NULL | NULL      |   NULL |
| 周冬雨     | NULL | NULL      |   NULL |mysql> select b.name-> from beauty b-> left outer join boys bo-> on b.boyfriend_id=bo.id-> where bo.id is null;
+-----------+
| name      |
+-----------+
| 柳岩      |
| 苍老师    |
| 周冬雨    |
| 岳灵珊    |
| 双儿      |
| 夏雪      |
+-----------+mysql> select b.name,bo.*-> from boys bo-> right outer join beauty b-> on b.boyfriend_id=bo.id;
+------------+------+-----------+--------+
| name       | id   | boyName   | userCP |
+------------+------+-----------+--------+
| 周芷若     |    1 | 张无忌    |    100 |
| 小昭       |    1 | 张无忌    |    100 |
| 赵敏       |    1 | 张无忌    |    100 |
| 热巴       |    2 | 鹿晗      |    800 |
| Angelababy |    3 | 黄晓明    |     50 |
| 王语嫣     |    4 | 段誉      |    300 |
| 柳岩       | NULL | NULL      |   NULL |
| 苍老师     | NULL | NULL      |   NULL |
| 周冬雨     | NULL | NULL      |   NULL |
| 岳灵珊     | NULL | NULL      |   NULL |
查询没有员工的部门
mysql> select d.*,e.employee_id-> from employees e-> right outer join departments d-> on d.department_id=e.department_id-> where e.employee_id is null;
+---------------+-----------------+------------+-------------+-------------+
| department_id | department_name | manager_id | location_id | employee_id |
+---------------+-----------------+------------+-------------+-------------+
|           120 | Tre             |       NULL |        1700 |        NULL |
|           130 | Cor             |       NULL |        1700 |        NULL |
|           140 | Con             |       NULL |        1700 |        NULL |
|           150 | Sha             |       NULL |        1700 |        NULL |
|           160 | Ben             |       NULL |        1700 |        NULL |
|           170 | Man             |       NULL |        1700 |        NULL |
mysql> select d.*,e.employee_id-> from departments d-> left outer join employees e-> on e.department_id=d.department_id-> where d.manager_id is null;
+---------------+-----------------+------------+-------------+-------------+
| department_id | department_name | manager_id | location_id | employee_id |
+---------------+-----------------+------------+-------------+-------------+
|           120 | Tre             |       NULL |        1700 |        NULL |
|           130 | Cor             |       NULL |        1700 |        NULL |
|           140 | Con             |       NULL |        1700 |        NULL |
|           150 | Sha             |       NULL |        1700 |        NULL |
|           160 | Ben             |       NULL |        1700 |        NULL |
|           170 | Man             |       NULL |        1700 |        NULL |

自然连接
将两表具有相同属性值的元组相连接

SELECT course.*,instructor.*
FROM course NATURAL JOIN instructor;
和
SELECT course.*,instructor.*
FROM course,instructor
WHERE course.`dept_name`=instructor.`dept_name`;
具有相同的查询结果


交叉连接 cross join
类似两表做笛卡尔积

mysql> select b.*,bo.*-> from beauty b cross join boys bo;
48 rows in set (0.00 sec)
mysql> select count(*) from beauty;
+----------+
| count(*) |
+----------+
|       12 |
+----------+
1 row in set (0.00 sec)mysql> select count(*) from boys;
+----------+
| count(*) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)

更多MySQL命令

MySQL入门命令之连接查询相关推荐

  1. MySQL入门 (二) : SELECT 基础查询

    1 查询资料前的基本概念 1.1 表格.纪录与栏位 表格是资料库储存资料的基本元件,它是由一些栏位组合而成的,储存在表格中的每一笔纪录就拥有这些栏位的资料. 以储存城市资料的表格「city」来说,设计 ...

  2. linux中mysql客户端命令行连接不了 docker 创建的mysql

    linux中mysql客户端命令行连接不了 docker 创建的mysql 问题 :如题 a@z:~$ mysql -h localhost -p ERROR 2002 (HY000): Can't ...

  3. MySQL简单命令和SELECT查询,给字段起别名【MySQL数据库】

    Java养成计划----学习打卡第六十四天 内容导航 数据库的相关操作 数据库的导入 查看导入数据库中的表 查看表中的数据 查看表的基本结构[简化] 查看表的结构[详细] 查看mysql数据库的版本号 ...

  4. 【mysql】左外连接查询中 on 和 where 的区别

    论点 在使用 mysql 的左外连接(left join)查询时,驱动表(left join 左边的表),亦即数据需要全部被查出表的查询条件建议用 where 设定,被驱动表(left join 右边 ...

  5. mysql学习笔记之连接查询与子查询

    mysql连接查询与子查询 1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t ...

  6. MySQL中多表连接查询总结与实践

    关联博文: MySQL中Union联合查询使用实践总结 连接查询:将多张表(>=2)进行 记录的连接(按照某个指定的条件进行数据拼接). 连接查询的意义:在用户查看数据的时候,数据往往来源于多张 ...

  7. MySql(九)连接查询

    文章目录 连接查询的分类 1. 按照年代进行分类 2. 按照功能进行分类 注:在连接查询中有可能会出现笛卡尔乘积现象 笛卡尔乘积现象:表1有m行:表2有n行:结果=m*n行 发生:在多表查询时没有添加 ...

  8. mysql创表的工种_[MySQL基础]七、连接查询

    含义:又称为多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象 表1 有m行,表2有n行,结果为m*n行 发生原因:没有有效的连接条件. 如何避免:添加有效的连接条件. 案例:在bo ...

  9. mysql|多表连接查询

    use test; select * from students; select * from courses; select * from sc; # 多表连接查询-- 查询选修了[数据库原理]的计 ...

最新文章

  1. linux shell 脚本 查找文件,Linux Shell在目录下使用for循环结合if查找文件的巧用
  2. 中如何直接使用方法返回的值_java基础-2-方法、面向对象
  3. Codeforces Round #643 (Div. 2)(A, B, C, D, E)
  4. 使用Ajax的Spring MVC REST调用
  5. IMG图片和文字同一行显示,图片和文字居中显示
  6. svg mysql_SVG 实例
  7. 行业看点 | 量子计算时代即将到来?华人科学家揭秘“天使粒子”背后故事……...
  8. 虚拟主机网站搬到服务器上,如何把网页文件放到云虚拟主机
  9. java加密算法之DES篇
  10. 冰点还原精灵和惠普增霸卡安装软件的方法
  11. Java网络编程第一章
  12. Linux源码阅读(Web在线阅读)
  13. G002-186-17
  14. 免费会员管理系统实现门店微信会员营销
  15. train,dev,test数据集划分
  16. vue运行(Emitted value instead of an instance of Error)
  17. 计算机主机配件及图解,电脑主机有哪些配件组成
  18. grep搜索特定文件
  19. PAT甲级题解 1030
  20. 美国旅游带孩子怎么申请签证?

热门文章

  1. Elsevier的Knowledge-Based Systems期刊投latex原稿过程(投稿)
  2. Solomon Hykes离开Docker公司,自此仗剑走天涯
  3. 通过交叉验证寻找K近邻算法的最优K值
  4. (转)jenkins构建触发器定时任务Build periodically和Poll SCM
  5. 梦想是一个天真的词,实现梦想是一个残酷的词。
  6. javaweb(实用)-IDEA下resources目录下txt文件读取写入引发的项目后台路径问题总结
  7. 现在考思科认证CCIE有用吗?
  8. 中企动力亮相2017年中国国际电子商务博览会
  9. 有限空间作业如何预防窒息和中毒
  10. 180°舵机如何控制?