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 | 即使左表没有匹配也会返回右表所有值 |
通过连表左表查询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的区别
语法 | 描述 |
---|---|
on | 连接查询 |
where | 等值查询 |
复杂的sql连表查询
为了添加复杂性这时候我们在添加一个表
userclass表
id | studentid | class |
---|---|---|
1 | 186310 | 2 |
select
u.id,
u.studentid,
u.`name`,
s.JavaLang,
sc.class
from
user as u
left join score as s
on u.studentid = s.studentid
inner 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)。