数据库联表查询
一、Join
join的固定语法搭配是join(要连接的表)on,用于连接查询,而通常我们所使用的where是等值查询。
多表连接分为:内连接、外连接,而外连接又包括左外连接与右外连接和全外连接。
操作 | 关键字 | 描述 |
内连接 | JOIN 或者INNER JOIN | 用比较运算符比较要连接的列的值的连接,不匹配的行不会被显示 |
全外连接 | FULL JOIN | 所有的值都会进行显示,但是不匹配的会表示为NULL |
左外连接 | LEFT JOIN | 左表所有行列都显示,但右表不匹配的会表示为NULL |
右外连接 | RIGHT JOIN | 右表所有行列都显示,但左表不匹配的会表示为NULL |
下面以两表连接查询举例说明join的用法,查询学生的科目成绩,需要连接成绩表与学生表。
-- =========联表查询========= -- 1.先确定该查询需要用到哪些表 -- 2.确定使用哪种连接查询,找出两张表中的共同属性 -- 加入某课程的同学(学号、姓名、课程号、分数) -- ======inner join======= SELECT sc.studentNo,studentName,subjectNo,studentScore FROM student AS st INNER JOIN score AS sc WHERE st.studentNo = sc.studentNo -- =======left join======= SELECT sc.studentNo,studentName,subjectNo,studentScore FROM student AS st LEFT JOIN score AS sc ON st.studentNo = sc.studentNo -- =======right join======= SELECT sc.studentNo,studentName,subjectNo,studentScore FROM student AS st RIGHT JOIN score AS sc ON st.studentNo = sc.studentNo -- 查询缺考的同学 SELECT sc.studentNo,studentName,subjectNo,studentScore FROM student AS st RIGHT JOIN score AS sc ON st.studentNo = sc.studentNo WHERE studentScore IS NULL
这里使用三表连接查询,连接了学生表、课程表、分数表
-- ==========三表连接========== -- 学生表、课程表、分数表 -- 查询参加考试的同学的信息 SELECT st.studentNo,studentName,subjectName,studentScore FROM student AS st RIGHT JOIN score AS sc ON st.studentNo = sc.studentNo INNER JOIN `subject` AS su ON sc.subjectNo = su.subjectNo
二、自连接
同一张表,自己和自己连接,它的左表(父表)和右表(子表)都是自己。
以上表为例,每一个产品都以一个自己的id,并且还有一个parent_id。此时我们进行以下操作:查询父类对应的子类关系
-- 查询父子信息 SELECT f.cate_name AS father,s.cate_name AS son FROM tdb_cates AS f JOIN tdb_cates AS s WHERE f.id = s.parent_id