MySQL数据查询SQL-DQL
语法格式
select 字段列表|* from 表名
[where 搜索条件]
[group by 分组字段 [having 分组条件]]
[order by 排序字段 排序规则]
[limit 分页参数]
查询语句概括说明
子句 | 说明 | 是否必须 |
---|---|---|
select | 要返回的列或表达式,字段列表 | 是 |
from | 查询的数据表 | 需要在表中查询时 |
where | 数据行的过滤 | 否 |
group by | 分组 | 仅在分组聚合计算时 |
having | 分组后的数据过滤 | 否 |
order by | 输出排序 | 否 |
limit | 要提取的结果行数 | 否 |
一、基础查询
-- 查询表中所有列 所有数据
select * from student;
-- 指定字段列表进行查询
select id,name,phone from student;
二、条件查询
- 可以在where子句中指定任何条件
- 可以使用 and 或者 or 指定一个或多个条件
- where条件也可以运用在update和delete语句的后面
- where子句类似程序语言中if条件,根据mysql表中的字段值来进行数据的过滤
-- 查询 student 表中 age > 22的数据
SELECT * FROM student WHERE age > 18;
-- 查询 student 表中 name=某个条件值 的数据
SELECT * FROM student WHERE name = '王五';
-- 查询 student 表中 年龄在22到25之间的数据
SELECT * FROM student WHERE age >= 22 and age <= 25;
SELECT * FROM student WHERE age between 22 AND 25;
-- 查询 student 表中 年龄不在22到25之间的数据
SELECT * FROM student WHERE age < 22 OR age > 25;
SELECT * FROM student WHERE age NOT BETWEEN 22 AND 25;
-- 查询 student 表中 年龄在22到25之间的女生信息
SELECT * FROM student WHERE age >= 22 AND age <= 25 AND sex = '女';
2.1 AND 和 OR
要注意的是:当 AND
和 OR
一起使用时, sql会优先处理 AND
条件,如有需要应该使用括号来关联条件
2.2 LIKE 子句
可以只用LIKE语句进行模糊查询
-- 使用 % 模糊搜索。%代表任意个任意字符
-- 查询name字段中包含五的
SELECT * FROM student WHERE name LIKE '%五%';
-- 查询name字段中最后一个字符 为 五的
SELECT * FROM student WHERE name LIKE '%五';
-- 查询name字段中第一个字符 为 王 的
SELECT * FROM student WHERE name LIKE '王%';
-- 使用 _ 单个的下划线。表示一个任意字符,使用和%类似
-- 查询表中 name 字段为两个字符的数据
SELECT * FROM student WHERE name LIKE '__';
-- 查询 name 字段最后为五,的两个字符的数据
SELECT * FROM student WHERE name LIKE '_五';
要注意的是:where子句中的like在使用%或者_进行模糊搜索时,效率不高,使用时注意:
尽可能的不去使用%或者_,如果需要使用,也尽可能不要把通配符放在开头处
三、 Mysql 统计函数(聚合函数)
函数 | 说明 |
---|---|
max() | 返回查询列中的最大值 |
min() | 返回查询列中的最小值 |
count() | 用来计算表中记录的个数或者列中值的个数,计算内容由SELECT语句指定。当单行时,不计算空值NULL |
sum() | 用于对数据求和,返回选取结果集中所有值的总和。 |
avg() | 计算一列中数据值的平均值。 |
-- 计算 users 表中 最大年龄,最小年龄,年龄和及平均年龄
SELECT max(age) AS max_age,min(age) AS min_age,sum(age) AS sum_age,avg(age) AS avg_age FROM student;
-- 统计 users 表中的数据量
SELECT COUNT(*) FROM users;
聚合函数除了以上简单的使用意外,通常情况下都是配合着分组进行数据的统计和计算
四、Group BY 分组
group by 语句根据一个或多个列对结果集进行分组。一般情况下,是用与数据的统计或计算,配合聚合函数使用
-- 统计 student 表中 男女生人数,
-- 很明显按照上面的需要,可以写出两个语句进行分别统计
SELECT COUNT(*) FROM student WHERE sex = '女';
SELECT COUNT(*) FROM student WHERE sex = '男';
-- 可以使用分组进行统计,更方便
SELECT sex,COUNT(*) FROM student GROUP BY sex;
-- 统计1班和2班的人数
SELECT classid,COUNT(*) FROM student GROUP BY classid;
-- 分别统计每个班级的男女生人数
SELECT classid,sex,COUNT(*) AS num FROM student GROUP BY classid,sex;
注意,在使用。group by
分组时,一般除了聚合函数,其它在select
后面出现的字段列都需要出现在grouop by
后面
4.1 Having 子句
having是在分组聚合计算后,对结果再一次进行过滤,类似于where,where过滤的是行数据,having过滤的是分组数据
五、Order by 排序
我们在mysql中使用select的语句查询的数据结果是根据数据在底层文件的结构来排序的, 首先不要依赖默认的排序,另外在需要排序时要使用orderby对返回的结果进行排序 Asc 升序,默认 desc降序
-- 按照年龄对结果进行排序,从大到小
SELECT * FROM users ORDER BY age DESC;
-- 从小到大排序 asc 默认就是。可以不写
SELECT * FROM users ORDER BY age;
-- 也可以按照多个字段进行排序
SELECT * FROM users ORDER BY age,id; -- 先按照age进行排序,age相同情况下,按照id进行排序
SELECT * FROM users ORDER BY age,id DESC;
六、Limit 数据分页
- limit n 提取n条数据
- limit m,n 跳过m跳数据,提取n条数据
-- 查询users表中的数据,只要3条
SELECT * FROM users LIMIT 3;
-- 跳过前4条数据,再取3条数据
SELECT * FROM users LIMIT 4,3;
-- limit一般应用在数据分页上面
-- 例如每页显示10条数据,第三页的 limit应该怎么写? 思考
--第一页
LIMIT 0,10
--第二页
LIMIT 10,10
--第三页
LIMIT 20,10
--第四页
LIMIT 30,10
-- 提取 user表中 年龄最大的三个用户数据 怎么查询?
SELECT * FROM users ORDER BY age DESC LIMIT 3;
6.1 分页查询的使用
与前端页面交互就是,前端页面传入页数,然后,页数也就是limit
的第一个参数page
,每页行数就是limit
的第二个参数row
SELECT * FROM users LIMIT page,row;