MySQL语句(一)

文章目录

  • 一、常用查询
    • 1、按关键字排序
      • (1)语法
      • 创建info表,记录了学生的id、姓名、分数、地址、爱好
      • 单字段排序
        • 按分数排序(默认升序)
        • 按分数降序排列
        • 结合条件过滤
      • 多字段排序
        • 查询学生的信息并按照兴趣id升序排序,相同分数的按照id降序排序
        • 查询学生信息先按兴趣id升序排列,相同分数的,id按升序排列
      • 区间判断及查询不重复记录
        • AND/OR(且/或的使用)
        • 嵌套/多条件
      • distinct 查询不重复记录
    • 2、对结果进行分组
      • 对hobbyid进行分组查询,并显示最大的id
      • 按hobbyid相同的分组,计算相同的个数
      • 结合order by 把统计的id数量进行降序排列
      • 结合where语句,筛选分数大于等于80的分组,计算学生个数按降序排列
    • 3、限制结果条目
      • 查询所有信息显示前4行记录
      • 从第4行开始,往后显示3行内容
      • 结合order by 语句,按id的大小升序排列显示前三行
      • 显示后三行并倒序排列
    • 4、设置别名
      • 使用场景
      • 列别名设置
      • 表别名设置
      • 查询info表的记录数量,以number显示
      • 不用as也可以显示别名
      • 利用as,将查询的数据导入到另外一个表内
      • 也可以加入where语句判断
    • 5、通配符查询
      • 查询名字是 l 开头的数据
      • 查询名字里是 l 和 s 中间有一个字符的记录
      • 查询名字中间有 an 的数据
      • 查询 name 中名字以i结尾,i 前面有四个字符


一、常用查询

对MySQL数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理,例如只取10条数据、对查询结果进行排序或分组等等。

1、按关键字排序

ps:类比于windos任务管理器
使用SELECT语句可以将需要的数据从MySQL数据库中查询出来,如果对查询的结果进行排序,可以使用ORDER BY 语句来对语句实现排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以针对多个字段

(1)语法

SELECT column1,column2,… FROM table_name ORDER BY cloumn1.cloumn2,…
ASC | DESC

  • ASC是按照升序进行排序的,是默认的排序方式,即ASC可以省略。SELECT语句中如果没有指定具体的排序方式,则默认按ASC方式进行排序。
  • DESC是按降序方式进行排列。当然ORDER BY前面也可以使用WHERE子句对查询结果进一步过滤。

创建info表,记录了学生的id、姓名、分数、地址、爱好


create table info (id int (10) primary key not null auto_increment,name char(10),score decimal(5,2),address varchar(40),hobbyid varchar(10));

insert into info1 values(1,'liuyi',80,'beijing',2);
insert into info1 values(2,'wangwu',90,'shengzheng',2);
insert into info1 values(3,'lisi',60,'shanghai',4);
insert into info1 values(4,'tianqi',99,'hangzhou',5);
insert into info1 values(5,'zhangsan',98,'chengdu',3);
insert into info1 values(6,'hanmeimei',59,'nanjing',3);
insert into info1 values(7,'lilei',70,'nanjing',5);

select * from info1;

MySQL语句(一)_第1张图片

单字段排序

按分数排序(默认升序)

select * from info1 order by score;   (asc默认省略)

MySQL语句(一)_第2张图片

按分数降序排列

select * from info1 order by score desc;

MySQL语句(一)_第3张图片

结合条件过滤

select * from info1 where address=’nanjing’ order by score;

MySQL语句(一)_第4张图片

多字段排序

order by 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,order by后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定,但order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义

查询学生的信息并按照兴趣id升序排序,相同分数的按照id降序排序

select * from info1 order by hobbyid,id desc;

MySQL语句(一)_第5张图片

查询学生信息先按兴趣id升序排列,相同分数的,id按升序排列

select * from info1 order by hobbyid,id;

MySQL语句(一)_第6张图片

区间判断及查询不重复记录

AND/OR(且/或的使用)

select * from info1 where id>2 and id<5;    #与
 
select * from info1 where id>2 or id<5;     #且

MySQL语句(一)_第7张图片

嵌套/多条件

select * from info1 where id>2 or (id>3 and id <5);
 
select * from info1 where score <70 or (score >90 and score <100);

MySQL语句(一)_第8张图片

查看分数大于70 小于等于95的数据
select * from info1 where score > 70 and score <=90;

MySQL语句(一)_第9张图片

查看分数小于70 或者大于90的数据,按降序显示
select * from info1 where score < 70 or score >90 order by score desc;

MySQL语句(一)_第10张图片

distinct 查询不重复记录

select distinct 字段 from 表名﹔
distinct 必须放在最开头
distinct 只能使用需要去重的字段进行操作
distinct 去重多个字段时,含义是:几个字段同时重复时才能被过滤,会默认按左边第一个字段为依据。

select distinct address from info1; 查看address有多少种
MySQL语句(一)_第11张图片

2、对结果进行分组

通过 SQL 查询出来的结果,还可以对其进行分组,使用 GROUP BY 语句来实现 ,GROUP BY 通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分组的时候可以按一个或多个字段对结果进行分组处理

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator valueGROUP BY column_name;
selet字段,聚合函数from表名,(where字段名(匹配)数值)group by字段名;

对hobbyid进行分组查询,并显示最大的id

select hobbyid,max(id) from info1 group by hobbyid;

MySQL语句(一)_第12张图片

按hobbyid相同的分组,计算相同的个数

select count(name),hobbyid from info1 group by hobbyid;

MySQL语句(一)_第13张图片

结合order by 把统计的id数量进行降序排列

select count(id),hobbyid from info1 group by hobbyid order by count(id) desc;

MySQL语句(一)_第14张图片

结合where语句,筛选分数大于等于80的分组,计算学生个数按降序排列

select count(name),score from info1 where score >= 80 group by hobbyid order by count(name) desc;

MySQL语句(一)_第15张图片

3、限制结果条目

LIMIT限制输出的结果记录,在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句

select 字段,聚合函数 from 表名 (where 字段名(匹配) 数值) group by 字段名;
SELECT column1, column2, ... FROM table_name LIMIT [offset,] number

查询所有信息显示前4行记录

select * from info1 limit 4;

MySQL语句(一)_第16张图片

从第4行开始,往后显示3行内容

select * from info1 limit 3,3;

MySQL语句(一)_第17张图片

结合order by 语句,按id的大小升序排列显示前三行

select id,name from info1 order by id limit 3;

MySQL语句(一)_第18张图片

显示后三行并倒序排列

select id,name from info1 order by id desc limit 3;

MySQL语句(一)_第19张图片

4、设置别名

在 MySQL 查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性

使用场景

1、对复杂的表进行查询的时候,别名可以缩短查询语句的长度
2、多表相连查询的时候(通俗易懂、减短 sql 语句)

对于列的别名:SELECT column_name AS alias_name FROM table_name;
对于表的别名:SELECT column_name(s) FROM table_name AS alias_name;

列别名设置

select name as 姓名,score as 成绩 from info;

MySQL语句(一)_第20张图片

表别名设置

select i.name as xingming,i.score as chengji from info1 as i;

MySQL语句(一)_第21张图片

查询info表的记录数量,以number显示

select count(*) as number from info1;

MySQL语句(一)_第22张图片

不用as也可以显示别名

select count(*) number from info1;

MySQL语句(一)_第23张图片

利用as,将查询的数据导入到另外一个表内

create table class2 as select * from info1;
或
create table class2 (select * from info1);

此次as起到的作用
1、创建了一个新表,并定义表结构,插入表数据(与info1表相同)
2、但是"约束"没有被完全"复制"过来,但是如果原表设置了主键,那么附表的default字段会默认设置一个0
MySQL语句(一)_第24张图片

也可以加入where语句判断

create table class3 as select * from info1 where score >=60;

MySQL语句(一)_第25张图片

5、通配符查询

通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。通常通配符都是跟 LIKE(模糊查询)一起使用的,并协同 WHERE 子句共同来完成查询任务。常用的通配符有两个,分别是:

%:百分号表示零个、一个或多个字符
_:下划线表示单个字符

查询名字是 l 开头的数据

select id,name from info1 where name like 'l%';

MySQL语句(一)_第26张图片

查询名字里是 l 和 s 中间有一个字符的记录

select id,name from report where name like 'l_s%'

MySQL语句(一)_第27张图片

查询名字中间有 an 的数据

select id,name from info1 where name like '%an%';

MySQL语句(一)_第28张图片

查询 name 中名字以i结尾,i 前面有四个字符

select id,name from info1 where name like '____i';

MySQL语句(一)_第29张图片
通配符 % 和 _ 不仅可以单独使用,也可以组合使用,
MySQL语句(一)_第30张图片

你可能感兴趣的:(mysql,数据库,sql)