oracle查询连接

来源:互联网 发布:淘宝食品流通许可证办理 编辑:程序博客网 时间:2024/05/18 01:14
SELECT * FROM EMP;
SELECT * FROM DEPT;


--左连接
--1、查询与左边表DEPT(4)相关联的数据,如DEPTNO=40在右边没有对应的数据,则显示为空
    SELECT * FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO;
    --查询与左边表相关联的数据,并统计DEPT表每个DNAME的记录条数,由1可知,DNAME='OPERATIONS'的条数为0
    SELECT DNAME,COUNT(ENAME) FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO GROUP BY DNAME;


--2、查询与左边表emp表相关的数据,因为emp表中的DEPTNO中没有等于40的号,所以DEPT表中DEPTNO=40的数据不会显示
    SELECT * FROM EMP LEFT JOIN DEPT ON DEPT.DEPTNO=EMP.DEPTNO;
    --查询与左边表相关的数据,由2可知,只会显示DEPT.DEPTNO=EMP.DEPTNO的数据
    SELECT DNAME,COUNT(ENAME) FROM EMP LEFT JOIN DEPT ON DEPT.DEPTNO=EMP.DEPTNO GROUP BY DNAME;


--右连接
SELECT * FROM DEPT RIGHT JOIN EMP ON EMP.DEPTNO=DEPT.DEPTNO;
SELECT DNAME,COUNT(ENAME) FROM DEPT RIGHT JOIN EMP ON EMP.DEPTNO=DEPT.DEPTNO GROUP BY DNAME;
--完全外连接
SELECT DNAME,COUNT(ENAME) FROM DEPT FULL JOIN EMP ON EMP.DEPTNO=DEPT.DEPTNO GROUP BY DNAME;
--内连接
SELECT * FROM DEPT INNER JOIN EMP ON EMP.DEPTNO=DEPT.DEPTNO;
       --等价于
       SELECT * FROM SCOTT.DEPT,SCOTT.EMP WHERE DEPT.DEPTNO=EMP.DEPTNO;
--自连接
SELECT M.ENAME FROM SCOTT.EMP M,SCOTT.EMP W WHERE M.EMPNO=W.MGR GROUP BY M.ENAME;
SELECT M.ENAME FROM SCOTT.EMP M,SCOTT.EMP W WHERE M.EMPNO=W.MGR AND W.ENAME='BLAKE';


SELECT * FROM SCOTT.EMP;


--创建表myemp
CREATE TABLE MYEMP
(
   EMPNO NUMBER(4) NOT NULL,
   EMPNAME VARCHAR2(20),
   MGR NUMBER(4)
)
---important@……@
--从emp表中查询数据并添加到myemp中-----(注意:rownum表示记录的行数,例如:rownum<6表示获取前6行记录)
INSERT INTO MYEMP SELECT EMPNO,ENAME,MGR FROM EMP WHERE ROWNUM<6;
SELECT * FROM MYEMP;




--使用集合操作符
--创建表emps
CREATE TABLE EMPS
(
       EMPNO NUMBER(4),
       ENAME VARCHAR2(20),
       JOB VARCHAR2(20),
       MGR NUMBER(4),
       HIRDATE DATE ,
       SAL NUMBER(10,2),
       COMM NUMBER(10,2),
       DEPTNO NUMBER(4)
)


--从emp中查询数据并添加到表emp
INSERT INTO EMPS SELECT * FROM EMP WHERE ROWNUM<6;
SELECT * FROM EMPS;
--1、UNION----返回检索到的所有不重复的行
SELECT * FROM EMP
UNION
SELECT * FROM EMPS
--2、UNION ALL---查询检索的所有行,包括重复行
SELECT * FROM EMP
UNION ALL
SELECT * FROM EMPS;
--3、INTERSECT---返回两个查询都检索到的行,(即两张表的交集)
SELECT * FROM EMP
INTERSECT
SELECT * FROM EMPS;
--4、MINUS---返回第一个查询检索到的行减去第二个查询检索到的行所剩余的行
SELECT * FROM EMP
MINUS
SELECT * FROM EMPS;