Oracle多表查询

一、多表联接查询

1.内联接 (inner join)

2.外联接

左外联接   (left outer join) ;右外联接   (right outer join) 完整外联接 (full outer join)

3.交叉联接(cross join 笛卡尔积)

二、内联接

它根据表中共同的列来进行匹配,当两个表存在主外键关系的时候通常会用到内联接查询。

例如:查询出公司的员工ID、员工姓名、所在部门ID、部门名称

SELECT emp_id,emp_name,DEP.dep_id,dep_name FROM EMPLOYEE  INNER  JOIN DEP   ON   EMPLOYEE.dep_id=DEP.dep_id

三、左外联接

它的结果集包括left outer join子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列均为空值。

例如:查询出公司的员工姓名、月份、实发工资 SELECT   E.emp_name,S.sal_ym,S.sal_disburse FROM   EMPLOYEE  E  LEFT OUTER JOIN  SALARY  S   ON   E.emp_id = S.emp_id

四、右外联接

右外联接:RIGHT JOIN(RIGHT OUTER JOIN)是左联接的反向联接,将返回右表中的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

例如:查询出公司的员工编号、职位编号、职位名称

SELECT  EMPLOYEE.emp_id,         EMPLOYEE.job_id,         JOB.job_name FROM    EMPLOYEE  RIGHT OUTER JOIN  JOB                 ON EMPLOYEE.job_id = JOB.job_id

五、完整外联接

完整外联接:FULL OUTER JOIN,它返回左右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列包含空值,如果表之间有匹配行,则整个结果集行包含基表的数据值。

例如:查询出公司的员工编号、职位编号、职位名称 SELECT  EMPLOYEE.emp_id,         EMPLOYEE.job_id,         JOB.job_name FROM    EMPLOYEE  FULL OUTER JOIN  JOB             ON EMPLOYEE.job_id = JOB.job_id。

六、交叉联接(cross join 笛卡尔积)

交叉联接:CROSS JOIN,没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。如果添加一个 WHERE 子句,则交叉联接的作用将同内联接一样。

例如:查询出公司的员工姓名和职位名称 SELECT  E.emp_name || '.' || J.job_name FROM EMPLOYEE  E CROSS JOIN JOB  J

七、多表联接查询

例:现需要查询出所有员工的姓名,所在的部门以及职位。

SELECT E.emp_name  姓名,        D.dep_name  部门,        J.job_name  职位 FROM EMPLOYEE  E       LEFT JOIN DEP  D  ON E.dep_id = D.dep_id       LEFT JOIN JOB  J   ON E.job_id = J.job_id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值