目录
一.MySQL常用查询
1.按关键字(字段)进行升降排序
按分数排序 (默认为升序)
按分数升序显示
按分数降序显示
根据条件进行排序(加上where)
根据多个字段进行排序
编辑
2.用或(or)和且(and)来查询不重复
或(or)
且(and)
3.用多条件(嵌套)去查询
4.去重
5.对结果进行分组
计数(COUNT)
求和(SUM)
求平均数(AVG)
最大值(MAX)
最小值(MIN)
6.限制结果(limit)
7.别名(alias)
8.通配符
二.总结
1.Mysql常用SQL语句
2.Mysql高级SQL语句
2.1排序——Order by
2.2且或嵌套
2.3分组——Group by
2.4限制行——Limit
2.5别名——alias
2.6通配符
一.MySQL常用查询
1.按关键字(字段)进行升降排序
使用select语句可以将需要的数据从Mysql数据库中查询出来,如果对查询的结果进行排序,可以使用Order by语句来对语句实现排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以针对多个字段。
语法
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ...
创建我们需要的环境
create database school; #创建school的数据库
use school;
create table class (id int(10),name varchar(16) primary key not null,score decimal(5,2),address varchar(40),hobbid int(8));
mysql> insert into class values(2,'lisi',80,'suzhou',2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(3,'wangwu',80,'wuxi',3);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(4,'liliu',70,'changzhou',3);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(5,'tianqi',60,'yangzhou',4);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(6,'wangba',50,'taizhou',4);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(7,'sunjiu',40,'lianyungang',5);
Query OK, 1 row affected (0.01 sec)
mysql> insert into class values(8,'chenshi',40,'xuzhou',5);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(9,'qianda',20,'yanchen',6);
Query OK, 1 row affected (0.00 sec)
mysql> insert into class values(10,'zhaoer',10,'taizhou',6);
Query OK, 1 row affected (0.00 sec)
按分数排序 (默认为升序)
select name,score from class order by score;
#将class表中的成绩按照名字和成绩字段按升序排列出来
按分数升序显示
select name,score from class order by score asc;
#将class表中的成绩按照名字和成绩字段按升序排列出来
按分数降序显示
select name,score from class order by score desc;
#将class表中的成绩按照名字和成绩字段按升序降列出来
根据条件进行排序(加上where)
select name,score from class where address='taizhou' order by score desc;
#将class表中地区为泰州的成绩字段按降序排列出来
根据多个字段进行排序
当第一个字段有相同的数据情况下,可以根据第二个字段进行排序
select id,name,hobbid from class order by hobbid desc,id desc;
#在class表中查询学生信息先按兴趣id降序排列,相同分数的,id也按降序排列
去掉desc,就是默认先按hobbid降序,然后相同的,按升序的id排序
select id,name,hobbid from class order by hobbid desc,id;
2.用或(or)和且(and)来查询不重复
或(or)
select * from class where score <=60 or score>80;
#查询class表中成绩小于等于60或成绩大于80
且(and)
select *from class where id>2 and id <5;
#查询class表中id大于2且id小于5的
3.用多条件(嵌套)去查询
select *from class where id >5 or(score >60 and score <90);
##查询class表中id大于5或成绩大于60且成绩小于90
select *from class where hobbid >3 and(score >50 or score <80);
#查询class表中hobbid大于3且成绩大于50或小于80的部分
4.去重
语法
select distinct 字段 from 表名﹔
select distinct hobbid from class;
#查询class表中hobbid字段不重复的部分
5.对结果进行分组
我们可以通过group by语句配合聚合函数对sql语句查询出来的结果进行分组
GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现; 凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后面
语法
SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator value GROUP BY column_name;
常用聚合函数
计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN)
计数(COUNT)
select count(name),hobbid from class group by hobbid;
#统计class表中hobbid字段相同的个数
还可以结合where语句(添加条件),去筛选
select count(name),from class where score <60 group by hobbid;
#筛选出成绩小于60的分组并计算出个数
结合order by把计算出的个数进行升降序排列
select count(*) from class;
select count(name),score,hobbid from class where score <=60 group by hobbid order by score asc;
#将class表上成绩小于等于60的人数按照score进行分组并按照升序排列
查 表里有多少条数据
select count(*) from class;
或
select count(name) from class;
求和(SUM)
select sum(score) from class;
#查看class表中成绩总值
求平均数(AVG)
select avg(score)from class;
#求出class表中的平均成绩
最大值(MAX)
select max(score)from class;
#求出class表中的成绩最大值
最小值(MIN)
select min(score) from class;
#求出class表中成绩的最小值
6.限制结果(limit)
语法
SELECT column1, column2, ... FROM table_name LIMIT [offset,] number
我们的表结构默认字段算一行表示为0。所以用limit时要-1
select * from class limit 4;
#查询所有信息前五行记录
select * from class limit 4,4;
#从第五行开始,往后显示4行内容
我们还可以结合order by,对于做了限制的查询做排序
select * from class order by id desc limit 4;
#在class表中根据id对前五行的数据进行降序排列
select * from class order by hobbid desc limit 4;
#在class表中根据hobbid对前五行进行降序排列
在生产环境中,我们删除数据时,最好先查,是否是我们要删除的数据,避免事故发生,数据无价
7.别名(alias)
语法
#对于列的别名:SELECT column_name AS alias_name FROM table_name;
#对于表的别名:SELECT column_name(s) FROM table_name AS alias_name;
select name as 姓名,score 成绩,address 地址 from class;
#将name,score和address分别做别名
select name as 姓名,score 成绩,address 地址 from class as k;
#给表做k的别名
8.通配符
- * 所有
- %:百分号表示零个、一个或多个字符
- _:下划线表示单个字符 .
有通配符的时候一定要带有like
select name from class where name like 'z%';
#查询以’z‘开头的name字段
select name from class where name like '%u';
#查询以‘u’结尾的name字段
select name from class where name like'zhan_s_n';
#查询以zhan..s.n的name字段
select name from class where name like 'zhang___';
#查询zhang后面三个字符的name字段
select name from class where name like '%h%';
#查询name字段中含有h的记录
select name from class where name like 'z%_';
#查询以z开头的name字段
二.总结
1.Mysql常用SQL语句
- Select:显示数据表中单个或多个字段列的数据内容
- Distinct:去重
- Where:条件判断
- In:根据已知的数据和字段列进行查询
- Between:介于两个字段列或者两个值之间的数据
2.Mysql高级SQL语句
2.1排序——Order by
- Asc:升序
- Desc:降序
2.2且或嵌套
- And:且,并列,需要同时满足两个判断条件
- Or:或,满足一个判断条件即可
- ():嵌套,优先满足嵌套内的判断条件,再判断嵌套外的条件判断是否满足
2.3分组——Group by
聚合函数
- Count:计数
- Sum:求和
- Max:最大值
- Min:最小值
- Avg:平均值
2.4限制行——Limit
2.5别名——alias
2.6通配符
- %:任意字符
- _:单个字符