背景:
emp表中有14条记录:
dept表中4条记录:
salgrade表中有5条记录:
交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。
例如:下面的语句1和语句2的结果是相同的(均为56条记录)。
语句1:隐式的交叉连接,没有CROSS JOIN。
select empno,ename,sal,dname,loc from emp,dept
语句2:显式的交叉连接,使用CROSS JOIN
select empno,ename,sal,dname,loc from emp CROSS JOIN dept
二、内连接
内连接是根据指定的连接条件进行连接查询,只有满足连接条件的数据才会出现在结果集中。
当执行两个表内连接查询的时,首先在第一个表中查找到第一个记录,然后从头开始扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的的第一个记录拼接形成结果集中的第一个记录。当第二个表被扫描一遍后,再从第一个表中查询第二个记录,然后再从头扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的第二个记录拼接形成结果集中的一个记录。重复执行,知道第一个表中的全部记录都处理完毕为止。
1. 相等连接通过两个表具有相同意义的列,可以建立相等连接条件。只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。
例如,查询10号部门员工的员工号、员工名、工资、部门号和部门名:
SELECT empno,ename,sal,emp.deptno FROM EMP
join DEPT on EMP.DEPTNO = DEPT.DEPTNO and EMP.DEPTNO=10
结果如下图:
小注:
如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。 典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。 备注:inner join 是默认的连接方式,可缩写为join。
比如下面两种方式效果是一样的:
SELECT * FROM emp,dept
WHERE emp.deptno=dept.deptno;
SELECT * FROM emp
INNER JOIN dept ON dept.deptno=emp.deptno;
2、不相等连接
如果连接条件中的运算符不是等号而是其他关系的运算符,这成为不相等连接。
例如,查询10号部门员工的工资等级:
select empno,ename,sal,grade
from emp
join salgrade
on sal>losal and sal
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?