内连接(等值连接),外接连(非等值连接)

SELECT * FROM scott.dept;–4
SELECT * FROM scott.emp;–14

–注意:多表连接查询一定要带关联条件,否则就会出现笛Carl积
–总计:多表连接第一步就是找关系条件
–emp.deptno = dept.deptno
–student.clazz_id = clazz.id
–多表连接的关联条件时N-1

SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno;

–标准sql语句
–左外连接
SELECT *
FROM scott.dept d LEFT OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

SELECT *
FROM scott.dept d LEFT OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

–相同的结果 from where语句
SELECT *
FROM scott.dept,scott.emp
WHERE scott.dept.deptno = scott.emp.deptno;

–全外连接
–左侧的表和左边的表数据都要全方位出示,要是没有对号入座的,则补null
SELECT *
FROM scott.dept d FULL OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

–自连接(紧要,面试日常现身)
/**
在emp中的每个员工都有和好的mgr(老板),并且每种经营自己也是商家的员工,
首席营业官本身也有友好的经营。上边大家需要将各种员工本人的名字和CEO的名字都找出来。
那儿大家该如何是好啊?
*/
SELECT * FROM scott.emp;
–empno ename mgr mgrname
–7369 SMITH 7902 FORD
–empno ename mgr mgrname
–7902 FORD 7566 JONES

–相同的结果 from where语句
SELECT *
FROM scott.dept,scott.emp
WHERE scott.dept.deptno = scott.emp.deptno;

SELECT *
FROM scott.dept d LEFT OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

–使用别名简化开发
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno
AND e.empno = ‘7369’;

–右外连接
SELECT *
FROM scott.emp e RIGHT OUTER JOIN scott.dept d
ON d.deptno = e.deptno;

–笛Carl积
–当查询数据时未尝选用连接条件,会意识到所有涉嫌数据
–4*14=56
SELECT * FROM scott.dept,scott.emp;

–全外连接
–左侧的表和右侧的表数据都要全方位来得,若是没有对应的,则补null
SELECT *
FROM scott.dept d FULL OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

–e的职工编号 e的职工姓名 e的经纪编号 t的员工姓名
SELECT e.empno,e.ename,e.mgr,t.ename
FROM scott.emp e,scott.tb_emp t
WHERE e.mgr = t.empno
AND e.empno = ‘7369’;

–使用别名简化开发
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno
AND e.empno = ‘7369’;

–因为单位40从未员工,当使用等值连接时,部门40的音讯并未出示
–左外连接:+号在右手,左边的多寡要全方位显得,借使左侧没有和左侧表数据匹配的,则补null
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno(+);

/**
笛Carl积
内接连(等值连接)
外接连(非等值连接)
自连接
*/

–右外连接:+号在左手,右侧的数量要全体突显,如果右侧没有和左边数据匹配的,则补null
SELECT *
FROM scott.dept d,scott.emp e
WHERE e.deptno(+) = d.deptno;

 

SELECT *
FROM scott.dept,scott.emp
WHERE scott.dept.deptno = scott.emp.deptno;

–查询所有机关和员工音信
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno;

–自连接
SELECT e.empno,e.ename,e.mgr,t.ename
FROM scott.emp e,scott.emp t
WHERE e.mgr = t.empno
AND e.empno = ‘7369’;

–外连接(非等值连接)
SELECT * FROM scott.dept;–4
SELECT * FROM scott.emp;–14

(scott账户)

–内连接(等值连接) 标准sql的写法
SELECT *
FROM scott.dept d INNER JOIN scott.emp e
ON d.deptno = e.deptno;

–多表连接
–最快备份一张表数据的方法,注意,该方法只是备份数据,不复制约束
CREATE TABLE tb_emp AS SELECT * FROM scott.emp;
SELECT * FROM tb_emp;
SELECT * FROM scott.emp;

SELECT * FROM scott.dept;–4
SELECT * FROM scott.emp;–14

–右外连接
SELECT *
FROM scott.emp e RIGHT OUTER JOIN scott.dept d
ON d.deptno = e.deptno;

SELECT *
FROM scott.dept d RIGHT OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

–自连接(首要,面试平时出现)
/**
在emp中的各种员工都有谈得来的mgr(老板),并且逐个经营本人也是商店的员工,
经营自身也有温馨的经纪。上面咱们需求将各种员工要好的名字和老董的名字都找出来。
此刻大家该如何是好吧?
*/
SELECT * FROM scott.emp;
–empno ename mgr mgrname
–7369 SMITH 7902 FORD
–empno ename mgr mgrname
–7902 FORD 7566 JONES

–e的员工编号 e的职工姓名 e的经营编号 t的职工姓名
SELECT e.empno,e.ename,e.mgr,t.ename
FROM scott.emp e,scott.tb_emp t
WHERE e.mgr = t.empno
AND e.empno = ‘7369’;

–注意:+号的外连接写法唯有Oracle支持

(scott账户)

–内连接(等值连接) 标准sql的写法
SELECT *
FROM scott.dept d INNER JOIN scott.emp e
ON d.deptno = e.deptno;

SELECT *
FROM scott.dept,scott.emp
WHERE scott.dept.deptno = scott.emp.deptno;

–内连接(等值连接)
SELECT *
FROM scott.dept,scott.emp
WHERE scott.dept.deptno = scott.emp.deptno
AND scott.emp.empno = ‘7369’;

–笛Carl积
–当查询数据风尚未选拔连接条件,会意识到所有关乎数据
–4*14=56
SELECT * FROM scott.dept,scott.emp;

–外连接(非等值连接)
SELECT * FROM scott.dept;–4
SELECT * FROM scott.emp;–14

–内连接(等值连接)
SELECT *
FROM scott.dept,scott.emp
WHERE scott.dept.deptno = scott.emp.deptno
AND scott.emp.empno = ‘7369’;

–标准sql语句
–左外连接
SELECT *
FROM scott.dept d LEFT OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

–注意:+号的外连接写法只有Oracle协理

–注意:多表连接查询一定要带关联条件,否则就会出现笛Carl积
–总计:多表连接第一步就是找关系条件
–emp.deptno = dept.deptno
–student.clazz_id = clazz.id
–多表连接的关系条件时N-1

/**
自连接(self join)是SQL语句中不时要用到的接连格局,
选取自连接可以将本身表的一个镜像当作另一个表来对待,
即将一张表看成多张表来做连接,从而可以拿走一些特其余数量。
首要之处在于为同一个表指定多个区其他别名。
如此那般就能经过在一张表内寻找到相互关联的数据再找到有继承关系的数量。
*/

/**
自连接(self join)是SQL语句中平日要用到的连天方式,
运用自连接可以将本人表的一个镜像当作另一个表来对待,
即将一张表看成多张表来做连接,从而可以赢得一些异样的数额。
重大之处在于为同一个表指定三个差其他别名。
如此那般就能由此在一张表内寻找到互相关联的数额再找到有一而再关系的多少。
*/

–因为单位40从未有过员工,当使用等值连接时,部门40的音信没有显得
–左外连接:+号在左边,左侧的多少要任何出示,如若左侧没有和右侧表数据匹配的,则补null
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno(+);

–筛选查询的列
–查询e表所有列 和 d表dname列,d表loc列
SELECT e.*, d.dname,d.loc
FROM scott.emp e,scott.dept d
WHERE d.deptno = e.deptno;

–筛选查询的列
–查询e表所有列 和 d表dname列,d表loc列
SELECT e.*, d.dname,d.loc
FROM scott.emp e,scott.dept d
WHERE d.deptno = e.deptno;

–查询所有单位和职工音信
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno;

–多表连接
–最快备份一张表数据的法子,注意,该措施只是备份数据,不复制约束
CREATE TABLE tb_emp AS SELECT * FROM scott.emp;
SELECT * FROM tb_emp;
SELECT * FROM scott.emp;

/**
笛Carl积
内两次三番(等值连接)
外接连(非等值连接)
自连接
*/

–右外连接:+号在左侧,右侧的多寡要全方位显得,如若左侧没有和左侧数据匹配的,则补null
SELECT *
FROM scott.dept d,scott.emp e
WHERE e.deptno(+) = d.deptno;

SELECT *
FROM scott.dept d RIGHT OUTER JOIN scott.emp e
ON d.deptno = e.deptno;

SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno;

 

–自连接
SELECT e.empno,e.ename,e.mgr,t.ename
FROM scott.emp e,scott.emp t
WHERE e.mgr = t.empno
AND e.empno = ‘7369’;

相关文章