NoteOfMySQL-06-数据操作

一、插入数据

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...)

IN关键字

3.3 BETWEEN AND关键字

[not] between x1 and x2

BETWEEN AND关键字

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
posted @ 2020-11-30 09:28  步平凡  阅读(88)  评论(0编辑  收藏  举报