目录
表的CRUD(Create,Retrieve,Update,Delete),即增删改查。
1. 增加
- 语法
隐含列插入,给表中的所有字段添加数据
insert into table_name values (value [,value...]);
指定列插入,只给表的某几个字段赋值,需要指定字段名
insert into table_name[(column[,column...])] values (value [,value...]);
逐条插入
insert into table_name[(column[,column...])] values (value [,value...]);
批量插入
insert into table_name[(column[,column...])] values (value [,value...]),(value [,value...]),(value [,value...]);
- 注意:
- 插入的数据应与字段的数据类型相同
- 数据的大小应在规定的范围内
- 在values中列出的数据位置必须与被加入的列位置相对应
- 字符和日期类型应该包含在单引号中
- 插入空值,不指定或指定为 null
- 当插入时,主键出现冲突可以利用更新操作更改主键对应的其他数据。(找相同,先插后删)
insert into 表名(字段列表) values(值列表) on duplicate key update 字段=新值;
- 若主键没有冲突,直接插入数据
replace into 表名(包含字段) values(值列表);
2. 修改
- 语法
update tbl_name set col_name1=expr1, [, col_name2=expr2 ...] [where conditon] [limit n];
- 注意
- update 语法可以用新值更新原有表中的各列值
- set子句指示要修改的列和要新赋的值
- where子句指定应更新哪些行。如果没有where子句,则更新所有行。
- where子句后面指定limit,更新符合条件的限制数量的行。
3. 删除
- 语法
delete from table_name [where condition];
truncate table table_name;
- delete、truncate和drop删除整表的区别
- delete只删除表中数据,表的结构保留,不释放空间;truncate清空数据、释放空间;drop删除内容和定义,释放空间
- delete可以rollback,truncate不可以rollback
- delete属于DML,truncate和drop属于DDL
- delete后空间不变,truncate后空间回到初始化时,drop后所有空间被释放
- 速度:drop > truncate > delete
- delete返回被删除的记录数,而truncate返回0
- 清空表数据,建议使用truncate
- delete注意:
- 只能删除一行数据,不能删除一列数据
- 复制表结构
create table new_table_name like exist_table_name;
- 复制表中数据
insert into new_table_name select * from exist_table_name;
4. 查询
-
4.1 简单查询
- 语法
select [distinct] *| {column1,column2,...} from tbl_name [where condition];
- * 表示查询所有列 ,效率低
- distinct 去除重复行
- select语句中可以使用as起别名
-
4.2 where子句
在select中使用where子句,进行查询过滤。where后不能用select语句后指定的别名
-
4.3 order by子句
在select语句中使用order by子句排序查询结果
-
语法
select column1,column2,... from table order by column asc|desc,...;
- 注意
- order by 指定排序的列,排序的列可以使表中的列名,也可以是select语句后指定的别名
- asc升序(默认),desc降序
- order by 子句应该位于select语句的结尾
-
4.4 limit分页
- 语法
select 字段 from 表名 where 条件 limit 起始位置 ,记录条数
select 字段 from 表名 where 条件 limit 记录条数 offset 起始位置
5. 聚合函数
-
5.1 count
返回某一列,行的总数
- 语法
select count(*)|count(列名) from tbl_name where condition;
- count(*)会统计一共的记录数,count(列名)会排除为null的情况
-
5.2 sum
返回满足where条件的列中数据的和
sum仅对数值起作用,否则结果无意义。
- 语法:
select sum(列名) {,sum(列名)...} from tbl_name [where condition];
-
5.3 avg
返回满足where条件的一列的平均值
- 语法
select avg(列名) [,avg(列名),...] from tbl_name [where condition];
-
5.4 max/min
返回满足where条件的一列的大/小值
- 语法
select max/min(列名) from tbl_name [where condition]
6. group by子句
在select中使用group by 子句可以对指定列进行分组查询
- 语法
select column1, column2, .. from table group by column;
- group by不能和where搭配使用,应该与having搭配
SQL查询中各个关键字的执行先后顺序
from > on > join > where > group by > with > having > select > distinct > order by > limit