• sql 三表左外链接的2种写法【原】


    初始化语句

    DROP TABLE student;
    CREATE TABLE student(ID VARCHAR(50) PRIMARY KEY, NAME VARCHAR(50));
    INSERT INTO student VALUES('1','bobo');
    INSERT INTO student VALUES('2','sisi');
    INSERT INTO student VALUES('3','gugu');
    INSERT INTO student VALUES('4','mimi');
    
    DROP TABLE room;
    CREATE TABLE room(room_id VARCHAR(50) PRIMARY KEY, student_id VARCHAR(50),room_type VARCHAR(50));
    TRUNCATE TABLE room;
    INSERT INTO room VALUES('r1','1','musicRoom');
    INSERT INTO room VALUES('r2','2','musicRoom');
    INSERT INTO room VALUES('r3','3','musicRoom');
    INSERT INTO room VALUES('r4','1','englishRoom');
    INSERT INTO room VALUES('r5','2','englishRoom');
    create INDEX r_student_id on room (STUDENT_ID);
    create INDEX room_type on room (ROOM_TYPE);
    SELECT * FROM room;
    
    DROP TABLE teacher;
    CREATE TABLE teacher(teacher_id VARCHAR(50) PRIMARY KEY, student_id VARCHAR(50),teacher_type VARCHAR(50));
    TRUNCATE TABLE teacher;
    INSERT INTO teacher VALUES('m1','1','musicTeacher');
    INSERT INTO teacher VALUES('m2','2','musicTeacher');
    INSERT INTO teacher VALUES('m3','1','englishTeacher');
    INSERT INTO teacher VALUES('m4','2','englishTeacher');
    INSERT INTO teacher VALUES('m5','3','englishTeacher');
    create index t_student_id on teacher (STUDENT_ID);
    create index teacher_type on teacher (TEACHER_TYPE);

    student表:

    ID

    NAME

    1

    bobo

    2

    sisi

    3

    gugu

    4

    mimi

     room表:

    ROOM_ID

    STUDENT_ID

    ROOM_TYPE

    r1

    1

    musicRoom

    r2

    2

    musicRoom

    r3

    3

    musicRoom

    r4

    1

    englishRoom

    r5

    2

    englishRoom

    teacher表:

    TEACHER_ID

    STUDENT_ID

    TEACHER_TYPE

    m1

    1

    musicTeacher

    m2

    2

    musicTeacher

    m3

    1

    englishTeacher

    m4

    2

    englishTeacher

    m5

    3

    englishTeacher

    左外连接sql语句一

    SELECT * FROM student s LEFT OUTER JOIN teacher t ON s.id = t.student_id LEFT OUTER JOIN room r ON s.id = r.student_id WHERE t.teacher_type = 'musicTeacher' AND r.room_type = 'musicRoom';

    左外连接sql语句二

    SELECT * FROM (SELECT* FROM student s LEFT OUTER JOIN teacher t ON s.id = t.student_id WHERE t.teacher_type = 'musicTeacher' ) t1 LEFT OUTER JOIN room r ON t1.id = r.student_id WHERE r.room_type = 'musicRoom';

    查询结果集如下:

    ID

    NAME

    ROOM_ID

    STUDENT_ID

    ROOM_TYPE

    TEACHER_ID

    STUDENT_ID

    TEACHER_TYPE

    1

    bobo

    r1

    1

    musicRoom

    m1

    1

    musicTeacher

    2

    sisi

    r2

    2

    musicRoom

    m2

    2

    musicTeacher

    两个左外连接sql语句性能没有差别

    .

  • 相关阅读:
    很多的技术招聘面试方式不务实-导致不仅难以招聘到人,而且严重损害公司形象
    技术工作者上升到思想,哲学层面也许更好
    程序员与架构师的区别
    (转载)创业型公司如何管理-吸引人才
    C#图片转成流,流转成图片,字节转图片,图片转字节的方法
    C# Linq获取两个List或数组的差集交集
    C# List排序,附加使用Linq排序
    C#Qrcode生成二维码支持中文,带图片,带文字
    C#判断本地文件,网络文件是否存在是否存在
    C#WebBrowser控件使用教程与技巧收集
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/7448550.html
Copyright © 2020-2023  润新知