SQL查询--内连接、外连接、自连接查询

比眉伴天荒 2023-10-12 08:02 140阅读 0赞

先创建2个表:学生表和教师表

1158674-20190828214715500-942897350.png 1158674-20190828214735569-188275876.png

1.内连接:

  1. 在每个表中找出符合条件的共有记录。[x inner join y on...]
  2. 第一种写法:只用where
  3. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t,student s WHERE t.ID=s.TEACHER_ID
  4. 第二种写法:使用 join..on..
  5. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t JOIN student s ON t.ID=s.TEACHER_ID
  6. 第三种写法:使用inner join .. on..
  7. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t INNER JOIN student s ON t.ID=s.TEACHER_ID

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

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

  1. 第一种写法:left join .. on ..
  2. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT JOIN student s ON t.ID=s.TEACHER_ID
  3. 第二种写法:left outer join .. on ..
  4. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t LEFT OUTER JOIN student s ON t.ID=s.TEACHER_ID

1158674-20190828215403394-843172733.png

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

  1. 第一种写法:right join .. on ..
  2. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT JOIN student s ON t.ID=s.TEACHER_ID
  3. 第二种写法:right outer join .. on ..
  4. SELECT t.TEACHER_NAME,s.STUDENT_NAME FROM teacher t RIGHT OUTER JOIN student s ON t.ID=s.TEACHER_ID

1158674-20190828215520682-1467773910.png

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

  1. 第一种写法:(full join .. on ..)
  2. select t.teacher_name, s.student_name from teacher t full join student s on t.id = s.teacher_id;
  3. 第二种写法:(full outer join .. on
  4. select t.teacher_name, s.student_name from teacher t full outer join student s on t.id = s.teacher_id;

注意:Oracle数据库支持full join,mysql是不支持full join的


如果直接查询2张表,将得到一个笛卡尔积,两个表的乘积 select * from teacher,student;

1158674-20190828220322513-1849837409.png

关于笛卡尔积的说明,请参考博客:https://blog.csdn.net/csdn_hklm/article/details/78394412

转载于:https://www.cnblogs.com/hanmk/p/11426747.html

发表评论

表情:
评论列表 (有 0 条评论,140人围观)

还没有评论,来说两句吧...

相关阅读