在日常数据查询时,绝大多数情况是将表格关联起来进行查询的,而不仅仅是对一张表格的数据进行查询,在之前的例子中,学生表用于存储学生信息、课程表用于存储课程信息、成绩表用于存储成绩信息,比如查询某学生的成绩信息就可以关联学生表和成绩表进行查询。
常用的数据拼接有两种方法,一种是以行为单位纵向连接,另一种是以列为单位水平拼接,纵向连接使用的函数是UNION,水平拼接使用的函数是JOIN,下面一起来学习。
UNION纵向连接
首先学习的是UNION函数,如下有两张课程表,需要将这两张课程表连接为一张课程表,使用UNION函数。
课程1表
课程2表
SELECT * FROM course
UNION
SELECT * FROM course_1;
连接结果如上所示,需要注意的是,使用UNION,重复的数的会去重,如果将UNION换成UNION ALL,重复的数的会保留。
JOIN水平拼接
JOIN水平拼接常用的模式有INNER JOIN,LEFT JOIN和RIGHT JOIN三种,下面分别给出三种匹配模型的代码和结果。
INNER JOIN是内连接,在两张表中取公共列的部分进行连接,学生表和成绩表中学号Sid是公共列,取交集进行连接。
#INNER JOIN匹配查询
SELECT * FROM student as st
INNER JOIN score as sc
ON st.Sid=sc.Sid;
LEFT JOIN是左连接,以左边的表为基准,右边的表有左边的公共列部分则进行拼接,如果没有,则为Null,这里仍然以学生表和成绩表为例,以学生表为基准,按照公共列学号Sid匹配学生成绩。
# LEFT JOIN匹配查询
SELECT * FROM student as st
LEFT JOIN score as sc
ON st.Sid=sc.Sid;
RIGHT JOIN是右连接,以右边的表为基准,连接方法与左连接相对应,以学生表和成绩表为例,右连接以成绩表为基准,按照公共列学号Sid匹配学生信息。
# RIGHT JOIN匹配查询
SELECT * FROM score as sc
RIGHT JOIN student as st
ON sc.Sid=st.Sid;
ORDER BY排序
数据拼接后,可以对拼接的数据做一次排序,使用ORDER BY函数,默认是按照升序排列。
#数据升序排序
SELECT * FROM score
ORDER BY score;
如果使用降序排列,可以在字段后面加一个DESC,该函数可以对该字段降序排列。
#数据降序排序
SELECT * FROM score
ORDER BY score DESC;
有时候需要对字段进行自定义排序,比如课程号升序排列,学生成绩降序排列,可以分别对字段进行设置 。
#多列数据进行排序
SELECT * FROM score
ORDER BY Cid,score DESC;