美文网首页
2018-10-26多表关联&嵌套

2018-10-26多表关联&嵌套

作者: 凡星点点5 | 来源:发表于2018-10-29 18:28 被阅读0次

    一、多表关联

    两表关联必须得有一个关联字段

    • 14245353-d2b14f4a1941f56b.png

      下图中的 cst_id 为 us 和 cu 里面的共同关联字段

    关联方法

    1. where
    • 第一步 拿两表数据做笛卡尔乘积
    • 第二步 根据where条件进行筛选


      14245353-ce69b5417f6685e2.png
    1. join
    2. 原理
    • 第一步 先用on条件进行数据筛选
    • 第二步 满足条件的显示,不满足条件的丢弃


      14245353-b94521c5accf8bf4.png
    1. 内连接
    • 只显示满足条件的数据 用 join 或者 inner join 进行连接


      14245353-67a3b5c0a639bb66.png
    14245353-689090322340c7ce.png
    • 格式
      select * from 表1 join 表2 on 连接条件

    3. 左连接 left join

    左表为主表,左表中所有数据都显示,右表中只显示满足条件的数据,如若右表没有数据,则用null表示。


    14245353-d4fd1c7af619c1a0.png

    格式

    • select * from 表1 left join 表2 on 连接条件
    1. 右连接 right join
      右表为主表,右表中所有数据都显示,左表中只显示满足条件的数据,如若左表没有数据,则用null表示


      14245353-aaba22bfb2d58c33.png
      14245353-447976955158ec07.png

      格式

    • select * from 表1 right join 表2 on 连接条件

    二、嵌套

    14245353-4d0112e8ff2d73ab.png

    21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
    SELECT * FROM scoresWHERE degree>(SELECT MAX(degree) FROM scores WHERE sno='109')AND cno='3-105';
    22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
    SELECT sbirthday FROM students WHERE sno='108';
    SELECT sno,sname,sbirthday FROM students WHERE sbirthday =(SELECT sbirthday FROM students WHERE sno='108');
    23、查询“张旭“教师任课的学生成绩。
    SELECT tno FROM teachers WHERE tname ='张旭'; -- 根据姓名查找tno
    SELECT cno FROM coursesWHERE tno=(SELECT tno FROM teachers WHERE tname ='张旭'); -- 根据上一步的 tno 查找 cno
    SELECT degree FROM scores WHERE cno = (SELECT cno FROM coursesWHERE tno=(SELECT tno FROM teachers WHERE tname ='张旭')); -- 根据上一步的cno展示degree

    14245353-41928340d95741d1.png

    相关文章

      网友评论

          本文标题:2018-10-26多表关联&嵌套

          本文链接:https://www.haomeiwen.com/subject/xohitqtx.html