1. as
关键字
1.1 应用场景
- 给字段、表起别名,增加可读性
- 自连接 的时候,必须要对表起别名
1.2 给字段起别名
select id as 序号, name as 名字, gender as 性别 from students;
1.3 给表起别名
-- 如果是单表查询 可以省略表名
select id, name, gender from students;
-- 表名.字段名
select students.id,students.name,students.gender from students;
-- 可以通过 as 给表起别名
select s.id,s.name,s.gender from students as s;
2. distinct
关键字
2.1 应用场景
distinct
可以去除重复数据行。
2.2 应用
select distinct 列1,... from 表名;
例: 查询班级中学生的性别
select name, gender from students;
-- 看到了很多重复数据 想要对其中重复数据行进行去重操作可以使用 distinct
select distinct name, gender from students;
3. where
条件查询
3.1 简介
- 使用
where
条件查询可以对表中的数据进行筛选,条件成立的记录会出现在结果集中
3.2 比较运算符
- 常见的比较运算符有
>,<,>=,<=,!=或<>
例1:查询编号大于3的学生:
select * from students where id > 3;
例2:查询编号不大于4的学生:
select * from students where id <= 4;
例3:查询姓名不是“黄蓉”的学生:
select * from students where name != '黄蓉';
例4:查询没被删除的学生:
select * from students where is_delete=0;
3.3 逻辑运算符
and
:多个条件同时成立则为真or
:表示多个条件有一个成立则为真not
:表示一对条件取反
例1:查询编号大于3的女同学:
select * from students where id > 3 and gender=0;
例2:查询编号小于4或没被删除的学生:
select * from students where id < 4 or is_delete=0;
例3:查询年龄不在10岁到15岁之间的学生:
select * from students where not (age >= 10 and age <= 15);
说明:
- 多个条件判断想要作为一个整体,可以结合‘()’。
3.4 模糊查询
like
是模糊查询关键字%
表示任意多个任意字符_
表示一个任意字符like
和%
可以结合使用表示任意多个任意字符
,like
和_
结合使用表示一个任意字符
例1:查询姓黄的学生:
select * from students where name like '黄%';
例2:查询姓黄并且“名”是一个字的学生:
select * from students where name like '黄_';
例3:查询姓黄或叫靖的学生:
select * from students where name like '黄%' or name like '%靖';
3.5 范围查询
between .. and ..
表示在一个连续的范围内查询in
表示在一个非连续的范围内查询
例1:查询编号为3至8的学生:
select * from students where id between 3 and 8;
例2:查询编号不是3至8的男生:
select * from students where (not id between 3 and 8) and gender='男';
3.6 空判断查询
- 判断为空使用:
is null
- 判断非空使用:
is not null
例1:查询没有填写身高的学生:
select * from students where height is null;
- 注意:
- 不能使用
where height = null
判断为空 - 不能使用
where height != null
判断非空 null
不等于 ‘’ 空字符串
4. 排序查询
4.1 语法
select * from 表名 order by 列1 asc|desc ,列2 asc|desc,...
语法说明:
- 排序使用
order by
关键字 asc
从小到大排列,即升序desc
从大到小排序,即降序- 默认按照列值从小到大排序(即
asc
关键字) - 先按照列1进行排序,如果列1的值相同时,则按照 列2 排序,以此类推
4.2 应用
例1:查询未删除男生信息,按学号降序:
select * from students where gender=1 and is_delete=0 order by id desc;
例2:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时 按照身高从高–>矮排序:
select * from students order by age desc,height desc;
5. 分页查询
5.1 简介
- 当在京东购物,浏览商品列表的时候,由于数据特别多,一页显示不完,一页一页的进行显示,这就是分页查询
5.2 语法
select * from 表名 limit start,count
说明:
limit
是分页查询关键字,可以限制数据显示数量start
:表示开始行索引,默认是0count
:表示查询条数
5.3 应用
例1:查询前3行男生信息:
select * from students where gender=1 limit 0,3;
简写
select * from students where gender=1 limit 3;
例2:
- 已知每页显示m条数据,求第n页显示的数据,查询学生表,获取第n页数据的SQL语句:
- 提示: 关键是求每页的开始行索引
select * from students limit (n-1)*m,m
6. 高级使用
6.1 将查询结果插入到其他表中
- 需求:目前只有一个goods表,想要增加一个商品分类信息,比如:移动设备这个分类信息
- 分析:
- 只通过goods表无法完成商品分类的添加
- 创建一个商品分类表,把goods表中的商品分类信息添加到该表中
- 将goods表中的分类名称更改成商品分类表中对应的分类id
- 创建商品分类表
-- 创建商品分类表
create table good_cates(
id int not null primary key auto_increment,
name varchar(50) not null
);
- 把goods表中的商品分类添加到商品分类表
-- 查询goods表中商品的分类信息
select cate_name from goods group by cate_name;
-- 将查询结果插入到good_cates表中
insert into good_cates(name) select cate_name from goods group by cate_name;
-- 添加移动设备分类信息
insert into good_cates(name) values('移动设备');
结论:
insert into .. select ..
: 把查询结果插入到指定表中,也就是表复制
6.2 使用连接 更新表中某个字段数据
- 需求:更新goods表中的商品分类信息
- 分析:
- 创建了一个商品分类表(good_cates),并完成了商品分类信息的插入
- 现在需要更新goods表中的商品分类信息,把商品分类名称改成商量分类id
- 将goods表中的分类名称更改成商品分类表中对应的分类id
-- 查看goods表中的商品分类名称对应的商品分类id
select * from goods inner join good_cates on goods.cate_name = good_cates.name;
-- 把该语句中from 后的语句理解为一张虚表
update goods g inner join good_cates gc on g.cate_name=gc.name set g.cate_name=gc.id;
- 结论:
- 连接更新表中数据使用:
update .. join ..
语句
- 连接更新表中数据使用:
6.3 创建表并给某个字段添加数据
- 需求:
- 想要添加一个品牌,比如:双飞燕这个品牌信息
- 分析:
- 创建一个品牌表,把goods表中的品牌信息添加到该表中
- 将goods表中的品牌名称更改成品牌表中对应的品牌id
- 查询品牌信息
select brand_name from goods group by brand_name;
- 创建品牌表
- 通过create table …select来创建数据表并且同时插入数据
- 创建商品分类表,注意:需对
brand_name
用as
起别名,否则name
字段就没有值
create table good_brands (
id int unsigned primary key auto_increment,
name varchar(40) not null) select brand_name as name from goods group by brand_name;
- 更新goods表中的品牌信息
- 将goods表中的品牌名称更改成品牌表中对应的品牌id
update goods as g inner join good_brands gb on g.brand_name = gb.name set g.brand_name = gb.id;
- 结论:
create table .. select 列名 ..
:创建表并插入数据
6.4 修改goods结构
- 需求:接下来需要把
cate_name
和brand_name
字段分别改成cate_id
和brand_id
字段,类型都改成int
类型 - 分析:目前已经把good表中的商品分类和品牌信息已经更改成了商品分类id和品牌id
- 查看表结构
desc goods;
- 修改表结构
alter table goods change cate_name cate_id int not null, change brand_name brand_id int not null;
- 结论:
- 修改表结构可以使用:
alter table
语句,多个修改字段之间使用 逗号 分隔 alert table
: 可以同时修改多个字段信息
- 修改表结构可以使用: