美文网首页
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