文章目录
插入数据
通过前两节,我们已经完成了student、teacher以及classes表的创建,并完成了三个表之间的关系创建,在正式开始本节内容之前,我们先向这三个表中利用第一节的知识插入一部分数据,展示如下:
classes表,包含四个班级,及其对应的人数和班主任。
student表,包含学生id、姓名、性别、年龄、班级以及班主任。
teacher表包含每位老师的id、姓名、教授课程、性别、年龄以及管理的班级。
单个表的查询功能
以teacher为例子,取得所有老师的数据就不展示了,之前一直在用。
按年龄低到高取得老师资料
select *
from `teacher`
order by `age`;
在age后面加上desc,则表示按照年龄从高到低取得老师资料。
取得年纪最大的老师
select *
from `teacher`
order by `age` desc
limit 1;
limit后面表示想要取得的数据项,1就表示取得第一项,2的话就是表示取得前两项。
取得所有老师的名字
select `name` from `teacher`;
select distinct `course` from `teacher`;
第一行实现题目功能,第二行表示,取得所有老师所教授的课程,只不过在select后多加一个distinct 参数,具体表示什么,这儿先卖个关子,大家可自行尝试下。
aggregate functions 聚合函数
在MySQL中,聚合函数(Aggregate Functions)是一组用于计算和汇总数据的函数,这些函数通常用于在SELECT语句中的查询中。
以下是一些常见的聚合函数:
COUNT:计算指定列中行的数量(或返回指定表的行数)。
SUM:计算指定列的值的总和。
AVG:计算指定列的值的平均值。
MAX:返回指定列的最大值。
MIN:返回指定列的最小值。
下面展示两个的用法:
取得所有年纪大于40岁老师的人数
select count(*)
from `teacher`
where `age`>40;
取得年龄最小的老师的年纪
select min(`age`) from `teacher`;
通配符(Wildcards)
在MySQL中,通配符(Wildcards)是用于模糊匹配的特殊字符,它们可以帮助我们在查询中匹配不完全的值。MySQL支持以下两种通配符:
百分号(%):匹配任意数量的字符(包括零个字符)。
下划线(_):匹配单个字符。
以下是一些示例,演示如何使用通配符:
找到姓周的老师
select *
from `teacher`
where `name` like '艾%';
找到教授高三的老师
select *
from `teacher`
where `manage_class` like '_三__';
多个表之间的操作
union 联集
MySQL中的UNION是用于将两个或多个SELECT语句的结果集合并成一个结果集的操作符。
UNION操作符必须满足以下条件:
1.SELECT语句中的列数必须相同
2.列的数据类型必须兼容,或者可以通过隐式转换变成兼容类型
3.结果集中的列名来自于第一个SELECT语句中的列名
UNION操作符还可以与其他操作符组合使用,例如UNION ALL、INTERSECT和EXCEPT/MINUS。
UNION ALL: 将结果集中的重复行也包含在内。
INTERSECT:返回两个SELECT语句的结果集的交集。
EXCEPT/MINUS:返回第一个SELECT语句的结果集中除去第二个SELECT语句的结果集中的行后的剩余行。
需要注意的是,UNION操作符会对结果集进行排序和去重的操作,因此可能会影响查询性能。如果确保结果集不需要排序和去重,可以使用UNION ALL操作符代替UNION。
获取所有学生和老师的姓名信息
select `name`
from `student`
union
select `name`
from `teacher`;
join 连接
MySQL中的JOIN是用于将两个或多个表中的行基于一个共同的列连接起来的操作符。JOIN操作通常使用在多个表之间进行关联查询时,可以根据表之间的关系将多个表中的数据联合起来查询。
MySQL中支持以下类型的JOIN操作:
INNER JOIN(内连接):返回两个表中匹配的行
LEFT JOIN(左连接):返回左表中所有的行,以及右表中匹配的行(如果没有匹配,则用NULL填充右表的列)
RIGHT JOIN(右连接):返回右表中所有的行,以及左表中匹配的行(如果没有匹配,则用NULL填充左表的列)
FULL OUTER JOIN(全外连接):返回两个表中所有的行,如果某个表中没有匹配的行,则用NULL填充对应的列
JOIN操作通常需要指定连接条件,也就是表之间进行连接的列。连接条件可以是相等条件,也可以是其他条件,例如大于、小于、LIKE等。连接条件通常在ON子句中指定。
查看每位学生对应的班级人数
select `student_id`,`name`,`num_people`
from `student` left join `classes`
on `classes`.`class_id`=`student`.`class`;
subquery子查询
子查询,也称为内部查询或嵌套查询,是在 SQL 查询中嵌入的一个查询语句。子查询可以用作其他查询中的一部分,通常用于限制结果集、过滤数据或用于比较、计算和联接操作。
MySQL 支持子查询,也称为嵌套查询,允许在 SELECT、UPDATE、INSERT、DELETE、WHERE 等语句中嵌套一个完整的查询语句作为子查询。
例如:找出学生小红的班主任教授的课程是什么
select `course`
from `teacher`
where `manage_class`=(
select `class`
from `student`
where `name`='小红'
);
总结
有关数据查询的操作比较多,也比较零散,这里总结的可能有些许不全,不过,对于基础学习,应该差不多够用,对与mysql的学习也算入门了。
其次,我这里建立的school数据库也存在些许问题,关系也不太明朗,目的是通过其记录所学知识,希望广大初学者在参考我这三篇文章时,能够自己建立独立数据库,将我的这些总结只做一个参考。
至此,对于mysql的基础入门学习就总结到这里。