赞
踩
定义:将多张表中的内容拼接到一起,拼接到一起成为了一张临时的数据源。
背景:当数据源不止一个的时候(多张表)
了解一下
是指将两张表的数据相乘,可以将两张表连接。
SELECT * FROM emp; -21条数据
SELECT * FROM dept; -4条数据
笛卡尔集:
SELECT * FROM emp,dept;
56条数据,14*4
笛卡尔集是很危险的,不仅是因为里面有错误的数据,当他数据量过大时,可能会导致程序崩溃。所以工作中尽量避免。
我们可以用以下几种方式连接表
内连接 | INNER JOIN
语法:
SELECT * | 列名 | 常量|计算 | 函数 | 子查询 FROM 表 | 子查询 WHERE 分组前的过滤条件(不能使用带有聚合函数的条件) GROUP BY 分组内容 HAVING --分组后的过滤条件(能使用聚合函数的条件) ORDER BY 排序内容 ASC | DESC 内连接 SELECT * | 列名 | 常量|计算 | 函数 | 子查询 FROM 表 1 INNER JOIN 表2 ON 关联条件 INNER JOIN 表3 ON 关联条件 ...... WHERE 分组前的过滤条件(不能使用带有聚合函数的条件) GROUP BY 分组内容 HAVING --分组后的过滤条件(能使用聚合函数的条件) ORDER BY 排序内容 ASC | DESC
将from后面的看成一张临时表使用。
内连接:按照条件将两张表连接在一起,只会显示匹配成功的数据,匹配不成功的数据会忽略不显示
当两张表都有的字段需要加表名归属
练习
查询部门地址时纽约的员工信息
SELECT * FROM emp INNER JOIN dept ON emp.deptno=dept.deptno WHERE loc = 'NEW YORK' ;
LEFT [OUTER] JOIN
语法:
SELECT * FROM 表1 LEFT [OUTER] JOIN 表2 ON 关联条件.....
例题,用左连接将emp和dept进行连接
SELECT * FROM emp LEFT JOIN dept ON emp.deptno = dept.deptno;
左连接的特点:左表为主,左表数据全部都会显示,没有匹配成功的数据,右表以空值填充,右表没有匹配成功的数据则不显示。
练习:
查询员工姓名岗位编号薪资部门编号部门名称,用 左连接。
SELECT ename,job,sal,emp.deptno,dname FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno;
查询员工姓名岗位编号薪资部门编号部门名称,用 左连接。要求只展示没有匹配成功的人。
SELECT ENAME, JOB, SAL, EMP.DEPTNO, DNAME
FROM EMP
LEFT JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO
WHERE emp.deptno NOT IN (dept.deptno);
RIGHT [OUTER] JOIN
与左连接相反,以右表为主。用的少
SELECT * FROM 表1 RIGHT 表2 ON 关联条件
右连接:右表为主,右表全部会显示,匹配不成功的左表以空值填充。
FULL [OUTER] JOIN
语法:
SELECT * FROM 表1 FULL 表2 ON 关联条件
SELECT * FROM emp FULL JOIN dept ON emp.deptno = dept.deptno;
全连接特点:
显示全部数据,不管匹配成功不成功,当匹配不成功的时候对应的表以空值填充。
–相当于笛卡尔集
CROSS JOIN
语法:
SELECT * FROM 表1 CROSS JOIN 表2 ---没有关联条件,结果与笛卡尔集相同
自然连接
NATURAL JOIN
语法
SELECT * FROM 表1 NATURAL JOIN 表2 ---没有关联条件
会将两张表自动的寻找相同列进行关联,只显示匹配成功的数据,会去除重复字段
如果字段名不相同则无法使用自然连接
没有关键词,只是表连接的一种特殊形式,自己表和自己表相连,需要自己去找关联条件。
例题:
查询员工信息以及对应的领导信息。
SELECT *
FROM emp a ---员工信息
LEFT JOIN emp b ---领导信息
ON a.MGR = b.empno;
练习:
查询员工工资比该员工领导工资高的员工信息以及领导信息以及该员工对应的部门地址
SELECT a.*,b.*,c.loc
FROM EMP A
LEFT JOIN EMP B
ON A.MGR = B.EMPNO
LEFT JOIN DEPT C
ON A.DEPTNO = C.DEPTNO
WHERE A.SAL > B.SAL;
没有关键词,只是表连接的一种特殊形式。关联条件不是等号
例题:
查询员工信息以及该员工对应的工资等级
scott自带的表:salgrade 工资等级表
SELECT * FROM emp LEFT JOIN salgrade ON sal BETWEEN losal AND hisal;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。