[MySQL]数据库连接sql语句
1、连接
表连接是将两张表中符合一定条件的表记录(行)进行连接,生成一张新表。如果不设置连接条件,结果与两表的笛卡尔积相同。根据sql语句的执行顺序,可以知道连接(join)发生在连接判断(on)之后。sql语句执行顺序:
from -- 确定查询的是哪张表 on -- 连接条件 join -- 连接 where -- 从表的数据中进行筛选 select -- 确定要显示那些列(定义列别名) group by 集合函数 having order by limit
下面将使用emp表(员工表)与dept表(部门表)进行连接测试,表内容:
2、笛卡尔积连接
SELECT XXX FROM XXX JOIN XXX :
select * from emp,dept;-- 没有条件的内连接 select * from emp inner join dept;-- join为连接的意思 select * from emp join dept;-- inner可以省略
下面给出简单笛卡尔积的计算方法,笛卡尔积乘出来的也是集合,无序、不重复的。
笛卡尔积的符号化为: A×B={(x,y)|x∈A∧y∈B} 例如,A={a,b}, B={0,1,2}, 则 A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)} B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
3、内查询
SELECT XXX FROM XXX INNER JOIN XXX ON XXX:
select * from emp inner join dept on emp.dept_id = dept.id; -- 左表(emp)中符合on条件的行与右表(dept)中符合条件的行进行连接
4、左外查询
SELECT XXX FROM XXX LEFT OUTER JOIN XXX ON XXX:
select * from dept left outer join emp on emp.dept_id = dept.id; -- 将左表(dept)中的行与右表(emp)中符合on条件的进行join select * from dept left join emp on emp.dept_id = dept.id; -- outer可以省略
5、右外查询
SELECT XXX FROM XXX RIGHT OUTER JOIN XXX ON XXX:
select * from dept right join emp on emp.dept_id = dept.id; -- 将左表中符合on条件的行与右表中所有的行进行连接。
6、总结:
-
内连接是两个表的交集 左外连接是左表加两表交集 右外连接是右表加两表交集
在连接时建议先使用on来限定连接行,再用where对连接生成的新表进行筛选。当两表表记录数量大时,不使用on会产生一个更大的笛卡尔积表
参考:
