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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
插入记录
# 不指定字段名称
insert tbl_name value(值,...);
# 指定字段名称
insert tbl_name(字段名称,...) value(值,...);
# 一次插入多条记录
insert tbl_name[(字段名称,...)] values(值,...),(值,...),(值,...);
修改记录
update tbl_name set 字段名称=值,... [where 条件]
注意添加where条件,如果不添加条件,整个表中的记录都会被更新
删除记录
delete from tbl_name [where 条件]
注意如果不添加where条件,整个表中的记录都会被删除
查询记录
select * from tbl_name
[where 条件{like 匹配字符 % 任意长度字符串 _ 任意一个字符}]
[group by {col_name|position} HAVING 二次筛选 分组]
[order by {col_name|position|expr}[asc|desc] 排序]
[limit 限制结果集的显示条数]
# group by 分组
把值相同放到同一个组中,最终查询的结果只会显示组中的一条记录
分组配置group_concat()函数查看组中某个字段的详细信息
配合聚合函数使用
count() sum() max() min() avg()
-- 按照sex分组,得到用户名详情,并且分组中的总人数
select sex, group_concat(username) as usersDetail, count(*) as totalUsers from tbl_name group by sex;
having 子句对分组结果进行二次筛选,(等同意where进行第一次筛选)
-- 查询按照addr分组,并对于分组结果进行二次筛选,条件是组中人数 >=3
select addr,
group_concat(username) as userDetail,
count(*) as totalUsers,
from tbl_name
group by addr
having count(*)>=3;
# order by 排序
order by 字段名称 asc|desc | rand() 默认升序asc
-- 按照多个字段排序
select id, username, age
from tbl_name
order by age asc, id asc;
# limit 限制结果集显示条数
主要用于分页
--显示结果集的前5条记录
select id, username, age, sex
from tbl_name
limit 0,5; --0 偏移量,从0开始
多表查询
笛卡尔积的形式(不推荐)
内连接形式**
查询两个表中符合连接条件的记录
select 字段名称,... from tbl_name1
[inner] join tbl_name2
on 连接条件
-- 测试
select e.id, e.username, e.age, d.depName
from emp as e
[inner] join dep as d
on e.depID=d.id
外连接形式(会把主表的记录全部显示出来)
#左外连接
先显示左表中的全部记录,再去右表中查询符合条件的记录,不符合以null代替
select 字段名称,... from tbl_name1
left [outer] join tbl_name2
on 连接条件
#右外连接
先显示右表中的全部记录,再去左表中查询符合条件的记录,不符合以null代替
select 字段名称,... from tbl_name1
right [outer] join tbl_name2
on 连接条件
|