MySql的DQL语句,查询

Select 语句 比较复杂
基本语法
Select * from exams
Select name,age from exams
Select * from exams where ….;

Distinct可以把查询出来重复的数据剔除
Select distince name from exams;(把exams表中的,name字段的重复的结果去除)

建立一个stu表,用于后面查询
create table stu(
id int primary key auto_increment,
name varchar(10) not null,
age int ,
chinese double,
english double,
math double
);

练习1
查询表中所有学生的信息。
Select * from stu;
Select name,age,chinese,English,math from stu;
查询表中所有学生的姓名和对应的英语成绩。
Select name,english from stu;
过滤表中重复数据。select distinct * from stu;

使用别名
语法:Select column as 别名 from stu;

Select name as 姓名 from stu;

练习2
在所有学生分数上加10分特长分。
Select name,chinese+10,english+10,math+10 from stu;

统计每个学生的总分。
Select name,Chinese+English+math from stu

使用别名表示学生分数。
Select name as 姓名 ,(Chinese + English+math) as 总分 from stu;

提醒:as是可以省略的

练习3
查询姓名为XXX的学生成绩select * from stu where name=’xxx’

查询英语成绩大于90分的同学selcet * from stu where englisg>90

查询总分大于200分的所有同学select * from stu where Chinese+math+English>200;

练习4

查询英语分数在 80-90之间的同学。
Select * from stu where English>80 and English<90
Select * from stu where English between 80 in 90

查询数学分数为89,90,91的同学
Select * from stu where math in(89,90,91)查询所有姓李的学生成绩。
Select * from stu where name like ‘李%’
查询数学分>80,语文分>80的同学
Select * from stu where math>80 and Chinese >80;

Order by语句的语法
Select column1,column2,column3 from table_name order by column asc/desc
练习5
对数学成绩排序后输出。
Select * from stu order by math asc
对总分排序按从高到低的顺序输出
Select * from stu order by (Chinese+math+english) desc

对姓李的学生成绩排序输出
select name,english+chinese+math as 总分 from stu where name like ‘李%’ order by 总分 desc

聚集函数
Count(列名)返回某一列,行的总数)
语法
语法:select count(*)|count(列名) from table_name where xxx;

练习
统计一个班级共有多少学生?
Select count(*) from stu

统计数学成绩大于90的学生有多少个?select count(*) from stu where math>90
统计总分大于250的人数有多少?
Select count(*) from stu where (English+Chinese+math)>250

Sum函数
语法
Select sum(列名) from table_name;
Select sum(列名1+列名2+列名3) from table_name;
注意:列名里面的数值必须是数子,否者会报错的.

练习
统计一个班级数学总成绩?
Select sum(math) as总分 from stu
统计一个班级语文、英语、数学各科的总成绩
Select sum(chinese),sum(english),sum(math) from stu
统计一个班级语文、英语、数学的成绩总和
Select sum(Chinese+English+math) from stu

统计一个班级语文成绩平均分
Select sum(chinese)/count(*) from stu

Avg函数
语法
Select avg(列名) from table_name
练习
求一个班级数学平均分?
Select avg(math) from stu
求一个班级总分平均分
Select avg(math+Chinese+english) from stu

Max/min函数
语法
Select max(列名) from tablename
Select max(列名) from table_name where ….;
练习

求班级最高分和最低分(数值范围在统计中特别有用)

Select max(Chinese+English+math) from stu;

Select min(Chinese+English+math) from stu;

group by
create table orders(
id int,
product varchar(20),
price float
);

insert into orders(id,product,price) values(1,’电视’,900);
insert into orders(id,product,price) values(2,’洗衣机’,100);
insert into orders(id,product,price) values(3,’洗衣粉’,90);
insert into orders(id,product,price) values(4,’桔子’,9);
insert into orders(id,product,price) values(5,’洗衣粉’,90);

group by 进行分组, 分组 后如果要进行筛选, 那么可以使用 having 关键字, 然后加上聚集函数

练习:对订单表中商品归类后,显示每一类商品的总价

select sum(price) from orders group by product;

练习:查询购买了几类商品,并且每类总价大于100的

select product,sum(price) from orders group by product having sum(price)>100;

where与having的区别?
1. where 和having 都是可以进行筛选的 ,但是 where是在分组前进行筛选, having是在分组后
进行筛选
2. where 后面不能接 聚集函数, 而having后面可以接 聚集函数.

select语句后可以接的关键字小结:

顺序:
select ….from … where…group by … having… order by …
s…f…w…g…h…o

解析的顺序:f…w…g…h…s…o…

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值