SQL关联查询

本文介绍了SQL中的关联查询,包括连接查询的基础概念、等值连接、内连接、外连接(左外、右外、全外)以及自连接。通过实例展示了如何在多表之间进行数据查询,强调了连接条件在查询中的重要性,帮助理解如何有效获取和展示关联数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

     ♠ 关联查询:查询的结果集中的字段可能来自多张表。要从多张表中获取数据时,就要找到这几张表记录的对应关系,然后建立联系后分别获取。所以连接条件(指明表之间记录的对应关系)在关联查询中十分关键。 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值