Mysql连表查询JoinON详细笔记 作者:哇塞大嘴好帥

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

​ 因为我们左表查询会把左表所有的数据显示出出来,我们的项目需求只是要查询javaLangNull的用户,所有我们再加一个判断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)。

你可能感兴趣的:(Mysql,mysql,数据库,sql)