MySQL多表查询

2018-09-16  本文已影响0人  你猜_e00d

链接查询

什么是链接查询

也可以叫跨表查询,需要关联多个表进行查询

什么是笛卡尔集

假设集合A={a,b},集合B={0,1,2},
则两个集合的笛卡尔集为 {(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}
可以拓展到多个集合的情况

同时查询两个表(使用一个SQL语句),出现的就是笛卡尔集结果

SELECT *FROM students,score;

解决方法

要保证我们当时建表的时候,关系的那个键保持一致
SELECT *
FROM students,score
WHERE students.id = score.sid;

内连接划分

内连接分为:等值连接,非等值连接,自然连接

内连接之等值连接

两个表同时出现的id号(值)才显示

1. 99写法

SELECT * FROM
students st,score sc
WHERE st.id = sc.sid;

2.内连接写法

SELECT * FROM students st INNER JOIN score sc ON st.id = sc.sid

注意:

多表联查约束主外键一样,只是写法改变了
ON后面只写主外键4. (对于结果)如果还有条件直接在后面写WHERE5. 多表联查后还有条件就直接写AND

左链接

两表满足条件相同的数据查出来,如果左边表当中有不相同的数据,也把左边表当中的数据查出来.(换句话说就是左边表数据全部查询出来,右边表只查询满足条件的)

--OUTER可以省略
SELECT *
FROM students st
LEFT OUTER JOIN score sc
ON st.id = sc.sid;
右链接

右连接会把右当中的数据全部查出,左表当中只查满足条件的数据
站在表的角度去看,使用左连接就会把左边的内容全部查出,右边查出满足条件的
使用右连接,就把右边表当中的数据全部查出,左边查出满足条件的

SELECT *
FROM students st
RIGHT OUTER JOIN score sc
ON st.id = sc.sid;

自然连接

连接查询会产生无用笛卡尔集,我们通常使用主外键关系等式来去除它.
而自然连接无需你去给出主外键等式,它会自动找到这一等式
也就是说不用去写条件
但是自然连接有一个要求

  1. 两张连接的表中列名称和类型完全一致的列作为条件
  2. 会去除相同的列

子连接

子查询

什么是子查询
  1. 一个select语句中包含另外一个完整的select语句
  2. 或者说两个以上select,那么就是子查询语句了
子查询出现的位置

1.where后,把select查询出的结果当做另外一个select的条件值
2.from后,把查询出的结果当作一个新表

例如:
先查出项羽所在的部门编号

SELECT deptno FROM emp WHERE ename = '项羽';

再根据编号查询同一部门的员工

SELECT ename FROM emp WHERE deptno = 20;

把第1条查出来的结果当第2条语句的条件

SELECT ename,deptno FROM emp
WHERE deptno = (SELECT deptno FROM emp WHERE ename = '项羽')

上一篇下一篇

猜你喜欢

热点阅读