有些业务复杂的时候,在数据层会涉及到几张数据表联查的情况,最近也是在工作中经常会遇到这一部分的内容,所以特此总结一下。
建表语句
CREATE TABLE userser(NAME VARCHAR(20),sex VARCHAR(20)); INSERT INTO userer values ('张三','男'); INSERT INTO userser values ('李四','男'); INSERT INTO userser values ('王五','男'); INSERT INTO userser values ('赵柳','女'); CREATE TABLE student(NAME VARCHAR(20),sex VARCHAR(20)); INSERT INTO students values ('张三','男'); INSERT INTO students values ('李四','男'); INSERT INTO students VALUES ('莉莉','女'); INSERT INTO students VALUES ('张柳','女');
内连接 inner join
代表的数据查询之后结果,就是把两张表中都有的数据筛选出来,例如根据建表语句,筛选表userser和student中姓名相同的数据。
SELECT u.name 用户姓名,u.sex 用户性别,stu.name 学生姓名,stu.sex 学生性别 FROM u inner JOIN students stu ON u.name = stu.name
外连接 out join
1、left join
SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu left JOIN userer u ON u.name = stu.name
2、right join
与左连接基本一致,不过是以右侧表为主。
SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu right JOIN userer u ON u.name = stu.name
3、full join
其实就是左连接和右连接的集合,在连接过程中不存在的数据填充为空
SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu full JOIN userer u ON u.name = stu.name
内外连接中on和where的区别
1、inner join ...on 和 where
一样没有区别。
SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu,userer u WHERE u.name = stu.nameinner join...on 与where语句达到的效果一致。
2、外连接中on和where的区别
SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu LEFT JOIN userer u ON u.name = stu.name WHERE u.sex='男'; SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu LEFT JOIN userer u ON u.name = stu.name and u.sex='男'
原因:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
总结
数据库方面的知识还是必须的多用多练才能熟悉运用。持续学习。。。