sql的多表联查有点忘了,搞个例子记录一下,以后再忘来看看。
一、内连接
student表:
name | collegeid |
张三 | 11 |
李四 |
college表:
collegeid | collegename |
11 | 清华 |
北大 |
内连接:
select name,college.collegename from student inner join college on student.collegeid=college.collegeid;
结果是:
name | college |
张三 | 清华 |
二、外连接
1.左外连接:
select student.name,college.collegename from student left join college on student.collegeid = college.collegeid;
结果是:
name | college |
张三 | 清华 |
李四 | null |
左外连接的意思就是以左表为准,把左表的所有name都查询出来,而不管它的外键collegeid有没有值
2.右外连接
select student.name,college.collegename from student right join college on student.collegeid = college.collegeid;
结果是:
name | college |
张三 | 清华 |
null | 北大 |
同左外连接的道理,右外连接意思就是以右表为准,把右表的所有college都查询出来,而不管它的外键collegeid有没有值
另附自连接:
自连接和内连接原理很相似,只不过是把一张表当成两张表来查询,查询某字段的相同记录的集合。
student表:
name | collegeid |
张三 | 11 |
李四 | 22 |
刘五 | 11 |
sql:
select distinct a.name,a.collegeid from student a,student s where a.collegeid=s.collegeid and a.name <> s.name;
结果是
name | collegeid |
张三 | 11 |
刘五 | 11 |