一、单表查询
1.1 查找
select 字段 from 表名
1.1.1 从student表中查找字段
从student表中查找name、sex、age 字段:
select name,sex,age from student
1.1.2 查找student表中的全部内容
select * from student
1.1.3 根据条件查找student表中的内容(where子语句)
找出student表中id = 5的一条记录的内容:
select * from student where id = 5
可使用的运算符:=、>=、<=、<>(不等于)、!=(不等于)
1.1.3.1 逻辑运算符
逻辑运算符 | 描述 |
and | 并且 |
or | 或者 |
not | 非(常在is,in后使用) |
查找student表中age字段大于14且小于27的记录:
select * from student where age >= 14 and age <= 27
查找student表中age字段小于14或大于27的记录:
select * from student where age <= 14 or age >= 27
1.1.3.2 between...and... 介于两个值之间
查找student表中age字段在14到25之间的记录
select * from student where age between 14 and 25
1.1.3.3 in 包含(常配合not使用)
从student表中查找age为14或25的记录
select * from student where age in(14,25)
注:在in前加not意为不在该范围内:(从student表中查找age不为14和25的记录)
select * from student where age not in(14,25)
1.1.3.4 模糊查找:like
配合占位符使用: _表示一位字符;%表示任意位字符
例1:从student表中查找name字段中有“张” 的记录
select * from student where name like "%张%"
例2:从student表中查找name字段中第二位为“张” 的记录
select * from student where name like "_张%"
1.1.3.5 is null 为空(常配合not使用)
select * from student where sex is null
select * from student where sex is not null
1.1.4 对查找得到的内容进行排序(order by)
从student表中查找sex字段为“女”的记录,并根据创建时间(即createtime)进行降序(desc)排列,若进行升序排列则使用关键字 asc(可省略)。
select * from student where sex = "女" order by createtime desc
1.1.5 分页查询(限制查询)limit
两种表示形式:
limit a,b
limit b offset aa表示起始索引值 b表示要查询的个数
从索引值为3的记录开始,查询5条记录:
select * from student limit 3,5
select * from student limit 5 offset 3
在项目中可以将起始索引值及查询个数用变量代替:
select * from student limit (page-1)*pageSize,pageSize
其中,page为当前页码,pageSize表示页面大小(即一页展示的数据量)
1.1.6 聚合函数 分组函数
函数 | 描述 |
sum() | 求和 |
avg() | 求平均 |
max() | 求最大值 |
min() | 求最小值 |
count() | 返回取得的记录数量 |
group by 字段名称 | 分组函数 |
注:count(字段名称)不统计为null的记录
举例:根据cid进行分组,分别查询每一组中age字段最大值
select max(age),cid from student group by cid
1.2 添加(insert)
insert into content(字段1,字段2,字段3) values(值1,值2,值3)
若字段名和关键字冲突,可将字段名置于反引号中:(例:desc)
insert into content(title,`desc`,createtime,author) values('查询','sql语句','2025-02-05 16:37:50','我嘞个ddd' )
1.3 删除(delete)
delete from student where id = 5
注:where子语句中条件可参考1.1.3。
1.4 修改(update)
update 表名 set 字段1=值1,字段2=值2,字段3=值3 where id =5
注:where子语句中条件可参考1.1.3。
1.5 查数量(count)
返回student表中共有多少条记录:
select count(*) from student
其中,count(*)中 * 可替换为具体的某一字段,但不统计该字段为null的记录。
二、连表查询(以查找为例)
一个班级拥有多名学生,若将两张表合并,会造成班级的重复查询,导致数据冗余,因此,可在学生表中设置外键,即cid,若学生表中cid与班级表中id相同,则该学生即在对应的班级中:
select * from 学生表,班级表 where 学生表.cid = 班级表.id
查询结果:
在查询时可利用as对字段进行重命名(as 可省略):
select s1.*,classname as 班级名 from 学生表 as s1,班级表 as s2 where s1.cid = s2.id
该sql语句意为将学生表及班级表分别重命名为s1,s2,并查询学生表中的全部字段及班级表中的classname字段(该字段被重命名为班级名)。查询结果如下:
as省略后的sql语句为:
select s1.*,classname 班级名 from 学生表 s1,班级表 s2 where s1.cid = s2.id
其查询结果不发生改变。
2.1 内连接 inner join ... on...
查询两表的交集
select * from 学生表 join 班级表 on 学生表.cid = 班级表.id
查询结果:
2.2 外连接
2.2.1 左外连接
以左侧表为主(查询全部),右侧表没有的部分显示null:
select * from 学生表 left join 班级表 on 学生表.cid = 班级表.id
查询结果:
2.2.2 右外连接
以右侧表为主(查询全部),左侧表没有的部分显示null:
select * from 学生表 right join 班级表 on 学生表.cid = 班级表.id
查询结果: