4.4、联表查询

JOIN

mysql自关联菜单查询 mysql自连接查询的sql语句_mysql自关联菜单查询

mysql自关联菜单查询 mysql自连接查询的sql语句_java_02

-- =======联表查询=========
-- 查询参加了考试的同学(学号、姓名、科目编号、分数)

SELECT * FROM student
SELECT * FROM result

/*
思路
1. 分析需求,分析查询哪些字段,这些字段来自哪些表,(两张表以上,联表查询)
2. 确定使用哪种联结查询?共有7种
确定交叉点(这两张表种的哪个数据是相同的)
判断的条件:学生表中的  studentno = 成绩表中的 studentno

*/
-- join on (链接的条件) 链接查询
-- where  等值查询

-- INNER JOIN
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s -- 左表
INNER JOIN `result` AS r -- 右表
ON s.`studentno`=r.`studentno`

-- RIGHT JOIN
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s  -- 左表
RIGHT JOIN `result` AS r  -- 右表
ON s.`studentno`=r.`studentno`

-- LEFT JOIN
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s  -- 左表
LEFT JOIN `result` AS r  -- 右表
ON s.`studentno`=r.`studentno`

-- 哪张表在上面,哪张就是左表

操作

描述

Inner Join

根据查询的条件返回所需要的数据(有条件的膨胀/扩张返回数据)(实则是并集)

Left Join

返回左表中有的全部数据(右表中没有的) (左表是主表,右表是从表)

Right Join

返回右表中有的全部数据(左表中没有的) (右表是主表,左表是从表)

-- ========联表查询 多张表查询=========
-- 查询了参加考试的同学信息:学号,学生姓名,科目名,分数

SELECT s1.`studentno`,`studentname`,`SubjectName`,`studentresult`
FROM student s1
RIGHT JOIN result r
ON s1.studentno=r.studentno
INNER JOIN `subject` s2
ON s2.subjectno=r.subjectno

-- 需要查询的哪些数据  select ....字段
-- 从哪张表中查询  from  表名 as 别名 
-- 用哪种查询方式链接其他的表,根据实际需求来用(7种)  查询方式   表名 as 别名
-- 找到交叉点   别名.字段 = 别名.字段
-- 过滤筛选的条件  where ...
-- 如果多张表查询 --> 继续链接其他表来完成实际的需求...
-- 查询学员所属的年级(学号,学生的姓名,年级名称)
SELECT `studentno`,`studentname`,`gradename`
FROM `student` s
INNER JOIN `grade` g
ON s.`gradeid`=g.`gradeid`

-- 查询科目所属的年级(科目编号,科目名称,年级名称)
SELECT `SubjectNo`,`SubjectName`,`gradename`
FROM `subject` s
INNER JOIN `grade` g
WHERE s.`GradeID`=g.`gradeid`

-- 查询了参加 高等数学-2 考试的同学的信息:学号,学生姓名,科目名,分数
SELECT s.`studentno`,`studentname`,`SubjectName`,`studentresult`
FROM `student` s
INNER JOIN `subject` sub
ON s.`gradeid`=sub.`GradeID`
INNER JOIN `result` r
ON s.`studentno`=r.`studentno`
WHERE sub.`SubjectName`='高等数学-2'

自连接

自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

父类表

categoryid

pid

cateoryName

2

1

信息技术

3

1

软件开发

5

1

美术设计

子类表

categoryid

pid

categoryName

4

3

数据库

6

3

web开发

7

5

ps技术

8

2

办公信息

-- 查询父子信息  把一张表拆分为父类表a和子类表b
-- 子类表中的pid=父类表中的categoryid
SELECT a.`categoryName` AS 父类, b.`categoryName` AS 子类
FROM `category` AS a,`category` AS b
WHERE a.`categoryid`=b.`pid`

查询结果为:

mysql自关联菜单查询 mysql自连接查询的sql语句_mysql自关联菜单查询_03