SQL 查询

查询数据(SELECT)(重点/掌握)
基本查询语句的语法
select * from 表名;—默认查询所有字段的数据
select 字段1,字段2,字段3 from 表名; —查询指定的字段的数据
DISTINCT —去除掉重复的关键字
可以在查询的时候进行运算
SELECT username,math+10,english+10,chinese+10 FROM stu;
用as的关键字,起别名查询
查询语句可以使用as的关键字,起别名。
别名的真正的用法,采用的多表的查询,为了区分每张表,表起个别名。
as的关键字可以省略不写,中间需要使用空格。
一般都是给表来起别名
select s.username,s.math from stu s;
select s.username,u.username from stu s.user u
使用where的条件语句,进行查询条件的过滤。
练习
创建表做练习
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;
学生表中加入数据

开始练习
查询表中所有学生的信息;
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子句后可以使用的符号
常用的符号
常用的符号
( * ) ( > ) ( < ) ( <= ) ( >= ) ( = ) ( <>/不等于 )
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对结果进行排序
语法
order by 字段 asc 或 desc;
asc —代表升序(默认值)
desc —代表降序
注意
order by 需要放在select的语句末尾。
select * from xx where xx order by xx;
练习
对数学成绩排序后输出
SELECT username,math FROM stu ORDER BY math ASC; —默认是升序

SELECT username,math FROM stu ORDER BY math DESC; —降序

对总分数进行排序,按从高到低的顺序排序。
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; —使用别名查询

对学生成绩按英语进行降序升序,英语相关同学按照数学降序。
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;
这个和上边一样,相同就按数学成绩降序排序。

对姓小的同学的语文成绩,进行升序排序输出。
SELECT username,chinese FROM stu WHERE username LIKE ‘小%’ ORDER BY chinese ASC;

聚集函数
什么是聚集函数:Excel表格。求数量,求和,平均值,最大值,最小值。
聚集函数操作的都是某一列的数据。
聚集函数
where后面是不可以放聚集函数的,having后面可以放聚集函数的。
count() —求列的数量
count() —求数量
SELECT COUNT() 或 COUNT(列名) FROM 表名; —某一列数据行的总数。
练习
统计一个班都有多少个同学
SELECT COUNT(
) FROM stu;

SELECT COUNT(id) FROM stu; —通过ID查询

统计数学成绩大于90的有多少个
SELECT COUNT(math) FROM stu WHERE math>90;

SELECT usernae,COUNT(math) FROM stu WHERE math>90; —不能这样查询,会报错。
统计总分大于22的同学有多少。
SELECT COUNT(*) FROM stu WHERE (math+english+chinese)>220;

sum() —求列的和
sum() —求某一列数据的和
sum —注意:没有sum(*),求的某一列,sum只对数值(数字)类型起作用。
练习
统计一个班的数学总成绩
SELECT SUM(math) FROM stu;

统计一个班的数学、语文、英语各科成绩的总成绩
SELECT SUM(math),SUM(english),SUM(chinese) FROM stu;

统计一个班的数学、语文、英语的成绩总和
SELECT SUM(math+english+chinese) FROM stu;

SELECT SUM(math)+SUM(english)+SUM(chinese) FROM stu; —这样也可以
统计一个班语文成绩的平均分。
SELECT SUM(chinese)/COUNT(*) FROM stu; — 这里体现了开头所说的可以在查询的时候进行运算。

注意的地方
sum函数可以忽略null值。
编写一条修改语句
update stu set math=null where username=‘小花’; —这样照样可以查询各科总成绩之和。
avg() —求平均分
select avg(字段) from stu;
练习
求一个班级语文平均分
SELECT AVG(chinese) FROM stu;

求一个班级总分的平均分
SELECT AVG(math+english+chinese) FROM stu;

最大值max()和最小值 min()
max() — min()
练习
求班级最高分和最低分
SELECT MAX(math+english+chinese) FROM stu;

SELECT MAX(math+english+chinese) FROM stu;

总结
聚集函数,是函数,不要网级编写 () 括号。
计算都是一列的数据。
聚集函数:
count() —求数量
sum() —求和
avg() —平均值
max() —最大值
min() —最小值
分组查询(group by)
博主的详细解读

分组产生效果?聚集函数与分组效果。
可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
select * from stu; —查询所以的数据,默认是一组。
可以使用关键字 group by 关键字 根据字段进行分组。
select 字段 from 表名 group by 关键字;
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

对订单表中商品归类,显示每一类商品的总价。
SELECT product,SUM(price) FROM orders GROUP BY product;
已经把原来一组的数据,分成了三组。在统计数据的时候以组为单位。

查询购买了几类商品,并且每类总价大于100的商品。
SELECT product,SUM(price) FROM orders GROUP BY product HAVING SUM(price)>100; —这里使用了having

查询购买了几类商品,并且商品的价格需要大于100,每类总价大于100的商品。
SELECT product,SUM(price) FROM orders WHERE price>100 GROUP BY product HAVING SUM(price)>100; —这里使用了where加having
where是在查询语句(SELECT)执行条件过滤,having是在查询语句(SELECT)执行之后进行条件过滤。

————————————————
版权声明:本文为CSDN博主「A.夕阳」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43581078/article/details/103445807

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值