查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过不同的查询方式,可以获得不同的数据。MySQL中是使用SELECT语句来查询数据的。
简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
查询所有字段 MySQL命令:
select * from students;
查询指定字段 MySQL命令:
select stuid from students;
在SELECT中除了书写列名,还可以书写常数。可以用于标记
常数的查询日期标记 MySQL命令:
select stuid,name,'2021-03-02' from students;
在使用DISTINCT 时需要注意:
在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
MySQL命令格式:
select distinct,name from students;
在SELECT查询语句中还可以使用加减乘除运算符。
查询学生10年后的年龄 MySQL命令:
select name,age+10 from students;
在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、 平均值等等。为此,MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。
聚合函数使用规则:
只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在WHERE子句中使用聚合函数是错误的。
接下来,我们学习常用聚合函数。
函数 | 作用 |
---|---|
sum() | 计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0 |
avg() | 计算指定列的平均值,如果指定列类型不是数值类型则计算结果为0 |
max() | 计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算 |
min() | 计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算 |
count() | 统计表中数据的行数或者统计指定列其值不为NULL的数据个数 |
MySQL语法格式:
select sum(字段名) from 数据表名;
查询该学生表中年纪的总和 MySQL命令:
select sum(age) from students;
MySQL语法格式:
select avg(字段名) from 数据表名;
查询该学生表中年纪的平均数 MySQL命令:
select avg(age) from students;
MySQL语法格式:
select max(字段名) from 数据表名;
查询学生表中年龄最大的学生 MySQL命令:
select max(age) from students;
MySQL语法格式:
select min(字段名) from 数据表名;
查询该学生表中年纪最小的学生 MySQL命令:
select min(age) from students;
MySQL语法格式:
select count(字段名)from 数据表名;
统计学生表中有多少人 MySQL命令:
select count(*) from students;
数据库中存有大量数据,我们可根据需求获取指定的数据。此时,我们可在查询语句中通过WHERE子句指定查询条件对查询结果进行过滤。
select * from 表名 where 条件;
条件 | 作用 |
---|---|
> | 大于 |
< | 小于 |
<> | 不等于 |
!= | 不等于 |
= | 等于 |
<= | 小于等于 |
>= | 大于等于 |
or | 或 |
and | 而且 |
is null | 内容为空 |
is not null | 内容不为空 |
like | 模糊查询 |
in | 判断某个字段是否存在给定的元组中 |
between...and... | 判断范围 |
查询年龄小于25的学生的信息 MySQL命令
select * from students where age<25;
N关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。
查询stuid为18和20的学生信息 MySQL命令:
select * from students where stuid in (18,20);
BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来
查询10到18岁的学生信息 MySQL命令:
select * from students where age between 10 and 18
在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串
查询name不为空值的学生信息 MySQL命令:
select * from students where name is not null;
%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串
_用于匹配一个任意的字符串。列入,字符串"ab_"匹配"ab"开始长度为3的字符串,如abc、abp等等..
查询学生姓名以r为开头的记录 MySQL命令:
select * from student where name like "r%";
查询学生表中年纪最大的3位同学 MySQL命令:
select * from students age order by desc limit 3;
统计学生男女人数 MySQL命令:
select count(gender),gender from students group by gender;
从表中査询出来的数据可能是无序的或者其排列顺序不是我们期望的。为此,我们可以使用ORDER BY对查询结果进行排序
升序排列 MySQL命令格式:
select 字段名 from 数据表名 order by stuid;
降序排列 MySQL命令格式:
select 字段名 from 数据表名 order by stuid desc;
去除重复的年龄[每个年龄只显示一条记录] MySQL命令格式:
select distinct age from students order by age ;
将两张表或多张表联合起来查询,这就是连接查询。
交叉连接返回的结果是被连接的两个表中所有数据行的笛卡儿积。
MySQL:语法格式:
select * from 表1,表2;
由于这个交叉连接查询在实际运用中没有任何意义,所以只做为了解即可
内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行,组合成新的 记录。也就是说在内连接查询中只有满足条件的记录才能出现在查询结果中。
MySQL:语法格式:
select * from 表1,表2 where 表1.字段 = 表2.字段;
查询学生所在班级 MySQL命令格式:
select * from students,classes where students.classID = classes.classID;
在使用内连接查询时我们发现:返回的结果只包含符合查询条件和连接条件的数据。但是,有时还需要在返回查询结果中不仅包含符合条件的数据,而且还包括左表、右表或两个表中的所有数据,此时我们就需要使用外连接查询。外连接又分为左(外)连接和右(外)连接。
MySQL 语法格式:
select * from 表1 left join 表2 on 条件;
LEFT JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录。
RIGHT JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。关键字左边的表被称为左表,关键字右边的表被称为右表.
左外连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在则在右表中显示为null。
查看班级下所有学生的老师姓名 MySQL命令:
select * from students left join teachers on students.teacherid = teachers.tid;
右外连接的结果包括RIGHT JOIN子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回null。
查看每个学生的姓名和班级名 MySQL命令:
select * from students right join classes on students.classid = classes.classid;
子查询是指一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中。在执行查询时,首先会执行子查询中的语句,再将返回的结果作为外层查询的过滤条件。
MySQL语法格式:
select 字段 from 表名 where 字段=(select classid from students where name = Sun dasheng)
查询所有年龄小于平均年龄的学生 MySQL:
select * from students where age<(select avg(age) from students);
对于MySQL,不推荐使用子查询,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
以上就是本期的全部内容,觉得有用的话可以点下关注,后续还会带来更多有用的知识。