Oracle中多表查询

    xiaoxiao2021-12-13  23

    1.笛卡尔积 select * from emp,dept; 2.等值连接 select empno,ename,sal,emp.depno,dname from emp,dept where emp.depno=dept.depno; 3.非等值连接 select ename,empno,grade, from emp,salgrade where sal between losal and hisal; 4.自连接 select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr = m.empno; select e.empno,e.ename,m.empno,m.ename from emp e,emp m where m.mgr = e.empno; 5.左外连接(LEFT OUTER JOIN) select s.sid,s.sname,s1.sid,s1.sname from student s,student s1 where s.sid = s1.sid(+); select empno,ename,dname from emp left outer join dept on emp.depno = dept.depno; 6.右外连接(RIGHT OUTER JOIN) select s.sid,s.sname,s1.sid,s1.sname from student s,student s1 where s.sid(+) = s1.sid; 7.满外连接(FULL OUTER JOIN) SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID; 注意:MySQL是不支持全外的连接的,这里给出的写法适合Oracle和DB2。 但是可以通过左外和右外求合集 SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID UNION SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME FROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID; 两者查询的结果是相同的 8.集合操作 union:并集,所有的内容都查询,重复的只显示一次。 union all:并集,所有的内容都查询,包括重复的。 intersect:交集,只显示重复的。 minus:差集或减集,只显示两张表不同的记录(和顺序有关系)或者说在第一个查询结果中排除第二个查询结果中出现的行。 验证union和union all select * from emp union select * from emp20;--此语句查询结果中,重复的内容不再显示 select * from emp union all select * from emp20;--查询结果中,重复的内容依然显示 select * from emp intersect select * from emp20;--只显示两张表中都存在的记录 select * from emp minux select * from emp20;--只显示两张表中不同的记录
    转载请注明原文地址: https://ju.6miu.com/read-950161.html

    最新回复(0)