一、插入数据
1. 不指定字段名
insert into table_name values(value1, value2....)
2. 指定字段名
insert into table_name(col_name1, col_name2...) values(value1, value2....)
3. 同时插入多条记录
insert into table_name(col_name1, col_name2...) values(value1, value2....), (value1, value2....), (...)
4. 从目标表中插入值
insert into table_name[col_name1, col_name2...] select super_col_name1,super_col_name2,... from super_table
5. 将一条或多条记录插入表中,或将一张表的结果集插入到目标表中
replace [into] table_name values(value1, value2 ...)
使用replace语句添加记录时,若新记录的主键值或唯一性约束的字段值与已有的记录相同,则已有的记录被删除后再添加新记录。
6. 注意
可以通过使用第二种方法为表插入部分字段的数据。若字段没有设置默认值,且为非空,则必须为其插入数据。
二、修改数据
update table_name set col_name1=value1, col_name2=value2,... where 条件表达式
三、删除数据
1. 删除表数据
delete from table_name [where 条件表达式]
2. 清空表数据
truncate table table_name
3. 注意
truncate语句与不使用where的delete语句在功能上相同,但truncate速度更快。
truncate语句在清空表数据后会重置自增型字段的计数起始值为1,而delete语句没有重置该值。
四、单表查询
1. 查询语句
1.1 语法格式
select [all | distinct] {字段列表 | *} from 表名或视图名列表 [where 条件表达式] [group by col_name] [having 条件表达式] [order by col_name> [ASC |? DESC]] [limit 字句]
1.2 参数说明
参数 | 说明 |
---|---|
all | 显示所有行,包括重复行 |
distinct | 显示结果不包括重复行 |
group by | 按照列名对指定字段进行分组。若后面带有having语句,则需先满足条件表达式 |
having | 指定分组的条件 |
order by | 对查询结果进行排序,ASC表示升序,DESC表示降序 |
limit | 限制输出结果的行数 |
1.3 例子
2. 查询语句为字段名取别名
2.1 作用:直观显示
2.2 语法格式
select [all | distinct] {col_name [as] [别名], ...} from 表名或视图名列表?...
2.3 例子
3. 条件查询
3.1 使用关系运算符、逻辑运算符
3.2 IN关键字
[not] in (x1,x2...)
3.3 BETWEEN AND关键字
[not] between x1 and x2
3.4 IS NULL关键字
is [not] null
注意点 :
-- 查询zno为null的记录
select * from student where zno is null
-- 查询zno为字符串"null"的记录
select * form studnet where zno=null
3.5 LIKE关键字
(1)语法格式:[not] like 'str'
(2)注意点
- str可以包含'%'、'_'、正则表达式。%表示任意长度的字符串,_表示单个字符。
- LIKE匹配整个列,如果被匹配的文本仅在列值中出现,LIKE不会找到它,相应的行也不会返回。而REGEXP在列值内进行匹配,如果被匹配的文本仅在列值中出现,REGEXP不会找到它,相应的行会返回。
- ESCAPE<转化码>:可以在'%'、'_'前添加转化码,对通配符进行转移,使其称为普通字符。如 'stu%2018__' ESCAPE ''
4. 高级查询
4.1 分组查询
group by col_name
4.2 结果排序
order by col_name [ASC | DESC]
4.3 限制查询数量
limit {[offset, ] row_count | row_count OFFSET offset}
4.4 聚合函数
函数 | 说明 |
---|---|
count | 统计记录的条数 |
sum | 计算字段值总和 |
avg | 计算字段值平均值 |
max | 查询字段最大值 |
min | 查询字段最小值 |
注意点 :
- 对于函数sum、avg、max、min,若列中所有值为null,则结果为null;若列中部分值为null,则只计算非null部分。
- 对于函数sum、avg,若之间结果为空,则结果为null。
4.5 合并查询结果
select ... union [ALL | DISTINCT] [select ... union [ALL | DISTINCT]] select ...
如:查询女生信息或年龄少于18的信息
select * from student where sex='女' union select * from student where age<=18;
五、多表查询
1. 内连接查询
1.1 等值连接
select * from sc INNER JOIN course ON sc.cno=course.cno limit 4;
1.2 自然连接
select * from sc NATURAL JOIN course limit 4;
特点:自然连接会把目标列中重复的属性列去掉。
1.3 不等值连接
select * from sc INNER JOIN course ON sc.cno != course.cno limit 4;
2. 外连接查询
外连接查询中,如左外连接,会保留左表的所有记录,然后按照连接条件连接右表,若右表没有满足的记录则填充 NULL。
select statement from table_1 LEFT|RIGHT [OUTER] JOIN table_2 on table_1.col_name = table_2.col_name;
3. 子查询
子查询返回true时,外查询进行查询,否则外查询不进行查询。其中,options是比较运算符,如=、!=、>、<。
3.1 带IN
select statement from table_name where col_name [NOT] IN (select 子句);
3.2 带EXISTS
select statement from table_name where col_name EXISTS (select 子句);
3.3 带ANY
select statement from table_name where col_name options ANY (select 子句);
3.4 带ALL
select statement from table_name where col_name options ALL (select 子句);
面试题:truncate、delete、drop有什么区别?
删除内容 | 删除定义 | 释放空间 | |
---|---|---|---|
delete | ✔ | ||
truncate | ✔ | ✔ | |
drop | ✔ | ✔ | ✔ |