Mysql连表查询JoinON详细笔记 作者:哇塞大嘴好帥 作者:哇塞大嘴好帥(哇塞大嘴好帅)
数据库
user表
id |
studentid |
name |
1 |
186310 |
哇塞大嘴好帥 |
成绩表
id |
studentid |
JavaLang |
1 |
186310 |
666 |
方法一 连接查询
? 如果使用连接查询必须保证两个表之间有相同的字段,使用INNER JOIN 获取他们的并集 共有的字段。并且确保两个字段内容一致
/*
使用查询方法 连接查询
*/
SELECT
u.id,
u.studentid,
u.name,
s.JavaLang
FROM
`user` AS u
INNER JOIN score AS s
ON
s.studentid = u.studentid
查询出的数据
id |
studentid |
name |
JavaLang |
1 |
186310 |
哇塞大嘴好帥 |
666 |
方法二 又查询
/*
使用查询方法 又查询
*/
SELECT
u.id,
u.studentid,
u.name,
s.JavaLang
FROM
`user` AS u
right JOIN score AS s
ON
s.studentid = u.studentid
id |
studentid |
name |
JavaLang |
1 |
186310 |
哇塞大嘴好帥 |
666 |
方法三 左查询
/*
使用查询方法 左查询
*/
SELECT
u.id,
u.studentid,
u.name,
s.JavaLang
FROM
user as u
left join score as s
on
s.studentid = u.studentid
id |
studentid |
name |
JavaLang |
1 |
186310 |
哇塞大嘴好帥 |
666 |
我们这时候做一个测试,我们在user表添加一行数据
id |
studentid |
name |
1 |
186310 |
哇塞大嘴好帅 |
2 |
186311 |
大嘴小学生 |
这时候我们在使用三种查询方式查看结果
连接查询
id |
studentid |
name |
JavaLang |
1 |
186310 |
哇塞大嘴好帥 |
666 |
又查询
id |
studentid |
name |
JavaLang |
1 |
186310 |
哇塞大嘴好帥 |
666 |
左查询
id |
studentid |
name |
JavaLang |
1 |
186310 |
哇塞大嘴好帥 |
666 |
2 |
186311 |
大嘴小学生 |
NULL |
通过以上的三种查询方式我们可得一个结论
代码 |
描述 |
INNER JOIN |
必须左右表匹配,才可以返回 |
LEFT JOIN |
即使右表没有匹配也会返回左表所有值 |
RIGHT JOIN |
即使左表没有匹配也会返回右表所有值 |
【Mysql|Mysql连表查询JoinON详细笔记 作者:哇塞大嘴好帥】通过连表左表查询JavaLang字段为null的数据
select
u.id
u.studentid
u.name
s.JavaLang
FROM
user as u
left JOIN score s
on u.studentid = s.studentid
where JavaLang is null
id |
studentid |
name |
JavaLang |
1 |
186310 |
大嘴小学生 |
NULL |
? 因为我们左表查询会把左表所有的数据显示出出来,我们的项目需求只是要查询javaLang为Null的用户,所有我们再加一个判断where JavaLang is null就可以查询出来为null的用户
where与on的区别
复杂的sql连表查询
为了添加复杂性这时候我们在添加一个表
userclass表
id |
studentid |
class |
1 |
186310 |
2 |
select
u.id,
u.studentid,
u.`name`,
s.JavaLang,
sc.class
from
user asu
left join score as s
on u.studentid = s.studentidinner join userclass sc
on u.studentid = sc.studentid
id |
studentid |
name |
JavaLang |
class |
1 |
186310 |
哇塞大嘴好帥 |
666 |
2 |
首先先左表查询出来数据,接后又连表查询的数据,展示出我们想要的字段(u.id,u.studentid,s.JavaLang,u.
name
,sc.class)。
推荐阅读