MySQL基础语法三(查询一:单表查询)

单表查询

查询不会对数据库中的数据进行修改,只是一种显示数据的方式。

select 列名 from 表名 [where 条件表达式]
# 1) select 命令可以读取⼀⾏或者多⾏记录。
# 2) 可以使⽤星号(*)来代替其他字段,select语句会返回表的所有字段数据
# 3) 可以使⽤where语句来包含任何条件。

简单查询

查询所有行和列的数据

#使⽤*表示所有列
select * from 表名;

查询指定列

#查询指定列的数据, 多个列之间以逗号分隔
select 字段名 1, 字段名 2, 字段名 3, ... from 表名;
#例:查询 student 表中的 name 和 age 列
select name,age from student;

指定列的别名进行查询

#对列指定别名(as可省略)
select 字段名 1 as 别名, 字段名 2 as 别名... from 表名;
#对列和表同时指定别名(as可省略)
select 字段名 1 as 别名, 字段名 2 as 别名... from 表名 as 表别名;

表使用别名的原因:用于多表查询的操作

清除重复值

#查询指定列并且结果不出现重复数据
select distinct 字段名 from表名;

查询结果参与运算

某列数据和固定值运算

select 列名 1 + 固定值 from 表名;

某列数据和其它列数据参与运算

select 列名 1 + 列名 2 from 表名;

参与运算的必须是数值类型

示例

/* 需求:
 准备数据: 添加数, 英语成绩列, 给每条记录添加对应的数学和英语成绩.
 查询的时候将数学和英语的成绩相加
*/
#给所有的数学加 5 分
select math + 5 from student;
#查询 math + english 的和
select *, (math+english) as 总成绩 from student;
#as 可以省略
select *, (math+english) 总成绩 from student;

条件查询

运算符

比较运算符说明
>、<、<=、>=、=、<><>在mysql表示不等于,也可以使用!=
between… and在一个范围之内,如:between 100 and 200表示在100到200之间,包括边界
in(集合)集合表示多个值,用,分隔
like ‘%王%’模糊查询
is null查询某一列的值为null

具体操作

#查询 math 分数⼤于 80 分的学⽣
select * from student where math > 80;
#查询 english 分数⼩于或等于 80 分的学⽣
select * from student where english <= 80;
#查询 age 等于 20 岁的学⽣
select * from student where age = 20;
#查询 age 不等于 20 岁的学⽣,注:不等于有两种写法
select * from student where age <> 20;
select * from student where age != 20;

逻辑运算符

逻辑运算符说明
and
or
not

具体操作

#查询 age ⼤于 35 且性别为男的学⽣(两个条件同时满⾜)
select * from student where age > 35 and sex = '男';
#查询 age ⼤于 35 或性别为男的学⽣(两个条件其中⼀个满⾜)
select * from student where age > 35 or sex = '男';
#查询id是1或3或5的学⽣
select * from student where id = 1 or id = 3 or id = 5;

in关键字

select 字段名 from 表名 where 字段 in (数据 1, 数据 2...);
# in ⾥⾯的每个数据都会作为⼀次条件,只要满⾜条件的就会显示

具体操作

#查询id是1或3或5的学⽣
select * from student where id in(1, 3, 5);
#查询id不是1或3或5的学⽣
select * from student where id not in(1, 3, 5);

范围查询

between1 and2
# 表示从值 1 到值 2 范围,包头⼜包尾
# ⽐如: age BETWEEN 80 AND 100 相当于: age >= 80 && age <= 100

具体操作

#查询 english 成绩⼤于等于 75,且⼩于等于 90 的学⽣
select * from student where english between 75 and 90;

like关键字

# like 表示模糊查询
select * from 表名 where 字段名 LIKE '通配符字符串';

MySQL通配符

通配符说明
%匹配任意多个字符串
_匹配一个字符串

具体操作

#查询姓⻢的学⽣
select * from student where name like '⻢%';
select * from student where name like '⻢';
#查询姓名中包含'德'字的学⽣
select * from student where name like '%德%';
#查询姓⻢,且姓名有两个字的学⽣
select * from student where name like '⻢_';

排序

# 通过 order by⼦句,可以将查询出的结果进⾏排序(排序只是显示⽅式,不会影响数据库中数据的顺序)
select 字段名 from 表名 where 字段=order by 字段名 [asc|desc];
# asc: 升序,默认值
# desc: 降序

单列排序

单列排序:只按某一个字段进行排序。
具体实现

#查询所有数据,使⽤年龄降序排序
select * from student order by age desc;

组合排序

组合排序:对多个字段进行排序,如果第一个字段相等,按第二个字段排序,依次类推。

#语法
select 字段名 from 表名 where 字段=order by 字段名 1 [asc|desc], 字段名 2
[asc|desc];

具体实现

#查询所有数据, 在年龄降序排序的基础上, 如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;

聚合函数

之前的查询都是横向查询,它们都是根据条件一行一行判断,而聚合函数是纵向查询,它是对一列值进行计算,然后返回一个结果值。聚合函数忽略空值null。

SQL中的聚合函数作用
max(列名)求这一列的最大值
min(列名)求这一列的最小值
avg(列名)求这一列的平均值
count(列名)统计这一列有多少条记录
sum(列名)对这一列求总和
#语法
select 聚合函数(列名) from 表名;

ifnull()函数:可以使用该函数,如果记录为null,赋一个默认值
具体操作

select count(IFNULL(id, 0)) from student;

分组

# 分组查询是指使⽤ GROUP BY 语句对查询信息进⾏分组,相同数据作为⼀组
select 字段 1,字段 2... from 表名 group by 分组字段 [having 条件];

分组的目的是为了统计,一般和聚合函数一起使用

具体操作

#按性别进⾏分组,求男⽣和⼥⽣数学的平均分
select sex, avg(math) from student group by sex;

实际上是将每组的math求了平均,返回每组的统计结果。

当我们使用某个字段进行分组,在查询的时候也要将这个字段查询出来,否则看不到数据属于哪组。

查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据

#错误写法
SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex WHERE COUNT(*) >
2;
#正确写法 对分组查询的结果再进⾏过滤
SELECT sex, COUNT(*) FROM student WHERE age > 25 GROUP BY sex having COUNT(*) >
2;

where与having的区别

子局作用
where对查询结果进行分组前,将不符合where的条件行去掉,即在分组前过滤数据,先过滤再分组
havinghaving子局的作用是筛选满足条件的组,即在分组之后过滤数据。

where后面不可以使用聚合函数
having后面可以使用聚合函数

limit语句

limit是限制的意思,所以limit的作用是限制查询记录的条数。
limit语法

limit offset, length;
# offset: 起始⾏数,从 0 开始计数,如果省略,默认就是 0
# length: 返回的⾏数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值