MySql基础 --- DQL操作表记录

废话不多说,直接上代码 ,都在里头

-- -------------------查询------------------

-- 基本查询 ---> 语法:
-- 查询所有的列:select * from 表名;
select * FROM product;

-- 查询某张表特定列 :select 列名,列名,...from 表名;
select pname,num from product;

-- 去重查询:select distinct 列名 from 表名;
select distinct pname from product;

-- 别名查询:select 列名 as 别名 from 表名 as 别名; -- as 可以省略不写
select pname as 商品名 from product as 商品名;\
select pname 商品名 from product 商品名;

-- 运算查询 (+-*/ 等) select 列运算 from 表名;
select * from product where price = price + 2;

-- --------------------------------DQL操作表记录-查询------------------------------------------------
-- 基本条件查询:select ... from 表名 where 条件;
-- 		比较运算符 : >  、 <  、 <=  、 >=  、 =  、 <>	
-- 1、=表示 等于;<> 表示不等于;
-- (注释:在 SQL 的一些版本中,该操作符可被写成 !=);
-- > 表示大于;
-- < 表示小于;
-- >= 表示大于等于;
-- <= 表示小于等于;
-- BETWEEN表示在某个范围内;LIKE表示搜索某种模式;
-- IN表示指定针对某个列的多个可能值。

-- 		between ... add ... 
-- 		in(值,值,...)
--    like
-- 				_ 匹配一个字符
-- 				% 匹配0到多个字符(大于等于0个)
-- 		逻辑运算符:
-- 				add...
-- 				or...
-- 				not...

--  练习:查询product表中所有的数据
select * from product;

-- 练习:查询pid,pname,price列中的数据
select pid , pname , price from product;

-- 练习:去重查询商品价格
select distinct price from product;
	
-- 练习:查询pid,pname,price列中的数据并对列取别名
select pid as id , pname as 商品名 , price as 商品价格 from product;
select pid id, pname 商品名, price 商品价格 from product;


-- 练习:查询价格大于5000的商品信息
select * from product where price > 5000;


-- 练习:查询价格大于5000的商品并且数量大于10的商品信息
select * from product where price > 5000 and num > 10;

-- 练习: 查询商品名称含有'iPh'的商品信息
select * from product where pname like '%iph%' ;

-- 练习:查询商品价格在3000到8000之间的商品信息,包含3000,8000
select * from product where price >= 3000 and price <= 8000;

-- 练习:查询pid为1,3,5,7,9,19的商品信息
select * from product where pid in(1,3,5,7,9,19)

-- 练习: 查询每种商品需要的总价
select sum(price) from product;

-- 查询商品价格>3000的商品
select * from product where price > 3000;

-- 查询id=1的商品
select * from product where pid = 1;

-- 查询id<>1的商品
select * from product where pid <> 1;

-- 查询价格在3000到6000之间的商品
select * from product where price > 3000 and price < 6000;

-- 查询id在1,5,7,15范围内的商品
select * from product where pid in(1,5,7,15)

-- 查询商品名以iPho开头的商品(iPhone系列)
select * from product where pname like 'iph%';

-- 查询商品价格大于3000并且数量大于20的商品 (条件 and 条件 and...)
select * from product where price > 3000 and num > 20;

-- 查询id=1或者价格小于3000的商品
select * from product where pid = 1 or price < 3000;

-- ---------------------排序查询---------------------------
CREATE TABLE student_1(
sid INT PRIMARY KEY auto_increment,
sname VARCHAR(40),
sex VARCHAR(10),
age INT,
score DOUBLE
);

INSERT INTO student_1 VALUES(null,'zs','男',18,98.5);
INSERT INTO student_1  VALUES(null,'ls','女',18,96.5);
INSERT INTO student_1  VALUES(null,'ww','男',15,50.5);
INSERT INTO student_1  VALUES(null,'zl','女',20,98.5);
INSERT INTO student_1  VALUES(null,'tq','男',18,60.5);
INSERT INTO student_1 VALUES(null,'wb','男',38,98.5);
INSERT INTO student_1 VALUES(null,'小丽','男',18,100);
INSERT INTO student_1 VALUES(null,'小红','女',28,28);
INSERT INTO student_1 VALUES(null,'小强','男',21,95);


-- 方式一:select ... from 表名 [where 条件] order by 字段名 [asc|desc];
-- 方式二:select ... from 表名 [where 条件] order by 字段名 [asc|desc], 字段名[asc|desc],...;
-- 注意:asc:升序,desc:降序,不指定默认是升序

-- 1.以分数降序查询所有的学生
-- 降序
SELECT * FROM student_1 ORDER BY score DESC;

-- 2.以分数降序查询所有的学生, 如果分数一致,再以age降序
SELECT * FROM student_1 ORDER BY score DESC , age DESC;



-- ---------------------聚合函数---------------------------

聚合函数			|		作用
max(列名)		|		求这一列的最大值
min(列名) 		|		求这一列的最小值
avg(列名) 		|		求这一列的平均值
count(列名) 	|		统计这一列有多少条记录
sum(列名) 		|		对这一列求总和

-- 语法:
-- SELECT 聚合函数(列名) FROM 表名 [where 条件];

-- 练习:
-- 练习:求出学生表里面的最高分数
SELECT MAX(score) FROM student_1; 

-- 练习:求出学生表里面的最低分数
SELECT MIN(score) FROM student_1;

-- 练习:求出学生表里面的分数的总和
SELECT SUM(score) FROM student_1;

-- 练习:求出学生表里面的平均分
SELECT AVG(score) FROM student_1;  -- 87.25

-- 练习:统计学生的总人数
SELECT COUNT(*) FROM student_1;  -- 9

-- 如果把小红的分数改为null
UPDATE student_1 set score = NULL WHERE sname = '小红';

-- 练习:统计学生的总人数
SELECT COUNT(score) FROM student_1;  -- 8
-- 结论: 聚合函数会忽略null值
-- 解决: 使用ifnull(参数1,参数2)函数,如果参数1的值为null,就取参数2的值作为结果,如果参数1的值不为null,那就取参数1的值作为结果
-- 使用ifnull函数,设置第二个值为 0  如果分数为null的时候就取 0 
SELECT COUNT(IFNULL(score,0)) FROM student_1;

-- 练习:求出学生表里面的分数的总和
SELECT SUM(IFNULL(score,0)) FROM student_1;

-- 练习:求出学生表里面的平均分
SELECT AVG(IFNULL(score,0)) FROM student_1;   -- 77.55555555555556


-- ---------------------分组查询---------------------------

-- 分组语法:
-- SELECT ... FROM 表名 [where 条件] group by 列名 [having 条件];
-- 练习

-- 1. 练习:根据性别分组,统计男生的总人数和女生的总人数
SELECT * FROM student_1 GROUP BY sex;
-- 如果仅仅只是分组查询,没有任何意义,因为只会返回每一组的第一条记录
-- 分组的目的是为了统计计算,所以分组一般会和聚合函数一起使用
SELECT COUNT(*) FROM student_1 GROUP BY sex;  -- 得到的结果无法识别是哪一组的结果

-- 分组查询一般都会查询出分组字段的值,否则无法识别结果是属于哪一组的
SELECT sex, COUNT(*) FROM student_1 GROUP BY sex;

-- 2. 练习根据性别分组, 统计每一组学生的总人数> 5的(分组后筛选)
SELECT sex , COUNT(*) FROM student_1 GROUP BY sex HAVING COUNT(*)>5;


-- 注意事项:
-- 单独分组 没有意义,因为 返回每一组的第一条记录
-- 分组的目的一般为了做统计使用, 所以经常和聚合函数一起使用
-- 分组查询如果不查询出分组字段的值,就无法得知结果属于那组

-- where和having的区别:
子名  					|				作用
-- where   				|			    (1) 对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,即先过滤再分组。
-- 子句					|				(2) where后面不可以使用聚合函数
						|
-- having				|				(1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
-- 字句					|				(2) having后面可以使用聚合函数



-- ---------------------分页查询---------------------------

-- 语法:
-- select ... from 表名 limit a,b;
-- a:从哪里开始查询, 从0开始计数 ,省略a不写,默认就是从0开始
-- b:查询的数量【固定的,自定义的】
-- 分页查询: limit (页码-1)*每页显示的条数,每页显示的条数;

-- 练习:
-- 练习: 查询sid为1到4--->第1页 
SELECT * FROM student_1 LIMIT 0,4;
-- 练习: 查询sid为5到8--->第2页 
SELECT * FROM student_1 LIMIT 4,4;
-- 练习: 查询sid为9到12--->第3页
SELECT * FROM student_1 LIMIT 8,4;
-- 分页查询的规律: limit (页码-1)*每页显示的总条数,每页显示的总条数

 ------------------------------------------------------------------------------------------------------------------

小白一枚,喜欢编程,以上内容纯手打,如有错误,请及时指正,谢谢!!!

            欢迎下次再来ヾ(≧▽≦*)o
         
               求三连(❁´◡`❁)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Donne_CN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值