多表联合查询:join的用法
来源:互联网 发布:幸福狐狸淘宝是真的吗 编辑:程序博客网 时间:2024/05/22 05:30
前提条件:假设有两个表,一个是学生表,一个是学生成绩表。
表的数据有:
一、内连接-inner join :
1.概念:内联接是用比较运算符比较要联接列的值的联接
2.内连接:join 或 inner join
3.sql语句
select * from table1 join table2 on table1.id=table2.id
最常见的连接查询可能是这样,查出学生的名字和成绩:
select s.name,m.mark from student s,mark m where s.id=m.studentid
上面就是我们最常见的inner join,即内连接,把符合student.id=mark.studentid 条件的元组才选出来,也可以写成:
select s.name,m.mark from student s inner join mark m on s.id=m.studentid
符合条件的只有两条结果,查出结果为:
二、左连接:left join 或 left outer join
1.左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
2.sql语句
select * from table1 left join table2 on table1.id=table2.id
左连接是把左边的表的元组全部选出来:
select s.name,m.mark from student s left join mark m on s.id=m.studentid
上面语句就是把左边的表,即student表中的元组全部选出,尽管有些分数表是没数据的,也选了出来,选出的结果为:
三、右连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)sql语句
select * from table1 right join table2 on table1.id=table2.id
右连接就是把右边表的数据全部取出,不管左边的表是否有匹配的数据:
select s.name,m.mark from student s right join mark m on s.id=m.studentid
上面的语句就是把mark分数表的数据全部取出来,不管student表中是否有数据匹配,如下图所示:
四、完整外部联接:full join 或 full outer join
(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)sql语句
select * from table1 full join table2 on table1.id=table2.id
把左右两个表的数据都取出来,不管是否匹配:
select s.name,m.mark from student s full join mark m on s.id=m.studentid
如下图所示,学生表和成绩表的数据都取了出来:
比较常用的是第一种,内连接,而且是用这种写法:
select s.name,m.mark from student s,mark m where s.id=m.studentid
文章引用自:http://www.cnblogs.com/still-windows7/archive/2012/10/22/2734613.html
- 多表联合查询:join的用法
- sql语句的联合查询(join 用法)
- sql语句的联合查询(join 用法)
- mysql 联合查询 join 用法举例
- 00104 SQL查询进阶2:多表联合查询JOIN
- Hibernate的HQL,QBC 查询语言(包括多表联合查询join)
- Hibernate的HQL,QBC 查询语言(包括多表联合查询join)
- 多表联合查询(join、union等)
- 多表联合查询(join、union等)
- 多表联合查询(join、union等)
- 多表联合查询(join、union等)
- 多表联合查询(join、union等)
- 多表联合查询(join、union等)
- hadoop 联合查询 join
- ThinkPHP--多表查询之join和table的用法
- update 多表联合查询更新 right join+子查询+group分组
- LINQ,EF联合查询join
- sql联合查询inner join
- C++ 利用make_heap建立小根堆
- esp8266 相关
- bootstrap-table 分页的问题
- 25匹赛马得前三名问题求解
- 关于map函数总结
- 多表联合查询:join的用法
- 站点页面的TDK要有特色,就该这么设置
- Android工具类系列-HttpUtil
- 安装和使用Inforbright
- iOS--tableview单元格重用(单元格上创建控件情况下)
- 未能找到类型或命名空间名称“*”(是否缺少 using 指令或程序集引用?) 异常的解决
- 在Android环境中使用Valgrind工具进行内存错误检测
- c++感悟
- ES6箭头函数(arrow function)