当前位置:   article > 正文

MySQL(五) DQL详解_mysqldql

mysqldql

1.模糊查询: like

1._:代表单个任意字符
2.%:任意个数 的任意字符
select 列名 from 表名 like

2.排序

多字段,想看前面,依次排序

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

  • 1
  • 2
  • 3

3.聚合函数

MYSLQ 提供的一些方法,

count(列名),选主键列,*表示数据行的额所有字段。
max(),
min(),
sum(),
avg().
ifnull(),

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.分组查询

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;group后面可以跟多个字段,)
  • 1
  • 2
  • 3
  • 4

where :分组前的条件过滤,不能使用聚合函数,where关键字在group by 关键字的后面
having::select …where …group by …hanving

5. 分页查询

SELECT  
FROM
LIMIT
起始索引,查询条目数
起始索引=(当前页码-1)*每一页 的个数

```sql
-- 条件查询 =====================
/*
            select
	            列名1,
	            列名2,
	            ...
	            列名n
	        from
	            表名
	        where
	            条件
 */

-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;

-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;

-- 3.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 and age <= 30;
select * from stu where age >= 20 && age <= 30;
select * from stu where age between 20 and 30;

-- 4.查询入学日期在'1998-09-01' 到 '1999-09-01'  之间的学员信息
select * from stu where hire_date >= '1998-09-01' and hire_date <= '1999-09-01';

-- 5. 查询年龄等于18岁的学员信息
select * from stu where age = 18;
# select * from stu where age <> 18;

-- 6. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;

-- 7. 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22 ;
select * from stu where age = 18 || age = 20 || age = 22 ;
select * from stu where age in (18,20,22) ;

-- 8. 查询英语成绩为 null的学员信息
-- 注意: null值的比较不能使用 = != 。需要使用 is  is not
select * from stu where english = null; -- 错误
select * from stu where english is null;
select * from stu where english is not null;

-- 模糊查询 like =====================
/*
	通配符:
	 (1)_:代表单个任意字符
	 (2)%:代表任意个数字符
*/
-- 1. 查询姓'马'的学员信息
select * from stu where name like '马%';

-- 2. 查询第二个字是'花'的学员信息
select * from stu where name like '_花%';

-- 3. 查询名字中包含 '德' 的学员信息
select * from stu where name like '%德%';

  • 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
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
/*
	排序查询:
        select
            列名1,列名2,...
       from
            表名
       order by
            排序列名1 [排序规则],排序列名2 [排序规则],...

	    排序规则:
	        升序:ASC ,默认规则
            降序:DESC
*/
-- 1.查询学生信息,按照年龄升序排列
select * from stu order by age asc;
select * from stu order by age;

-- 2.查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;

-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;

-- 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照年龄升序排列
select * from stu order by math desc,english asc,age asc;
  • 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
/*
	聚合函数
	    什么是聚合函数
	        就是MySQL提供的一些方法,这些方法用于完成聚合操作
	        聚合操作:对一列的数据进行纵向计算

	    聚合函数的分类
            count(列名) 统计数量(一般选用不为null的列)
            max(列名) 最大值
            min(列名) 最小值
            sum(列名) 求和
            avg(列名) 平均值
*/
-- 统计班级一共有多少个学生
select count(name) c from stu;

-- 一般选用不为null的列,一般选用主键列
-- 使用*,表示数据行的所有字段,所有的字段不可能都为null
select count(english) c from stu;
select count(id) c from stu;
select count(*) c from stu;

-- 查询数学成绩的最高分
select max(math) from stu;

-- 查询数学成绩的最低分
select min(math) from stu;

-- 查询数学成绩的总分
select sum(math) from stu;

-- 查询数学成绩的平均分
select avg(math) from stu;

-- 查询英语成绩的最低分
-- ifnull:如果为null,就替换为指定的值
select name,ifnull(english,0) from stu;
select min(english) from stu;

-- 查询英语成绩的总分
select sum(english) from stu;
  • 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
  • 40
  • 41
/*
	分组查询
	   select
            列名1,列名2,...
       from
            表名
       group by
            分组列名1,分组列名2,...
       having
            条件
    注意:
	    1、分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
	    2、having和where的区别
	        where:分组前的条件过滤,不能使用聚合函数
	        having:分组后的条件过滤,having后面的条件中可以使用聚合函数

*/
-- 1. 查询男同学和女同学各自的数学平均分
select sex,avg(math) from stu group by sex;

-- 2. 查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) from stu group by sex;

-- 3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(*) from stu where math >=70 group by sex;

-- 4. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的。
select sex,avg(math),count(*) from stu where math >=70 group by sex;



  • 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
/*
	分页查询:
	    SELECT
	        字段列表
        FROM
	        表名
	    LIMIT
	        起始索引 , 查询条目数
			* 起始索引:从0开始

*/
-- 查询前三条
select * from stu limit 0,3;

-- 1. 从0开始查询,查询3条数据
select * from stu limit 0,3;
select * from stu limit 3;

-- 2. 每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
-- 3. 每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
-- 4. 每页显示3条数据,查询第3页数据
select * from stu limit 6,3;

-- 起始索引 = (当前页码 - 1) * 每页显示的条数

-- 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于等于2个的,按照人数升序排序,取第1条数据。
select sex,avg(math),count(*) from stu where math >= 70 group by sex having count(*) >= 2 order by count(*) asc limit 0,1;

select
       sex,avg(math),count(*)
from
     stu
where
      math >= 70
group by
         sex
having
       count(*) >= 2
order by
         count(*) asc
limit
    0,1;
  • 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
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/189183
推荐阅读
相关标签
  

闽ICP备14008679号