单表查询
第一章 简单查询
1.1、select语句
mysql 中查询数据的基本语句是select语句。
语法:
select [distinct] 字段1,字段2,字段3.....
from 表名
[where 条件表达式]
[group by 字段名]
[having 条件表达式]
[order by 字段名 [asc|desc]]
[limit 偏移量]
distinct:剔除重复数据
[]:可选项
[where 条件表达式] :用于条件判断
[group by 字段名] : 用于分组
[having 条件表达式] : 与 group by 连用,用于判断
[order by 字段名 [asc|desc]] : 排序,asc:默认的,升序;desc:降序
[limit ] : 分页
顺序按照上述语法执行。
1.2、查询所有字段
查询所有字段有两种方式:
-
通过 列出所有字段名
-
例如现在需要查询 book 表中数据
-
select bid,bname,author from book;
-
-
通过 *
-
同样查询 book 表中数据
-
select * from book;
-
一般情况下,除非需要使用表中的所有字段的数据,否则最好不要使用 * ,虽然可以节省输入查询语句的时间,但是由于获取的数据多,会导致降低查询效率
1.3、查询指定字段
语法:
select 需要的字段名 from 表名;
例查询 book 表中的书名 与 作者:
select author,bname from book;
第二章 条件查询
由于数据库中有大量的数据,很多时候需要根据需求来获取指定的数据,或者对查询的数据重新进行排列组合。这时就需要在查询语句中添加条件来筛选。
语法:
select 字段名.....
from 表名
where 条件判断
where 中的条件判断是指 select 语句中的查询条件,查询条件可以为如下示:
2.1、关系运算符
mysql 中常见的关系运算符如下:
关系运算符 | 说明 | 关系运算符 | 说明 |
---|---|---|---|
= | 等于 | <= | 小于等于 |
<> | 不等于 | >= | 大于等于 |
!= | 不等于 | > | 大于 |
< | 小于 |
其中 <>
与 !=
是等价的.
案例操作:
#查询 sid 为 4 的学生姓名
select sname from score where sid=4;
其余操作类似。
2.2、in关键字
用于判断某个字段的值是否在指定集合中
语法:
select 字段 from 表名 where 字段名 [not] In (值1,值2,值3.....)
[not] :可选参数,表示不在
案例操作:查询 sid 为 1,2,4 的学生姓名
select sid,sname from score where sid in (1,2,4);
2.3、between and
between and 用于判断某个字段是否在指定范围内
语法:
select *|字段
from 表
where 字段名 [not] between 值1 and 值2
值1:起始值
值2:结束值
相当于:[值1,值2]
案例操作:查询 sid 在[2,5]的学生信息
select sid,sname from score where sid between 2 and 5;
2.4、空值查询
在数据库中,有些列可能为空值,空值不是0,也不是空字符串,在 mysql 使用 is null 来判断字段是否为空
语法:
select *|字段
from 表
where 字段名 is [not] null;
2.5、distinct
用于剔除查询结果中重复数据
语法:
select distinct 字段
from
where
当 distinct 后面字段有多个时,只有字段值相同,才会被认为是重复的记录。也就是说在多字段下,字段中需要有重复值,disinct才会生效。
2.6、like
模糊查询。
当需要对字符串进行不确定查询使用
语法:
select *|字段
from 表
where 字段名 [not] like '匹配字符串';
匹配字符串可通过通配符来使用:
%:可以匹配任意多个字符
_ :只能匹配一个字符
例如:查询姓名含有 a 的员工信息
select * from emp where name like '%a%';
查询姓名第二个为 a 的员工
select * from emp where name like '%_a%';
2.7、and 多条件查询
用于连接两个查询条件
语法:
select *|字段
from 表
where 条件表达式 1 and 条件表达式2 [and ...];
例如:查询 sid 小于 4 且 成绩为 大于 60的学生
select sname
from score
where sid < 4 and grade > 60;
2.8、or 多条件查询
作用与 and 差不多,只不过条件满足其一即可
语法:
select *|字段
from 表
where 条件表达式 1 or 条件表达式2 [or ...];
例如:查询学生表中名字以 h 开头,或者性别为 女 或者 成绩为 100 的学生
select id,name,grade,gender
from student
where name like 'h%' or gender = '女' or grade=100;
当 or 与 and 一起连用时,因为 and 优先级大于 or,所以会先 and 再 or
第三章 高级查询
3.1、聚合函数
常见聚集函数有:
函数名称 | 作用 | 函数名称 | 作用 |
---|---|---|---|
COUNT() | 返回总行数 | MAX() | 返回某列的最大值 |
SUM() | 返回某列的和 | MIN() | 返回某列的最小值 |
AVG() | 返回某列的平均值 |
可与 select 查询结合使用
3.1.1、count()
可用来统计记录的条数
语法:
select count( * | 某列) from 表名;
对于列我们可以通过 * 来代替所有列。
3.1.2、SUM()
求出表中某字段所有值的总和。
语法:
select sum(字段名) from 表名;
其余操作与上述相同。
3.2、排序
当对表中的数据查询后结果可能是无序的或排序不是需求的理想结果,这时可使用 order by
来进行查询结果排序。
语法:
select 字段名1,字段名2.........
from 表名
order by 字段1 [ASC|DESC],字段2 [asc|desc].......
asc:默认的,升序
desc:降序
3.3、分组查询
在对表进行统计时。需要按照一定的类别来进行统计,这时可通过 group by
来进行分组.
语法:
select 字段名1,字段名2.........
from 表名
group by 字段1 ,字段2 .......
[having 条件判断]
having:对分组后的内容进行过滤,常与 group by
一起使用
如果 查询字段出现在 group by
后,却没有包含在聚合函数中,该字段显示的是分组后的第一条记录的值,这样可能导致查询结果不符合预期。
3.4、limit
查询数据时,可能会返回多条记录,而用户需求可能只有其中部分,比如分页功能,每页显示 10 条信息,每次查询就只需查询出 10条记录即可。
这时可使用 limit
来实现上述功能.
语法:
select 字段名1,字段名2.........
from 表名
limit 偏移量 记录数;
偏移量:可选项,不指定,则默认为 0,当其值为 0 时:表示从查询结果中的第一条记录开始,当其值为 1 :表示从查询结果中第二条开始,以此类推。
记录数:表示返回查询的条数
第四章 别名
4.1、表别名
语法:
select 字段名 from 表名 [as] 别名;
4.2、字段别名
语法:
select 字段名 [as] 别名 from 表名 [as] 别名;