博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库查询连接(JOIN)用法
阅读量:4050 次
发布时间:2019-05-25

本文共 2360 字,大约阅读时间需要 7 分钟。

工作中写SQL语句时需要用到在多个表之间各查询点数据,然后组合,利用mybatis返回给一个bean对象。

现在把这几个连接总结下,方便下次用时参考。

JOIN

下面是学生表student:

id name sex age
001 aaa boy 10
002 bbb girl 10
003 ccc girl 10
004 ddd boy 10
005 eee girl 10
006 fff boy 10

下面是学生成绩表grades:

id math chinese english
001 90 94 95
002 91 97 93
003 92 98 96
004 93 92 91
007 94 90 90
008 95 95 96

现在,查询学生的数学成绩并对应姓名。可以先用不使用连接的SQL语句查询:

select     student.name,    grades.mathfrom    student,gradeswhere    student.id = grades.id 
1
2
3
4
5
6
7

这样的查询结果为:

name math
aaa 90
bbb 91
ccc 92
ddd 93

INNER JOIN

先看一下用INNER JOIN 的SQL语句查询上面的内容写法:

select    student.name,    grades.mathfrom    studentinner join    gradeson     student.id = grades.id 
1
2
3
4
5
6
7
8
9

INNER JOIN定义:在查询的几个表中,每个表都存在至少一个匹配时,INNER JOIN 关键字返回行。也就是共有部分,即,几个表的交集。

LEFT JOIN

把上面内连接(INNER JOIN)的关键字改为left join效果如何呢?

select    student.name,    grades.mathfrom    studentleft join    gradeson     student.id = grades.id 
1
2
3
4
5
6
7
8
9

下面是查询结果:

name math
aaa 90
bbb 91
ccc 92
ddd 93
eee
fff

会发现学生eee和fff没有成绩,原因是因为:

LEFT JOIN定义:关键字会从左表 (student) 那里返回所有的行,即使在右表 (grades) 中没有匹配的行。

RIGHT JOIN

有了LEFT JOIN,肯定会想,有没有RIGHT JOIN呢?答案是,有的。

select    student.name,    grades.mathfrom    studentright join    gradeson     student.id = grades.id 
1
2
3
4
5
6
7
8
9

下面是查询结果:

name math
aaa 90
bbb 91
ccc 92
ddd 93
94
95

会发现,多了两列没有名字,只有成绩的行。

RIGHT JOIN定义:关键字会右表 (grades) 那里返回所有的行,即使在左表 (student) 中没有匹配的行。

FULL JOIN

有了左连接,有了右连接,还有了内连接(交集),那有没有取并集的连接呢?答案是,有的。

select    student.name,    grades.mathfrom    studentfull join    gradeson     student.id = grades.id 
1
2
3
4
5
6
7
8
9
10

查询结果,想必也知道了:

name math
aaa 90
bbb 91
ccc 92
ddd 93
eee
fff
94
95

FULL JOIN定义:只要查询的某个表存在匹配,FULL JOIN 关键字就会返回行。

但是:MySQL中没有FULL JOIN,那么MySQL中要用FULL JOIN的效果怎么办呢?

UNION

用法:

select    student.name,    grades.mathfrom    studentleft join    gradeson     student.id = grades.idunionselect    student.name,    grades.mathfrom    studentright join    gradeson    student.id = grades.id 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

UNION定义:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

注意:
UNIONUNION ALL区别:UNION ALL会列出所有结果,有重复,UNION没有重复。

总结

  • INNER JOIN: 如果查询的表中都有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行
  • UNION:合并多个SELECT 语句的结果集

转载地址:http://rafci.baihongyu.com/

你可能感兴趣的文章
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
Android/Linux 内存监视
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>