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

(scott账户)

(scott账户)

 

 

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

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

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

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

–笛Carl积
–当查询数据前卫未行使连接条件,会查出全体关乎数据
–4*14=56
SELECT * FROM scott.dept,scott.emp;

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

–注意:多表连接查询一定要带关联条件,不然就会油然则生笛Carl积
–总括:多表连接第②步就是找关系条件
–emp.deptno = dept.deptno
–student.clazz_id = clazz.id
–多表连接的涉嫌条件时N-1

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

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

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

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;

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

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

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

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;

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

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

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

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

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

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

–查询全部机关和职工新闻
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno;

–查询全体部门和职工新闻
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno;

–因为单位40不曾职员和工人,当使用等值连接时,部门40的音讯尚未出示
–左外连接:+号在右手,左侧的数码要所有出示,假若左边没有和左边表数据匹配的,则补null
SELECT *
FROM scott.dept d,scott.emp e
WHERE d.deptno = e.deptno(+);

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

–右外连接:+号在左手,右侧的数额要一五一十出示,假若右侧没有和左边数据匹配的,则补null
SELECT *
FROM scott.dept d,scott.emp e
WHERE e.deptno(+) = d.deptno;

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

–注意:+号的外连接写法只有Oracle扶助

–注意:+号的外连接写法唯有Oracle帮衬

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

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

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

–右外连接
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;

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

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

–全外连接
–左侧的表和右侧的表数据都要一五一十展现,假如没有相应的,则补null
SELECT *
FROM scott.dept d FULL 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;

SELECT *
FROM scott.dept d LEFT 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

–自连接(主要,面试常常出现)
/**
在emp中的每1个职员和工人都有谈得来的mgr(COO),并且每二个经营本身也是店铺的员工,
经纪本人也有温馨的首席执行官。上边我们必要将每多个职工要好的名字和经纪的名字都找出来。
那儿我们该怎么办呢?
*/
SELECT * FROM scott.emp;
–empno ename mgr mgrname
–7369 SMITH 7902 FORD
–empno ename mgr mgrname
–7902 FORD 7566 JONES

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

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

–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’;

–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 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 e.empno,e.ename,e.mgr,t.ename
FROM scott.emp e,scott.emp t
WHERE e.mgr = t.empno
AND e.empno = ‘7369’;

/**
自连接(self join)是SQL语句中不时要用到的连年情势,
应用自连接能够将本身表的多个镜像当作另贰个表来对待,
即将一张表看成多张表来做连接,从而能够收获部分出奇的数据。
首要之处在于为同三个表钦命三个例外的小名。
诸如此类就能经过在一张表内寻找到互相关系的数据再找到有继续关系的数据。
*/

/**
自连接(self join)是SQL语句中时常要用到的总是形式,
行使自连接能够将本人表的二个镜像当作另2个表来对待,
即将一张表看成多张表来做连接,从而能够取得部分万分的数目。
要害之处在于为同1个表钦定五个分裂的别名。
那样就能透过在一张表内寻找到互相关系的数码再找到有继续关系的数额。
*/