当前位置:   article > 正文

SQL条件查询,分组查询,排序查询,分页查询_sql分组分条件查询

sql分组分条件查询

DQL查询操作(条件查询,分组查询,排序查询,分页查询)

一.查询语法

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段
HAVING
	分组后条件
ORDER BY
	排序字段
LIMIT
	分列限定;
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

二.基础查询

1.语法

SELECT 字段列表 FROM 表名;
  • 1

2.例子

SELECT * FROM 表名;
# 查询所有的数据
  • 1
  • 2

3.去重复记录

SELECT DISTINCT 字段列表 FROM 表名;
  • 1

4.起别名

AS
  • 1

三.条件查询

1.条件查询语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;
  • 1

2.条件

>           大于
<			小于
>=			大于等于
<=			小于等于
=			等于
<>  /  !=	不等于
BETWEEN...AND...在这份范围内都包括
IN (...)	多选一
LIKE		模糊查询(_单个任意字符  %多个任意字符)
IS NULL		是空
SI NOT NULL	不是空
AND / &&	且
OR / ||		和
NOT / !		非,不是
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.条件查询的使用举例

 # 条件查询
-- 查询id> 80的学员信息
SELECT *FROM employee WHERE id>80;

-- 	查询攻击力>= 100 的学员的信息
SELECT *FROM employee WHERE `攻击力`>=100;

-- 查询攻击力>=100 并且 小于等于120的学员的信息
# 写法越来越简单
SELECT *FROM employee WHERE `攻击力`>100 && `攻击力`<=120;
SELECT *FROM employee WHERE `攻击力`>100 AND `攻击力`<=120;
SELECT *FROM employee WHERE `攻击力` BETWEEN 100 AND 120;


-- 查询生日在1911-12-12 到 1940-10-10 之间的学员的信息

SELECT *FROM employee WHERE birthday >'1911-12-12' && birthday<'1940-10-10';
SELECT *FROM employee WHERE birthday BETWEEN '1911-12-12'AND'1940-10-10';

-- 查询攻击力等于100的学员的信息
SELECT *FROM employee WHERE `攻击力`=100;

-- 查询id 不等于100的学员的信息
SELECT *FROM employee WHERE id !=100;
SELECT *FROM employee WHERE id <>100;

-- 查询年龄id=100 或者 Salary =9000 或者攻击力等于101的学员
-- 注意||符号不推荐使用, 推荐使用or 来代替||
SELECT * FROM employee WHERE id = 100 ||Salary=9000||`攻击力`=101;
SELECT * FROM employee WHERE id =100 OR Salary =9000 OR `攻击力` =101;  

SELECT * FROM employee WHERE id IN (100,88,101);

-- 查询 image 为null 的学员
# 注意 null 值不能使用 =  != 来比较,需要使用 is   或 is not来进行比较
SELECT * FROM employee WHERE `resume` IS  NULL;


SELECT * FROM employee ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

4.模糊查询

-- 模糊查询
 /* 
 通配符:
   1. _  :代表单个任意字符
   2. %  :代表任意个数字符
 */
 -- 查询姓`温` 的学员的信息
 -- 查询第二个字是 `六` 的学员的信息
 -- 查询名字中包含 `云` 的学员的信息
 SELECT * FROM employee WHERE user_name LIKE '温%'; 
 SELECT * FROM employee WHERE user_name LIKE '_合%';
 SELECT * FROM employee WHERE user_name LIKE '%云%';   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

四.排序查询

当需要对某一列进行升序或者降序的排列时,可使用排序查询

1.语法

SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1,排序方式1;
  • 1

2.排序方式:

ASC :升序
DESC :降序
  • 1
  • 2

注:如果有多个排序条件时,当前一个条件值一样时,才会跟据第二个条件进行排序。

3.排序查询实例

-- 排序查询
 /*
 排序方式:
		ASC :升序排列(默认)
		DESC :降序排列
 */
-- 查询学生信息,按照id升序排列
SELECT * FROM employee ORDER BY id ASC;
-- 查询学生信息,按照Salary 进行降序排列
SELECT *FROM employee ORDER BY `Salary` DESC;
-- 查询学生信息 ,按照id进行升序排列,如果id相同则按照Salary升序排列
-- 当有多个条件时,只有当前一个条件相等时才会启用后一个条件
SELECT * FROM employee ORDER BY id ASC , `Salary`DESC;


 -- 分组查询
 # 首先创建表
 CREATE TABLE stud (
			id int,
			`name` VARCHAR(15),
			sex char(1),
			math int,
			English int);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

五.分组查询

1.其实就是把表中的数据按照某一个条件给其归类,然后会对某一类进行统计和分析。

2.语法

SELECT 字段列表 FROM 表名 WHERE 分组前条件限定 GROUP BY 分组字段名 HAVING 分组后条件过滤;
# 字段列表的要求:聚合函数或分组字段
  • 1
  • 2

3.分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

4.where与having的区别:

  • 执行时机不同:where是分组之前进行限定,不满足where条件就不会参组分组,而having是分组之后对结果进行过滤。
  • 可判断的条件不一样:where不能对聚合函数进行判断,而having可以。

5.执行顺序

  • where >聚合函数>having

6.实例演示

/*
 分组函数
				SELECT 字段列表 FROM 表名	WHERE 分组前条件限定 GROUP BY 分组后条件过滤 
 */
 -- 查询男同学女同学各自的数学平均分
 SELECT sex, AVG(math)FROM stud GROUP BY sex;
 -- 查询男同学女同学各自的数学平均分,以及各自人数
 SELECT sex, AVG(math),COUNT(*) FROM stud GROUP BY sex;
 -- 查询男同学和女同学各自的数学平均分,以及各自的人数,要求:分数低于70分的不参与分组
 SELECT sex, AVG(math),COUNT(*) FROM stud WHERE math>70 GROUP BY sex;
 -- 查询男同学和女同学各自的数学平均分,以及各自的人数,要求:分数低于70分的不参与分组,分组之后人数大于3
 SELECT sex, AVG(math),COUNT(*) FROM stud WHERE math>70 GROUP BY sex HAVING  COUNT(*)>3;
 
 -- 注:where 与having的区别:
 -- 1执行实际不一样,where是分组之前进行限定,不满足where条件就不参与分组,而having是分组之后对结果的过滤
 -- 2可判断的条件不一样:where不能对聚合函数进行判断,而having可以

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

六.分页查询

1.分页查询的语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
  • 1
  • 起始索引:从0开始
  • 计算公式:起始索引=(当前页码-1)*每页显示的条数

2.tips:

  • 分页查询limit是MySQL数据库的方言
  • Oracle分页查询使用的是rownumber
  • SQL server 分页查询使用的是 top

3.分页查询的实例

-- 分页查询
-- 从0开始查询,查询三条数据
SELECT * FROM stud LIMIT 0,3;
-- 每页显示三条数据,查询第一页数据
SELECT * FROM stud  LIMIT 0,3;
-- 每页显示3条数据,查询第二页的数据
SELECT *FROM stud LIMIT 3,3;
-- 每页显示3条数据,查询第三页的数据
SELECT * FROM stud LIMIT 6,3;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/410671
推荐阅读
相关标签
  

闽ICP备14008679号