Mysql数据查询

知识点

基本查询

1
2
3
4
5
6
7
8
9
10
11
# 查询所有字段
select * from 表名;

# 查询指定字段
select 字段1, 字段2, ... from 表名;

# 使用表别名
select 别名.字段1, 别名.字段2, ... from 表名 as 别名;

# 消除重复项
select distinct 字段1, 字段2, ... from 表名;

条件查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 比较运算符:>、<、=、>=、<=、!= (<>)
select * from 表名 where 条件;

# 逻辑运算符:and、or
select * from 表名 where 条件1 and 条件2;
# 表示非:not
select * from 表名 where not(条件);

# 模糊查询:like
# %:表示替换1个或者多个
# _:表示替换一个
select * from 表名 where 字段名 like "小%" or 字段名 like "小_";

# 正则查询:rlike
select * from 表名 where 字段名 rlike "^周\w*伦$";

范围查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# in:表示范围.用于非连续性的
select * from 表名 where 字段名 in (1, 2, 3);

# not in:表示不在范围
select * from 表名 where 字段名 not in (1, 2, 3);

# between ... and ...:表示连续性的范围,范围包括首尾
select * from 表名 where 字段名 between 1 and 18;

# not between ... and ...:表示不再范围
select * from 表名 where 字段名 not between 1 and 18;

# is null:空查询
select * from 表名 where 字段名 is null;

# is not null:空查询
select * from 表名 where 字段名 is not null;

排序

1
2
3
4
# order by:设置排序
# asc:设置升序,默认升序
# desc:设置逆序
select * from 表名 where 条件 order by 字段名 asc, 字段名 desc;

聚合、分组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 聚合函数
# count():计算总数
select count(*) as 别名 from 表名 where 条件

# max():计算最大值
select max(列名) as 别名 from 表名 where 条件

# min():计算最小值
select min(列名) as 别名 from 表名 where 条件

# sum():求和
select sum(列名) as 别名 from 表名 where 条件

# avg():计算平均值
select avg(列名) as 别名 from 表名 where 条件

# round():计算保留小数值
select round(列名, 保留的小数位数) from 表名 where 条件

# group by:分组;聚合是和分组在一起使用的,取出的结果只能是分组的字段和聚合信息
select 字段名1,字段名2, count(*) from 表名 where 条件 group by 字段名1, 字段名2

# group_concat(字段, 拼接字符, ...):获取分组后各分组后的元素的信息
select age, group_concat(name, ":", age, " ", id) from 表名 where 条件 group by age;

# having:对分组后的数据再次进行依次筛选,一般是对聚合结果的筛选
select gender, group_concat(name) from 表名 where 条件 group by gendar having svg(age) > 30;

分页

1
2
3
4
5
6
# limit永远放在sql语句的最后,否则会报错
# limit num:限制一次取出显示的数据个数
select * from 表名 where 条件 limit 5

# limit start,count:从符合条件的数据中从第start条数据开始取,一直取到count条数据为止
select * from 表名 where 条件 limit 1, 5

链接查询

1
2
3
4
5
6
7
8
9
10
11
12
# inner join A表 on B表:查询A表、B表中相互重合的数据,相当于A∩B的结果
select * from 表1 inner join 表2 on 表1.字段 = 表2.字段

# left join A表 on B表:查询A表中所有的数据,以及B中和A中重合的数据,不重合的字段数据默认为NULL,相当于A
select * from 表1 left join 表2 on 表1.字段 = 表2.字段

# right join A表 on B表:查询B表中所有的数据,以及B中和A中重合的数据,不重合的字段数据默认为NULL,相当于B
select * from 表1 right join 表2 on 表1.字段 = 表2.字段

# 对查询出的结果进行条件筛选就用having,由此可以将链接查询的条件筛选用having表示
# 对取数据的条件筛选就用where。
select * from 表1 right join 表2 on 表1.字段 = 表2.字段 having 筛选条件

自关联

1
2
3
4
# 导入外部sql文件
source xxx.sql
# 自关联就是在同一张表中进行链接查询,利用as将链接查询的两个表进行区分开
select * from 表 as name1 inner join 表 as name2 on name1.字段 = name2.字段 having 条件

子查询

1
2
# 子查询:将一个select的结果当前另一个select的条件来进行查询
select * from 表名 where 表名.字段 in (select 字段 from 表名 where 条件)

数据库设计

  1. 数据库设计核心:

    满足3NF(数据库设计范式)、满足E-R模型

  2. 3NF

    • 1NF:强调列的原子性,即列不能够再分为其它几列
    • 2NF:在1NF基础上在补充两部分内容:一个表必须要有主键;没有包含在主键中的列必须完全依赖主键,而不是只依赖于主键的一部分
    • 3NF:在2NF基础上补充内容:非主键列必须完全依赖主键,不能存在传递依赖,即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况
  3. E-R模型:实体-关系模型

    • A对B是一对一关系:在A或B中创建一个字段,存储另一个表的主键值
    • A对B是一对多关系:在B中创建一个字段,用于存储A的主键值
    • A对B是多对多关系:新建一个表C,该表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值
  4. 逻辑删除

    • 重要数据的删除:设置isdelete列,类型为bit,表示逻辑删除,默认值为0
    • 非重要数据的删除:物理删除

汇总

便于记忆:脑图