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

先建立2个表:学生表和教师表mysql

 

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.外链接:外链接有三种方式:左链接,右链接和全链接

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

第一种写法: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

 

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

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

 

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

第一种写法:(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 .. onselect 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的.net


若是直接查询2张表,将获得一个笛卡尔积,两个表的乘积 select * from teacher,student;code

关于笛卡尔积的说明,请参考博客:http://www.javashuo.com/article/p-dragscqr-dq.html

blog

相关文章
相关标签/搜索