MySQL 高级 SQL 语句
目录
常用查询
按关键字排序
order by结合where进行条件过滤
根据多个字段进行排序
用或(or)和且(and)来查询不重复
用多条件(嵌套)去查询
去重
对结果进行分组
限制结果(limit)
别名(alias)
通配符
常用查询
按关键字排序
用 SELECT语句可将数据从 MySQL 数据库中查询出来
对查询的结果进行排序,可用 ORDER BY 语句来对语句实现排序
不仅对某一个字段,也可以针对多个字段
语法
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ...
ASC DESC
- ASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。SELECT 语句中如果没有指定具体的排序方式,则默认按 ASC方式进行排序。
- DESC 是按降序方式进 行排列。ORDER BY 前面也可以使用 WHERE 子句对查询结果进一 步过滤。
操作
创建环境
创建school的数据库
create database school;
use school;
数据库有一张yiban表,记录了学生的id,姓名,分数,地址和爱好
create table yiban (id int,name varchar(10) primary key not null ,score decimal(5,2),address varchar(20),hobbid int(5));
insert into yiban values(1,'aodaye',80,'beijing',2);
insert into yiban values(2,'wangwu',90,'shengzheng',2);
insert into yiban values(3,'lisi',60,'shanghai',4);
insert into yiban values(4,'dalong',99,'hangzhou',5);
insert into yiban values(5,'danan',98,'laowo',3);
insert into yiban values(6,'wuye',10,'nanjing',3);
insert into yiban values(7,'xiaoki',11,'nanjing',5);
select * from yiban;
按分数排序,默认不指定是升序排列
分数按降序排列
order by结合where进行条件过滤
筛选地址是北京的学生按分数降序排列
根据多个字段进行排序
当第一个字段有相同的数据情况下,可以根据第二个字段进行排序
查询学生信息先按兴趣id降序排列,相同分数的,id按升序排列
用或(or)和且(and)来查询不重复
or
and
用多条件(嵌套)去查询
去重
distinct 查询不重复记录
语法:
select distinct 字段 from 表名
对结果进行分组
我们可以通过group by语句配合聚合函数对sql语句查询出来的结果进行分组
语法
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 yiban group by hobbid;
-
#统计yiban表中hobbid字段相同的个数
还可以结合where语句(添加条件),去筛选
结合where语句,筛选分数大于等于80的分组,计算学生个数
结合order by把计算出的个数进行升序排列
查 表里有多少条数据
select count(*) from yiban
或
select count(name) from yiban;
求和(SUM)
查看yiban表中成绩总值
求平均数(AVG)
select avg(score) from yiban;
求出yiban表中的平均成绩
最大值(MAX)
select max(score) from yiban;
求出yiban表中的成绩最大值
最小值(MIN)
select min(score) from yiban;
求出yiban表中成绩的最小值
限制结果(limit)
语法
SELECT column1, column2, ... FROM table_name LIMIT [offset,] number
查询所有信息显示前4行记录
我们的表结构默认字段算一行表示为0。所以用limit时要-1
从第4行开始,往后显示3行内容
我们还可以结合order by,对于做了限制的查询做排序
select * from yiban order by id desc limit 4;
在yiban表中根据id对前五行的数据进行降序排列
别名(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 yiban;
将name,score和address分别做别名
给表做r的别名
select r.name as 姓名,r.score as 成绩 from yiban as r;
通配符
通配符主要用于替换字符串中的部分字符,
通过部分字符的匹配将相关结果查询出来。
通常跟 LIKE 一起使用的,并协同 WHERE 子句共同来完成查询任务。
常用的通配符有两个:
%:百分号表示零个、一个或多个字符 *
_:下划线表示单个字符 .
查询名字是d开头的记录
查询名字里是l和s中间有一个字符的记录
查询名字中间有e的记录
“%”和“_”也可以组合使用
查询名字以w开头的记录