问题:学生表有110条数据,成绩表有10条数据
连接之后有多少条数据(笛卡尔积):10*10
连接查询会产生笛卡尔积:假设集合A={a,b},集合B={c,d},
2个集合的笛卡尔积{(a,c),(a,d),(b,c),(b,d)}
但是:
(1)从数据接过来讲,有很多无用的数据。
(2)通过where条件过滤无用的数据:通过主外键来清除无用数据
使用主外键清楚无用数据
Select *from emp,dept where emp.deptno=dept.deptno;
11.5.1 内连接
上面的写法其实就是内连接,但是不在SQL标准
标准写法:
Select
*
From
Emp e
Inner join
Dept d
On
e.depton = d.deptno
(1)inner可以省略
(2)内连接的特点:查询的条件必须满足条件,不满足条件的数据将会丢失
部门是40的数据就没有了,员工emp中没有40这个部门的人。
11.5.2外连接
A left jion B : A左连接 B表;A表示主表
B left jion A : B左连接 A表;B表示主表
A Right join B :A有链接 B表;B表示主表
B Right jion A : B左连接 A表;A表示主表
特点:主表的数据全部都在,
然后去匹配 非主表的数据,匹配补上为null
员工表 emp是主表,去匹配dept
Select
*
From
Emp e
Left join
Dept d
On
e.deptno = d.deptno
##部门表是 主表,然后去匹配员工表
Select
*
From
Emp e
Right join
Dept d
On
e.deptno = d.deptno