zoukankan      html  css  js  c++  java
  • 内连接、外连接、自然连接

    一. 前言:

    通常在项目中对表的查询都是关联多张表,多表查询就涉及到sql的内连接、外连接和自连接查询。本篇文章将简单的介绍这些sql连接的使用,希望对大家有所帮助。


    二. 数据准备:

    先准备两张表:

    1. 学生表:student

    select * from student;


    2. 教师表:teacher

    select * from teacher;


    三. 关联查询:

    1. 内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]

    第一种写法:(只使用where)
    select t.teacher_name, s.student_name from teacher t,student s where t.id = s.teacher_id;

    第二种写法:(join .. on.. )
    select t.teacher_name, s.student_name from teacher t join student s on t.id = s.teacher_id;

    第三种写法:(inner join .. on.. 
    select t.teacher_name, s.student_name from teacher t inner join student s on t.id = s.teacher_id;



    2. 外连接

    外连接有三种方式:左连接,右连接和全连接。

    2.1 左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示。[x left [outer] join y on...

    第一种写法:(left join .. on ..)

    select t.teacher_name, s.student_name from teacher t left join student s on t.id = s.teacher_id;

    第二种写法:(left outer join .. on ..)

    select t.teacher_name, s.student_name from teacher t left outer join student s on t.id = s.teacher_id;

    第三种写法:"(+)" 所在位置的另一侧为连接的方向

    select t.teacher_name, s.student_name from teacher t, student s where t.id = s.teacher_id(+);



    2.2 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充。[x right [outer] join y on...]

    第一种写法:()

    select t.teacher_name, s.student_name from teacher t right join student s on t.id = s.teacher_id;

    第二种写法:

    select t.teacher_name, s.student_name from teacher t right outer join student s on t.id = s.teacher_id;

    第三种写法:"(+)" 所在位置的另一侧为连接的方向

    select t.teacher_name, s.student_name from teacher t, student s where t.id(+) = s.teacher_id;



    2.3 全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)

    第一种写法:(full join .. on ..)

    select t.teacher_name, s.student_name from teacher t full join student s on t.id = s.teacher_id;

    第二种写法:(full outer join .. on)

    select t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;



    3. 自连接

    自连接,连接的两个表都是同一个表,同样可以由内连接,外连接各种组合方式,按实际应用去组合。

    SELECT a.*, b.* FROM table_1 a,table_1 b WHERE a.[name] = b.[name] 

  • 相关阅读:
    [剑指offer] 7. 斐波那契数列
    [剑指offer] 6. 旋转数组的最小数字
    [剑指offer] 5. 用两个栈实现队列
    [剑指offer] 4. 重建二叉树
    [剑指offer] 3. 从头到尾打印链表
    vue.js从输入中的contenteditable元素获取innerhtml
    CSS3 ------- object-fit属性
    mouseenter和mouseover区别
    元素scroll系列属性
    淘宝flexible.js源码分析
  • 原文地址:https://www.cnblogs.com/buxingzhelyd/p/7853454.html
Copyright © 2011-2022 走看看