数据库联表查询



一、Join

  • join的固定语法搭配是join(要连接的表)on,用于连接查询,而通常我们所使用的where是等值查询。

  • 多表连接分为:内连接、外连接,而外连接又包括左外连接右外连接全外连接


总结对比连接的特征如下:

操作关键字描述
内连接JOIN 或者INNER JOIN用比较运算符比较要连接的列的值的连接,不匹配的行不会被显示
全外连接FULL  JOIN所有的值都会进行显示,但是不匹配的会表示为NULL
左外连接LEFT JOIN

左表所有行列都显示,但右表不匹配的会表示为NULL

右外连接RIGHT JOIN右表所有行列都显示,但左表不匹配的会表示为NULL


  • 下面以两表连接查询举例说明join的用法,查询学生的科目成绩,需要连接成绩表与学生表。

  • SQL
  • -- =========联表查询=========-- 1.先确定该查询需要用到哪些表-- 2.确定使用哪种连接查询,找出两张表中的共同属性
     -- 加入某课程的同学(学号、姓名、课程号、分数)-- ======inner join======= 
     SELECT sc.studentNo,studentName,subjectNo,studentScore 
    FROM student AS stINNER JOIN score AS scWHERE st.studentNo = sc.studentNo 
     
    -- =======left join=======
    SELECT sc.studentNo,studentName,subjectNo,studentScore 
    FROM student AS stLEFT JOIN score AS scON st.studentNo = sc.studentNo 
     
    -- =======right join=======
    SELECT sc.studentNo,studentName,subjectNo,studentScore 
    FROM student AS stRIGHT JOIN score AS scON st.studentNo = sc.studentNo 
     
    -- 查询缺考的同学
    SELECT sc.studentNo,studentName,subjectNo,studentScore 
    FROM student AS stRIGHT JOIN score AS scON st.studentNo = sc.studentNo 
    WHERE studentScore IS NULL
  • 这里使用三表连接查询,连接了学生表、课程表、分数表

  • SQL
  • -- ==========三表连接==========-- 学生表、课程表、分数表-- 查询参加考试的同学的信息
    SELECT st.studentNo,studentName,subjectName,studentScoreFROM student AS stRIGHT JOIN score AS scON st.studentNo = sc.studentNo 
    INNER JOIN `subject` AS suON sc.subjectNo = su.subjectNo
  • 二、自连接

  • 同一张表,自己和自己连接,它的左表(父表)和右表(子表)都是自己。



以上表为例,每一个产品都以一个自己的id,并且还有一个parent_id。此时我们进行以下操作:查询父类对应的子类关系



SQL
-- 查询父子信息
SELECT f.cate_name AS father,s.cate_name AS son 
FROM tdb_cates AS fJOIN tdb_cates AS sWHERE f.id = s.parent_id





版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,可随意转载(O ^ ~ ^ O),别忘了标明转载来源即可。

评论

分享:

支付宝

微信