Bootstrap

MySQL数据库查询语法

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 模糊查询

  1. like是模糊查询关键字
  2. %表示任意多个任意字符
  3. _表示一个任意字符
  4. 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;
  • 注意:
  1. 不能使用 where height = null 判断为空
  2. 不能使用 where height != null 判断非空
  3. 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:表示开始行索引,默认是0
  • count:表示查询条数

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
  1. 创建商品分类表
-- 创建商品分类表
create table good_cates(
    id int not null primary key auto_increment, 
    name varchar(50) not null
);
  1. 把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
  1. 查询品牌信息
select brand_name from goods group by brand_name;
  1. 创建品牌表
  • 通过create table …select来创建数据表并且同时插入数据
  • 创建商品分类表,注意:需对 brand_nameas 起别名,否则 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;
  1. 更新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_namebrand_name 字段分别改成 cate_idbrand_id 字段,类型都改成int类型
  • 分析:目前已经把good表中的商品分类和品牌信息已经更改成了商品分类id和品牌id
  1. 查看表结构
desc goods;
  1. 修改表结构
alter table goods change cate_name cate_id int not null, change brand_name brand_id int not null;
  • 结论:
    • 修改表结构可以使用: alter table 语句,多个修改字段之间使用 逗号 分隔
    • alert table: 可以同时修改多个字段信息
;