《MySQL入门到精通》(3)数据库中数据的查询语句(DQL)

查询数据(SELECT)(重点/掌握)

基本查询语句的语法

  • select * from 表名;—默认查询所有字段的数据
  • select 字段1,字段2,字段3 from 表名; —查询指定的字段的数据
  • DISTINCT —去除掉重复的关键字
  • 可以在查询的时候进行运算
    SELECT username,math+10,english+10,chinese+10 FROM stu;

用as的关键字,起别名查询

  • 查询语句可以使用as的关键字,起别名。
  1. 别名的真正的用法,采用的多表的查询,为了区分每张表,表起个别名。
  2. as的关键字可以省略不写,中间需要使用空格。
  3. 一般都是给表来起别名
    select s.username,s.math from stu s;
    select s.username,u.username from stu s.user u
  • 使用where的条件语句,进行查询条件的过滤。

练习

  1. 创建表做练习
    CREATE TABLE stu (
    id int(11) NOT NULL AUTO_INCREMENT,
    username varchar(20) DEFAULT NULL,
    math int(11) DEFAULT NULL,
    english int(11) DEFAULT NULL,
    chinese int(11) DEFAULT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    学生表中加入数据
    在这里插入图片描述
  2. 开始练习
  • 查询表中所有学生的信息;
    SELECT * FROM stu; —直接查询全部数据
    SELECT id,username,math,english,chinese FROM stu; —将全部字段查询
    在这里插入图片描述
  • 查询表中所有的姓名和对应的英语成绩
    SELECT username,english FROM stu;
    在这里插入图片描述
  • 过滤表中的重复数据
    select DISTINCT english from stu;
    只有一个97分
    在这里插入图片描述
  • 在所有学生的分数上加10分特长分
    SELECT username,math+10,english+10,chinese+10 FROM stu;
    在这里插入图片描述
  • 统计每个学生的总分
    SELECT username,(math+english+chinese) FROM stu;
    在这里插入图片描述
  • 使用别名表示学生总分数
    SELECT username,(math+english+chinese) AS t FROM stu;
    在这里插入图片描述
  • 查询姓名为美美的学生成绩
    SELECT * FROM stu WHERE username=‘美美’;
    在这里插入图片描述
  • 查询英语(English)成绩大于90分的同学
    SELECT username,english FROM stu WHERE english>90;
    在这里插入图片描述
  • 查询总分大于200的所有同学
    SELECT username,(math+english+chinese) FROM stu WHERE (math+english+chinese)>200;
    在这里插入图片描述
    也可以这样写
    SELECT * FROM stu WHERE (math+english+chinese)>200;
    在这里插入图片描述

where子句后可以使用的符号

常用的符号

  1. 常用的符号
  • ( * ) ( > ) ( < ) ( <= ) ( >= ) ( = ) ( <>/不等于 )
  • in —代表的范围
    select * from stu where math=88; —查询一条数据,条件是数学=88
    select * from stu where math in(18,88,90); —查询的结果可能就是多条数据,需要查询的字段值需要在in值的范围内
    在这里插入图片描述

模糊查询(like)

  • like —模糊查询
    like关键字的值的写法:
    select * from stu where username like ‘张_’; —使用 ( _ ) 占位符,结果是张飞、张三、张X、张翼德(不符合)
    select * from stu where username like ‘张%’ — 使用 ( % ) 占位符,结果是姓张的,张飞 张三 张翼德 只要是姓张的都可以。
    like ‘%张’; —结果:以张结尾的,飞张 医德张 解放路时间分类张
    like ‘%张%’ — 结果:只要包含张就可以,张 张飞 医德张 反对法张零九年
    总结like关键字
    条件需要使用单引导
    需要使用占位符
    ( _ )—代表的是一个位置
    ( % ) —代表的是多个位置
  • and —与(同时满足两个条件)
  • or —或 (满足一个条件即可)
  • not —非 (不满足这个条件)
  • between —and —使用链接

练习

  • 查询英语分数在60-90之间的同学
    SELECT username,english FROM stu WHERE english>60 AND english<90;
    在这里插入图片描述

    SELECT username,english FROM stu WHERE english BETWEEN 60 AND 90;
    在这里插入图片描述
  • 查询数学分数为88、89、90的同学
    SELECT username,math FROM stu WHERE math IN(88,89,90);
    在这里插入图片描述
  • 查询所有姓小的学生成绩
    SELECT * FROM stu WHERE username LIKE ‘小%’;
    在这里插入图片描述
  • 查询数学>80,语文>80的同学
    SELECT username,math,chinese FROM stu WHERE math>80 AND chinese>80;
    在这里插入图片描述

使用order by对结果进行排序

  1. 语法
    order by 字段 asc 或 desc;
    asc —代表升序(默认值)
    desc —代表降序
  2. 注意
    order by 需要放在select的语句末尾。
    select * from xx where xx order by xx;

练习

  1. 对数学成绩排序后输出
  • SELECT username,math FROM stu ORDER BY math ASC; —默认是升序
    在这里插入图片描述
  • SELECT username,math FROM stu ORDER BY math DESC; —降序
    在这里插入图片描述
  1. 对总分数进行排序,按从高到低的顺序排序。
  • SELECT username,(math+english+chinese) FROM stu ORDER BY (math+english+chinese) DESC;
    在这里插入图片描述
  • SELECT username,(math+english+chinese) AS t FROM stu ORDER BY t DESC; —使用别名查询
    在这里插入图片描述
  1. 对学生成绩按英语进行降序升序,英语相关同学按照数学降序。
  • SELECT username,english,math FROM stu ORDER BY english DESC,math DESC;
    小凤个美美的英语成绩相同,所以就用数学成绩进行排序,小风的数学成绩是98所以排在了美美的前边。
    在这里插入图片描述
  • SELECT username,english,math FROM stu ORDER BY english DESC,math ASC;
    这个和上边一样,相同就按数学成绩降序排序。
    在这里插入图片描述
  1. 对姓小的同学的语文成绩,进行升序排序输出。
  • SELECT username,chinese FROM stu WHERE username LIKE ‘小%’ ORDER BY chinese ASC;
    在这里插入图片描述

聚集函数

  1. 什么是聚集函数:Excel表格。求数量,求和,平均值,最大值,最小值。
  2. 聚集函数操作的都是某一列的数据。
  3. 聚集函数
  4. where后面是不可以放聚集函数的,having后面可以放聚集函数的。

count() —求列中行的数量

  • count() —求数量
  • SELECT COUNT(*) 或 COUNT(列名) FROM 表名; —某一列数据行的总数。
练习
  1. 统计一个班都有多少个同学
  • SELECT COUNT(*) FROM stu;
    在这里插入图片描述
  • SELECT COUNT(id) FROM stu; —通过ID查询
    在这里插入图片描述
  1. 统计数学成绩大于90的有多少个
  • SELECT COUNT(math) FROM stu WHERE math>90;
    在这里插入图片描述
  • SELECT usernae,COUNT(math) FROM stu WHERE math>90; —不能这样查询,会报错。
  1. 统计总分大于22的同学有多少。
  • SELECT COUNT(*) FROM stu WHERE (math+english+chinese)>220;
    在这里插入图片描述

sum() —求列中数据的和

  • sum() —求某一列数据的和
    sum —注意:没有sum(*),求的某一列,sum只对数值(数字)类型起作用。
练习
  1. 统计一个班的数学总成绩
  • SELECT SUM(math) FROM stu;
    在这里插入图片描述
  1. 统计一个班的数学、语文、英语各科成绩的总成绩
  • SELECT SUM(math),SUM(english),SUM(chinese) FROM stu;
    在这里插入图片描述
  1. 统计一个班的数学、语文、英语的成绩总和
  • SELECT SUM(math+english+chinese) FROM stu;
    在这里插入图片描述
  • SELECT SUM(math)+SUM(english)+SUM(chinese) FROM stu; —这样也可以
  1. 统计一个班语文成绩的平均分。
  • SELECT SUM(chinese)/COUNT(*) FROM stu; — 这里体现了开头所说的可以在查询的时候进行运算。
    在这里插入图片描述
注意的地方
  • sum函数可以忽略null值。
  • 编写一条修改语句
    update stu set math=null where username=‘小花’; —这样照样可以查询各科总成绩之和。

avg() —求平均数

  • select avg(字段) from stu;
练习
  1. 求一个班级语文平均分
  • SELECT AVG(chinese) FROM stu;
    在这里插入图片描述
  1. 求一个班级总分的平均分
  • SELECT AVG(math+english+chinese) FROM stu;
    在这里插入图片描述

最大值max()和最小值 min()

  • max() — min()
练习
  • 求班级最高分和最低分
    SELECT MAX(math+english+chinese) FROM stu;
    在这里插入图片描述
  • SELECT MIN(math+english+chinese) FROM stu;
    在这里插入图片描述

总结

  • 聚集函数,是函数,不要网级编写 () 括号。
  • 计算都是一列的数据。
  • 聚集函数:
    count() —求数量
    sum() —求和
    avg() —平均值
    max() —最大值
    min() —最小值

分组查询(group by)

博主的详细解读

  1. 分组产生效果?聚集函数与分组效果。
  2. 可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
  3. select * from stu; —查询所以的数据,默认是一组。
  4. 可以使用关键字 group by 关键字 根据字段进行分组。
  • select 字段 from 表名 group by 关键字;
  1. having
  • having是group by的一个关键字,只能和group by同时出现。
  • 主要作用是进行分组后的数据筛选,允许使用多行函数,补充where中不能使用多行函数的不足。
  • having类似于where(唯一的差别是where过滤行,having过滤组)having支持所有where操作符。
  • where后面是不可以放聚集函数的,having后面可以放聚集函数的。

练习

先键一个新表并加入数据。
CREATE TABLE orders (
id int(11) DEFAULT NULL,
product varchar(20) DEFAULT NULL,
price float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
在这里插入图片描述

  1. 对订单表中商品归类,显示每一类商品的总价。
  • SELECT product,SUM(price) FROM orders GROUP BY product;
    已经把原来一组的数据,分成了三组。在统计数据的时候以组为单位。
    在这里插入图片描述
  1. 查询购买了几类商品,并且每类总价大于100的商品。
  • SELECT product,SUM(price) FROM orders GROUP BY product HAVING SUM(price)>100; —这里使用了having
    在这里插入图片描述
  1. 查询购买了几类商品,并且商品的价格需要大于100,每类总价大于100的商品。
  • SELECT product,SUM(price) FROM orders WHERE price>100 GROUP BY product HAVING SUM(price)>100; —这里使用了where加having
    where是在查询语句(SELECT)执行条件之前过滤,having是在查询语句(SELECT)执行之后进行条件过滤。
    在这里插入图片描述

ORDER BY(排序)

order by用法
使用order by和group by的分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值