[MySQL]数据库连接sql语句

版权声明:本文为博主原创文章,转载请申明出处,感谢。 https://blog.csdn.net/shichimiyasatone/article/details/85292998

1、连接

表连接是将两张表中符合一定条件的表记录(行)进行连接,生成一张新表。如果不设置连接条件,结果与两表的笛卡尔积相同。根据sql语句的执行顺序,可以知道连接(join)发生在连接判断(on)之后。sql语句执行顺序:

  1. from -- 确定查询的是哪张表
  2. on -- 连接条件
  3. join -- 连接
  4. where -- 从表的数据中进行筛选
  5. select -- 确定要显示那些列(定义列别名)
  6. group by
  7. 集合函数
  8. having
  9. order by
  10. 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会产生一个更大的笛卡尔积表

参考:

https://www.cnblogs.com/cdf-opensource-007/p/6517627.html

猜你喜欢

转载自blog.csdn.net/shichimiyasatone/article/details/85292998