文章目录
- MySQL高阶SQL语句
- MySQL常用查询
- 1、按关键字排序
- 1.1 语法
- 1.2 ASC和DESC
- 1.3 对数据表中信息进行排序
- 1.3.1 普通排序
- 1.3.2 结合where进行条件过滤
- 1.3.3 对多个字段进行排序
- 2、区间判断及查询不重复记录
- 2.1 and/or —— 且/或
- 2.1.1 普通查询
- 2.1.2 嵌套/多条件查询
- 2.2 distinct 查询不重复记录
- 3、对结果进行分组
- 3.1 普通分组
- 3.2 结合where语句分组
- 3.3 结合order by 语句分组排序
- 3.4 其他分组记录
- 4、限制结果条目
- 4.1 普通限制查询
- 4.2 结合order by 语句,限制查询并排序
- 5、设置别名
- 5.1 设置别名—alias
- 5.2 做为连接语句的操作符,创建新表
- 5.2.1 创建新表,将之前表中的记录复制到新表中
- 5.2.2 结合where语句,使用as创建新表
- 5.3 使用场景
- 6、通配符
- 6.1 查询name字段以x开头的记录
- 6.2 查询address字段以n结尾的记录
- 6.3 查询address字段hu__n中有两个字符的记录
- 6.4 查询address字段中包含g的记录
- 6.5 查询address字段qing后面3个字符的记录
- 6.6 通配符%与_可以结合使用
MySQL高阶SQL语句
MySQL常用查询
- 对 MSQL数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。例如只取 10条数据、对查询结果进行排序或分组等等
1、按关键字排序
- 类比于windows 任务管理器
- 使用 select 语句可以将需要的数据从 mysql 数据库中查询出来,如果对查询的结果进行排序,可以使用 order by 语句来对语句实现排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以针对多个字段。
1.1 语法
SELECT columnl,column2,.., FRoM table name ORDER BY columnl, column2, ...
1.2 ASC和DESC
ASC: 是按升序进行排序的,是默认的排序方式,即ASC可以省略。select 语句中如果没有指定具体的排序方式,则默认按 ASC方式进行排序。
DESC: 是按降序方式进行排列。当然 order by 前面也可以使用 where 语句对查询结果进一步过滤。
- 创建数据库数据表
create database xi;
#创建数据库
use xi;
#切换到数据库
create table ww(id int(4),name varchar(10) primary key not null,score decimal(5,2),address varchar(40),hobbid int(8));
#创建表
desc ww;
#查看表的结构信息
insert into ww values(1,'aaaa',80,'beijing',2);
insert into ww values(2,'bbbb',49,'miandian',2);
insert into ww values(3,'cccc',90,'qingdao',4);
insert into ww values(4,'dddd',60,'shanghai',5);
insert into ww values(5,'yyyy',98,'shanghai',3);
insert into ww values(6,'nnnn',30,'hangzhou',3);
insert into ww values(7,'mmmm',11,'nanjing',5);
insert into ww values(8,'xxxx',88,'hunan',5);
#表中插入数据
select * from ww;
#查看数据表信息
1.3 对数据表中信息进行排序
1.3.1 普通排序
select name,score from ww order by score;
#选择name,score字段,按分数score进行排序,默认是升序
select name,score from ww order by score desc;
#选择name,score字段,按分数score进行排序,降序
1.3.2 结合where进行条件过滤
- order by 结合where语句进行条件过滤
select name,score from ww where address='shanghai' order by score desc;
#选择name,score字段,对地址是shanghai的score分数进行降序排序
1.3.3 对多个字段进行排序
- order by 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,字段之间使用英文逗号隔开,优先级是按先后顺序而定
select id,name,hobbid from ww order by hobbid desc,id desc;
#选择id,name,hobbid字段,先按hobbid进行降序排序,如果一致,则按id进行降序排序
select id,name,hobbid from ww order by hobbid desc,id;
#选择id,name,hobbid字段,先按hobbid进行降序排序,如果一致,则按id进行升序排序
2、区间判断及查询不重复记录
2.1 and/or —— 且/或
2.1.1 普通查询
select * from ww where score > 70 and score <= 90;
#查看表中score大于60并且小于等于90的记录
select * from ww where score < 60 or score > 90;
#查看表中score大于60或者小于等于90的记录
2.1.2 嵌套/多条件查询
select * from ww where score > 70 or (score > 80 and score < 90);
#查看表中score大于80或者(大于30并且小于70)的记录,括号里面的内容执行完是一个准确的数字
2.2 distinct 查询不重复记录
- 格式
select distinct 字段 from 表名;
select distinct hobbid from ww;
#去掉表中hobbid字段重复的部分
3、对结果进行分组
-
通过 sql 查询出来的结果,还可以对其进行分组,使用 group by 语句来实现 ,group by 通常都是结合聚合函数一起使用的
-
常用的聚合函数包括:计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),group by 分组的时候可以按一个或多个字段对结果进行分组处理。
3.1 普通分组
- 语法格式
select count(字段1),字段2 from 表名 group by 字段2;
select count(name),hobbid from ww group by hobbid;
#以hobbid字段的数进行分组,基于name计数,统计出相同hobbid的个数
3.2 结合where语句分组
select count(name),hobbid from ww where score >= 60 group by hobbid;
#以hobbid字段的数进行分组,基于name计数,统计出score大于等于60的相同hobbid的个数
3.3 结合order by 语句分组排序
select count(name),score,hobbid from ww where score >= 80 group by hobbid order by score desc;
#以hobbid字段的数进行分组,基于name计数,统计出score大于等于80的相同hobbid的个数,并按score降序排列
3.4 其他分组记录
select count(*) from ww;
#统计表中有多少行记录(此方法会进行全表扫描)
select count(name) from ww;
#统计表中有多少行记录(使用字段查询,速度会比count(*)快,因为此方法只扫描name字段列)
select sum(score) from ww;
#统计score的总和
select max(score) from ww;
#查询表中score最大数
select min(score) from ww;
#查询表中score最小数
select avg(score) from ww;
#查询表中score平均数
4、限制结果条目
-
在使用mysql select 语句进行查询时,结果返回的是所有匹配的记录(行)。有时候仅需要返回第一行或者前几行,这时候就需要用到 limit 语句
-
limit 的第一个参数是位置偏移量(可选参数),是设置 mysql 从哪一行开始显示。 如果不设定第一个参数,将会从表中的第一条记录开始显示。需要注意的是,第一条记录的 位置偏移量是 0,第二条是 1,以此类推。第二个参数是设置返回记录行的最大数目。
4.1 普通限制查询
select * from ww limit 4;
#查询所有数据显示前5行(位置偏移量从0开始,以此类推,0表示字段行)
select * from ww limit 6,1;
#查询所有数据从第7行开始,显示后面1行内容
4.2 结合order by 语句,限制查询并排序
select * from ww order by id limit 4;
#查询表中数据,按id字段进行升序排序,只显示前5行
select * from ww order by id desc limit 3;
#显示表的最后3行内容
5、设置别名
- 在 mysql查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性
- 其中 AS 语句是可选的。AS 之后的别名,主要是为表内的列或者表提供临时的名称,在查询过程中使用,库内实际的表名或字段名是不会被改变的
5.1 设置别名—alias
select name as 姓名,score 成绩,address 地址 from ww;
#设置name,score,address别名,alias是临时的,不会改变表的结构
select w.name as 姓名,w.score 成绩,w.address 地址 from ww as w;
#多表同字段会显示区别
select sum(score) 总分数 from ww;
#查询表中score的总和
5.2 做为连接语句的操作符,创建新表
- as创建一个新表并定义表结构,插入表数据(与原表相同)
- 但是”约束“没有被完全”复制“过来,如果原表设置了主键,那么附表的:default字段会默认设置一个0
5.2.1 创建新表,将之前表中的记录复制到新表中
create table xx01 as select * from ww;
#复制ww表信息,生成新的数据表xx01
select * from xx01;
#查看数据表信息
5.2.2 结合where语句,使用as创建新表
create table xx02 as select * from ww where score >= 80;
#筛选ww表中score大于等于80的分数信息,生成新的数据表xx02
- as会复制原表的表结构和数据,但是约束条件不会被复制,比如原表设置了主键,但新表中不会有主键
5.3 使用场景
- 对复杂的表进行查询的时候,别名可以缩短查询语句的长度
- 多表相连查询的时候(通俗易懂、减短sql语句)
6、通配符
-
通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来
-
通配符主要跟like一起使用,并协同where语句共同完成查询任务
%:表示零个、一个或者多个字符
_:表示单个字符
6.1 查询name字段以x开头的记录
select id,name from ww where name like 'x%';
#查询表中name字段以x开头的记录
6.2 查询address字段以n结尾的记录
select * from ww where address like '%n';
#查询表中address字段以n结尾的记录
6.3 查询address字段hu__n中有两个字符的记录
- 常用于模糊查询
select * from ww where address like 'hu__n';
#查询表中address字段hu__n中有两个字符的记录
6.4 查询address字段中包含g的记录
select * from ww where address like '%g%';
#查询表中address字段中包含g的记录
6.5 查询address字段qing后面3个字符的记录
select * from ww where address like 'qing___';
#查询表中address字段qing后面3个字符的记录
6.6 通配符%与_可以结合使用
select * from ww where address like 'h%_';
#查询表中address字段以“h”开头的记录