17.多表查询--交叉连接、自然连接、内连接

本文介绍了SQL中的连接查询,包括交叉连接(CROSS JOIN)、自然连接(NATURAL JOIN)和内连接(INNER JOIN),并详细解释了它们的使用场景和优缺点。通过实例展示了如何使用ON和USING子句进行内连接,并强调了在多表查询中内连接的常见应用。同时,讨论了筛选条件和连接条件在SQL99语法中的独立使用。
摘要由CSDN通过智能技术生成

[1]内连接引入:

实际开发中往往需要针对两张甚至更多张数据表进行操作,而这多张表之间需要使用主键和外键关联在一起, 然后使用连接查询来查询多张表中满足要求的数据记录。一条SQL语句查询多个表,得到一个结果,包含多个表的数据。效率高。在SQL99中,连接查询需要使用 join关键字实现。 提供了多种连接查询的类型: cross、natural、using、on 交叉连接(CROSS JOIN)是对两个或者多个表进行笛卡儿积操作,所谓笛卡儿积就是关系代数里的一个概念,表示两个表中的每一行数据任意组合 的结果。比如:有两个表,左表有m条数据记录,x个字段, 右表有n条数据记录, y个字段,则执行交叉连接后将返回m*n条数据记录,x+y个字 段。

--  查询员工的编号,姓名,部门编号:
SELECT EMPNO,ENAME,DEPTNO FROM EMP;

--  查询员工的编号,姓名,部门编号,部门名称:
SELECT * FROM EMP;-- 14条记录
SELECT * FROM DEPT;-- 4条记录


-- 多表查询:
-- 交叉连接:CROSS JOIN 
SELECT * 
FROM EMP 
CROSS JOIN DEPT;
-- 14*4=56条记录  笛卡尔乘积:把所有的都匹配一次,没有实际意义,有理论意义
SELECT * 
FROM EMP  
JOIN DEPT;
-- CROSS 可以省略不写,MySQL中可以,Oracle中不可以


-- 自然连接:NATUREAL JOIN
-- 优点:自动匹配所有的同名列,同名列只展示一次,简单!
SELECT *
FROM EMP
NATURAL JOIN DEPT;

-- 缺点:查询字段的时候,没有指定字段所属的数据库表,效率低
-- 解决:指定表名
SELECT EMP.EMPNO,EMP.ENAME,EMP.SAL,DEPT.DNAME,DEPT.LOC
FROM EMP
NATURAL JOIN DEPT;
-- 缺点:表名太长
-- 解决:给表起别名
SELECT E.EMPNO,E.ENAME,E.SAL,D.DNAME,D.LOC
FROM EMP E
NATURAL JOIN DEPT D;

-- 自然连接 NATURAL JOIN 缺点:自动匹配表中所有的同名列,但有时候我们只想匹配部分同名列:
-- 解决:内连接 - using子句:
SELECT *
FROM EMP E
INNER JOIN DEPT D  -- INNER 可以不写
USING(DEPTNO) -- 这里不能写natural join了,这里是内连接

-- using缺点:关联的字段,必须是同名的
-- 解决: 内连接 - on子句:
SELECT *
FROM EMP E
INNER JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO);-- 可以不同名,例如ON(E.CNO = D.DEPTNO)

-- 多表连接查询的类型:
-- 1.交叉链接:CROSS JOIN 
-- 2.自然连接:NATURAL JOIN
-- 3.内连接:-USING 子句
-- 4.	内连接 - ON 子句
-- 综合看:内连接 - ON子句只用最多

SELECT *
FROM EMP E
INNER JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO)
WHERE SAL>3500;

-- 条件:
-- 1.筛选条件:WHERE     HAVING
-- 2.链接条件: ON,USING,NATURAL
-- SQL99语法:筛选条件和连接条件是分开的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值