您的位置:首页 > 数据库

SQL关联查询

2015-12-21 23:30 351 查看
一、关联基础:
♠ 连接查询:查询两个或两个以上数据表或视图的查询,通常建立在存在相互关系的父子表之间。

♠ 关联查询:查询的结果集中的字段可能来自多张表。要从多张表中获取数据时,就要找到这几张表记录的对应关系,然后建立联系后分别获取。所以连接条件(指明表之间记录的对应关系)在关联查询中十分关键。 N 张表关联查询,至少要有 N-1 个连接条件否则会出现笛卡尔积。这是一个无用的结果集,对系统资源开销大,甚至会使系统瘫痪。

♠ 等值连接:在有主外键关联关系的表间建立,并将连接条件设定为有关系的列,使用等号“ = ”连接相关的表
例如:查看 SALES 部门的员工有谁
SELECT e.ename,e.deptno FROM emp_rs e, dept_rs d WHERE e.deptno = d.deptno AND d.dname = 'SALES'

二、关联查询:
♣ 内连接 --- 关联连接的另一种方式,返回所有满足连接条件的记录
例如:查看员工以及所在部门名称
SELECT e.ename,d.dname FROM emp_rs e JOIN dept_rs d ON e.deptno = d.deptno

♣ 外连接 --- 不仅返回满足连接条件的记录,还将返回不满足连接条件的记录
分三种:
左外连接:以左表为驱动表,其数据都要显示,来自右表记录中的字段,在结果集中若不满足连接条件时,则值为 NULL
右外连接:以右表为驱动表。
全外连接:两张表的数据都要查询出来,哪边不满足条件哪边值为 NULL
例如:查看每个员工的信息,以及所在部门的信息
若没有部门,也要讲员工信息列出来
左:SELECT e.ename,e.job,e.deptno,d.dname,d.loc FROM emp_rs e LEFT OUTER JOIN dept_rs d ON e.deptno = d.deptno
右:SELECT e.ename,e.job,e.deptno,d.dname,d.loc FROM emp_rs e RIGHT OUTER JOIN dept_rs d ON e.deptno = d.deptno
全: SELECT e.ename,e.job,e.deptno,d.dname,d.loc FROM emp_rs e FULL OUTER JOIN dept_rs d ON e.deptno = d.deptno

♣ 自连接 --- 通过将表用别名虚拟成两个表的方式实现,可以是等值或不等值连接
定义:一种特殊的连接查询,数据的来源是一个表,即关联关系来自于单表中的多个列。表中的列参照同一个表中的其它列的情况称作自参照表。
当前表的记录与当前表的其它记录产生对应关系,不需要额外表的参与。自连接的设计目的是为了解决相同类型数据间有存在父子级关系的数据结构。(典型的是树状结构)
例如:查看每个员工以及其上司。
自连接: SELECT e.ename, m.ename FROM emp_rs e, emp_rs m WHERE e.mgr = m.empno
内连接: SELECT e.ename, m.ename FROM emp_rs e JOIN emp_rs m ON e.mgr = m.empno
左外连接:SELECT e.ename, m.ename FROM emp_rs e LEFT OUT JOIN emp_rs m ON e.mgr = m.empno
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: