MySQL---DQL操作

2.5 DQL:查询表中的记录

select * from 表名; select [distinct] 列名,列名 from 表 where 条件

2.5.1 语法

select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定

2.5.2 基础查询

2.5.2.1 多字段的查询

select 字段名1,字段名2... from 表名;

  • 注意:

    • 如果查询所有字段,则可以使用*来替代字段列表。

2.5.2.2去除重复
  • distinct select distinct 列名 from 表名

2.5.2.3 计算列
  • 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

  • ifnull(表达式1,表达式2):null参与的运算,计算结果都为null

    • 表达式1:哪个字段需要判断是否为null

    • 如果该字段为null后的替换值。

2.5.2.4 起别名
  • as:as也可以省略

select 列名1 as 新名,列名2 as 新名 from 表名

#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示. select pname,price+10 from product;

2.5.2.5 条件查询
  1. where子句后跟条件

  2. 运算符

    • 、< 、<= 、>= 、= 、<>

    • BETWEEN...AND

    • IN( 集合)

    • LIKE:模糊查询

      • 占位符:

        • _:单个任意字符

        • %:多个任意字符

    • IS NULL

    • and 或 &&

    • or 或 ||

    • not 或 !

例子:

-- 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 && age <= 30; select * from stu where age >= 20 and age <= 30; select * from stu where age BETWEEN 20 and 30; -- 4.查询入学日期在'1998-09-01' 到 '1999-09-01' 之间的学员信息 select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';

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

-- 6. 查询年龄不等于18岁的学员信息 select * from stu where age != 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 in (18,20 ,22);

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

2.5.2.6 模糊查询(like)

通配符:(1):代表单个任意字符 (2)%:代表任意个数字符 —1.查询姓马同学信息: select *from stu where name like “马%”; —2.查询第二个字是花的学园信息: select *from stu where name like “花%”; —3.查询名字中包含德的学员信息: select *from stu where name like “%德%”;

2.5.2.7 排序查询
  • 语法: SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;

  • 排序方式:

    • ASC:升序排列(默认值)

    • DESC:降序排列 */ -- 1.查询学生信息,按照年龄升序排列 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` `DISTINCT` `price ``FROM` `product ``ORDER` `BY` `price ``DESC``;
2.5.2.8 聚合函数

(语法:select 聚合函数名 (列名)from 表名): count(统计数量)、max(最大值)、min(最小值)、sum(求和)、avg(平均值)

  • count:统计指定列不为NULL的记录行数;

  • sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

  • max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

  • min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

  • avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

注:null不参与聚合函数运算

eg:统计学生数量 select count(id) from stu;

2.5.2.9 分组函数

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤]…; */ select * from stu ; -- 1. 查询男同学和女同学各自的数学平均分 select sex, avg(math) from stu group by sex; -- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义 select name, 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 having count() > 2;

2.5.2.10 分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数 * 起始索引:从0开始*/ select * from stu ; -- 1. 从0开始查询,查询3条数据 select * from stu limit 0 , 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) * 每页显示的条数

2.5.2.11 分组查询

分组查询是指使用group by字句对查询信息进行分组。

格式:

SELECT` `字段1,字段2... ``FROM` `表名 ``GROUP` `BY``分组字段 ``HAVING` `分组条件;

分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

having与where的区别:

  • having是在分组后对数据进行过滤.

  • where是在分组前对数据进行过滤

  • having后面可以使用分组函数(统计函数)

  • where后面不可以使用分组函数。

#统计各个分类商品的个数
SELECT` `category_id ,``COUNT``(*) ``FROM` `product ``GROUP` `BY` `category_id ;
#统计各个分类商品的个数,且只显示个数大于1的信息
SELECT` `category_id ,``COUNT``(*) ``FROM` `product ``GROUP` `BY` `category_id ``HAVING` `COUNT``(*) > 1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值