-
内连接查询
-
隐式内连接查询
-
1、在where子句中写入连接条件
2、当多个表中有重名列时,必须在列的名字前加上表名作为前缀或者起别名
SELECT [DISTINCT] * | 字段 [别名] [, 字段 [别名], …]
FROM 表名称 [别名], [表名称 [别名], …]
[WHERE 条件(S)/消除笛卡尔积连接]
[ORDER BY 排序字段 [ASC|DESC] [, 排序字段 [ASC|DESC], …]];
-
-
显示内连接查询
-
显式内连接查询结果和隐式内连接查询结果一模一样,区别在于:
1、显式内连接可以看到[INNER] JOIN
2、消除笛卡尔积条件使用写在ON子句
SELECT table1.column, table2.column
FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column2
WHERE 条件
-
外连接查询
-
左外连接查询
-
左外连接 LEFT JOIN :查询出 JOIN 左边表(table1)的全部数据查询出来,JOIN 右边的表(table2)不匹配的数据使用 NULL 来填充数据。
SELECT table1.column, table2.column
FROM table1 LEFT [OUTER] JOIN table2 ON table1.column1 = table2.column2
WHERE 条件
-
-
右外连接查询
-
右外连接RIGHT JOIN:查询出 JOIN 右边表(table2)的全部数据查询出来,JOIN 左边的表(table1)不匹配的数据使用 NULL 来填充数据。
SELECT table1.column, table2.column
FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column1 = table2.column2
WHERE 条件
例:建立一个员工表和一个部门表
员工表
部门表
查询出员工的编号,名字,薪水和所在部门的名称(使用内连接查询),SQL 如下:
一、显示内连接JOIN ON:
SELECT emp.EMPNO, emp.ENAME, emp.SAL, dept.DNAME FROM emp JOIN dept ON emp.DEPTNO = dept.DEPTNO
如图所示,显式内连接查询执行完会发现,没有部门的员工则查询不出来
二、左外连接LEFT JOIN ON
SELECT emp.EMPNO, emp.ENAME, emp.SAL, dept.DNAME
FROM emp LEFT JOIN dept ON emp.DEPTNO = dept.DEPTNO
如图所示,采用左外连接的方式我们将会把左边的数据全部查询出来,即使没有部门,连接右表也会使用null填充。
三、右外连接RIGHT JOIN ON
SELECT emp.EMPNO, emp.ENAME, emp.SAL, dept.DNAME
FROM dept RIGHT JOIN emp ON emp.DEPTNO = dept.DEPTNO
如图所示,采用右外连接的方式我们将会把右边的数据全部查询出来,左边表不匹配的数据用null填充
总的来说:
left join (左连接,左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接,右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。