内容梗概
本文将通过一组数据表及其数据查询案例,来讲解关于
(1)对表和字段使用别名
(2)联表查询
(3)聚合函数
(4)JOIN与,
(5)HAVING
(6)IN,EXISTS,NOT IN
(7)DISTINCT
(8)LIKE
...
数据准备
为了更好的实战和理解本文内容,笔者准备了如下五张表,分别是学生表,班级表,课程表,教师表以及成绩表:
t_x_student 学生表
t_x_class 班级表
t_x_course 课程表
t_x_teacher 教师表
t_x_score 成绩表
数据库的模型设计
模型设计遵循了三范式及设计原则,如下:
设计模型
案例需求
1、查询所有的课程的名称以及对应的任课老师姓名
2、查询平均成绩大于八十分的同学的姓名和平均成绩
3、查询没有报王佩佩老师课的学生姓名
4、查询选修自然课程和社会课程其中一门的学生姓名
5、查询挂科超过两门(包括两门)的学生姓名和班级
6、查询同时选了王佩佩老师所有课的学生班级和姓名
案例解答
(1)查询所有的课程的名称以及对应的任课老师姓名
分析:我们需要用到t_x_course和t_x_teacher表:既需要得到课程名称又要拿到老师姓名,然后看表结构模型,我们可以知道t_x_course有外键字段teacher_id指向t_x_teacher表t_id,那么我们就可以用内连接inner join将两张表拼接起来然后取其字段t_x_course.c_name和t_x_teacher.t_name即可得到我们想要的数据,SQL语句如下:
SELECT
cor.c_name AS course,
tea.t_name AS teacher
FROM
t_x_course cor
LEFT JOIN
t_x_teacher tea
ON cor.teacher_id = tea.t_id;
也可以直接进行多表查询
SELECT
cor.c_name AS course,
tea.t_name AS teacher
FROM
t_x_course cor,
t_x_teacher tea
WHERE
cor.teacher_id = tea.t_id;
知识点:
【使用别名】
使用别名是为了简化SQL或者语义化表名和字段名,本例中对查询结果使用了AS对cor.c_name创建了别名course,同样对标t_x_course使用空格创建了别名 cor,两种方式在使用上没有区别。
【联表查询 】
联表查询 有三种类别(1)INNER JOIN:表示两个表同时存在数据时返回该记录;(2)LEFT JOIN:左表存在数据即返回该记录,即便在ON条件下,右表无数据;(3)RIGHT JOIN:右表存在即返回该记录
(2)查询平均成绩大于八十分的同