前言
查询基础语法
在删除、修改以及查找都可以使用where语句,用来筛选满足特定条件的数据。
语法:
select column1,column2··· from table_name where condition;
若要显示所有列,可用*代替列名。
select *from table_name;
其中column表示指定列,table_name 表示表名,condition 表示特定条件。
运算符
条件关系运算符 | 含义 | 条件逻辑运算符 | 含义 |
---|---|---|---|
> | 大于 | and | 并且 |
< | 小于 | or | 或 |
= | 等于 | not | 取反 |
!=或<> | 不等于 | ||
>= | 大于等于 | ||
<= | 小于等于 |
示例:
-- 查询年龄不等于18的学生信息
select *from students where stu_age <>18;
区间查询- between and
示例:
-- 查找年龄在[14,17]区间内的学生信息
select *from students where stu_age between 14 and 17;
模糊查询-like
在where子句中可以使用like关键字来实现模糊查询。
语法:
select *from table_name where colunm like 'reg';
其中table_name表示表名,column表示指定列,
like关键字的'reg'表达式中
- %表示任意多个字符(%o%表示包含o的字符串)
- _表示任意一个字符(_o%表示第二个字母为o的字符串)
示例:
-- 查询姓李的学生信息
select *from students where stu_name like '李%';
-- 查询名字最后一个字为'美'的学生信息
select *from students where stu_name like '%美';
-- 查询名字里有'小'字的学生信息
select *from students where stu_name like '%小%';
查询结果排序-order by
可以在查询语句中添加order by 子句实现对查询结果的升序/降序排列。
语法:
select *from table_name where condition order by column asc|desc;
其中table_name 表示表名,condition表示特定条件,column表示指定列,asc表示升序(默认),desc表示降序。
示例:
-- 查询年龄小于18岁的学生信息并按学号升序排列,默认升序可省略asc
select *from students where stu_age <18 order by stu_num asc;
-- 查询年龄小于18的学生信息,先按性别升序排列再按年龄降序排列
select *from students where stu_age <18 order by stu_gender asc,stu_age desc;
聚合函数
-
count()
统计函数,统计满足特定条件的指定字段值的个数。
示例:
-- 统计学生表中人数
select count(stu_num) from students;
-- 统计学生表中年龄大于18的人数
select count(stu_num) from students where stu_age >18;
-
max()/mim()
最值函数,计算最大(小)值,查询满足条件的记录中指定列的最大(小)值。
示例:
-- 查询学生表中最大年龄
select max(stu_age) from students;
-- 查询学生表中女生最小年龄
select min(stu_age) from students where stu_gender='女';
-
sum()
求和函数,查询满足条件的记录中指定列的值的总和。
示例:
-- 查询学生表中学生年龄和
select sum(stu_age) from students;
-- 查询学生表中女生年龄和
select sum(stu_age) from students where stu_gender='女';
-
avg()
平均值函数,查询满足条件的记录中指定列的平均值。
示例:
-- 查询学生表中学生平均年龄
select avg(stu_age) from students;
-- 查询学生表中男生平均年龄
select avg(stu_age) from students where stu_gender='男';
日期函数
当我们向日期类型的列赋值时,可以通过字符串类型赋值。
示例:
insert into students(stu_num,stu_name,stu_age,stu_qq,stu_gender,stu_time)
values('2022401','小毓',22,'1237327','女','2023-07-17 16:29:12');
若要获取当前系统时间添加到列,可使用now()或sysdate()函数。
示例:
insert into students(stu_num,stu_name,stu_age,stu_qq,stu_gender,stu_time)
values('2022402','小文',18,'3237327','男',now());
字符串函数
-
concat()
指定字符拼接多列。
示例:
select concat(stu_name,'-',stu_num,'-',stu_gender) from students;
-------------------------------------------+
小毓-2022401-女 |
小文-2022402-男 |
-
upper()
将指定列的值转换为大写。
示例:
select upper(stu_name) from students;
---------------+
小毓 |
小文 |
BOB |
-
lower()
将指定列的值转换为小写。
-
substring()
从指定列中截取部分。
示例:
-- 查询学生表中学生姓名,截取学号从第4位开始后3位。
select stu_name,substring(stu_num,4,3) from students;
--------+----------------------+
李华 |266 |
小美 |266 |
小马 |266 |
小王 |266 |
小李 |266 |
小毓 |240 |
小文 |240 |
bob |241 |
分组查询-group by
将数据表中的记录按照指定的类进行分组。
语法:
select 分组字段/聚合函数
from 表名
[where 条件]
group by 分组列名
[having 条件]
[order by 排序字段]
其中[ ]中语句可有可无,having是对分组后的结果进行过滤,而where是对未分组的数据进行过滤。having必须与group by一起使用。
语句执行:先根据where条件在数据库中查询记录,group by 对查询记录进行分组,执行having对分组后的数据进行筛选。
示例:
-- 查询学生表中,按性别分组,再统计人数
select stu_gender,count(stu_num) from students group by stu_gender;
stu_gender|count(stu_num)|
----------+--------------+
女 | 5|
男 | 3|
-- 查询学生表中,按年龄分组,女生中相同年龄人数大于1的人数,按年龄升序排列
select stu_age,count(stu_num) from students where stu_gender='女'
group by stu_age having count(stu_num)>1
order by stu_age;
stu_age|count(stu_num)|
-------+--------------+
15| 2|
17| 2|
18| 3|
分页查询-limit
当数据表中的记录较多时,可以使用limit子句进行分页展示,该子句允许你指定查询结果中的起始位置和返回的记录数。
语法:
select column1, column2, ...
from table_name
[where conditions]
limit [start,] length;
其中,start参数是可选的,表示查询结果的起始位置。如果未指定 start
参数,则默认为 0(即从第一行开始)。length
参数是必需的,表示返回的记录数。
示例:
-- 第一页,查询学生表中,从第一行开始返回五条记录
select *from students limit 5;
stu_num|stu_name|stu_age|stu_qq |stu_gender|stu_time|
-------+--------+-------+--------+----------+--------+
2022668|李华 | 18|21213213|女 | |
2022667|小美 | 15| |女 | |
2022666|小马 | 12|12211345|女 | |
2022669|小王 | 14|2121232 |男 | |
2022666|小李 | 17|2124232 |女 | |
-- 第二页,查询学生表中,从第六行返回五条记录
select *from students limit 6,5;
stu_num|stu_name|stu_age|stu_qq |stu_gender|stu_time |
-------+--------+-------+-------+----------+-------------------+
2022402|小文 | 18|3237327|男 |2023-07-17 16:45:06|
2022412|bob | 18|3237227|男 |2023-07-17 17:06:44|
2022789|小雨 | 17| |女 | |
2022871|福克斯 | 15| |女 | |
2022766|小海 | 18| |女 | |