一、常用语句
1.删除表中所有数据
DELETE FROM 表名;
2.计算表中数据条数
select count(1) from 表名;
3.查询表中去重后数据条数
select count(distinct name) from 表名; --表中name去重后的数目
提示:count不能统计多个字段,需使用嵌套查询
select count(*) from (select distinct xing, name from 表名) AS M;
4.选取 name 以字母 "G" 开始的所有数据
提示:"%" 符号用于在模式的前后定义通配符(默认字母),通配符可用于替代字符串中的任何其他字符,"%"可替代 0 个或多个字符
SELECT * FROM 表名 WHERE name LIKE 'G%';
5.选取 name 为 "a" 或 "c" 的所有数据
SELECT * FROM 表名 WHERE name IN ('a','c');
等同于
select * from 表名 where name='a' or name='c';
提示:IN 与 =在WHERE中使用作为筛选条件之一,均是等于的含义,但IN可以规定多个值,等于只能规定一个值
6.多表连接查询--在逻辑上可看作是由SELECT语句指定的列组成的新表
SELECT 表A.xing,表B.name
FROM 表A
INNER JOIN 表B
ON A.id=B.site_id --连接条件
ORDER BY 表A.id
提示:不同的SQL JOIN 类型
- INNER JOIN:如果表中有至少一个匹配,则返回行
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN:只要其中一个表中存在匹配,则返回行
7.表中插入新数据
(1)不指定要插入数据的列名,只提供被插入的值即可
- 注意:不指定要插入数据的列名时,需要列出插入行的每一列数据
INSERT INTO purchase_supplier
VALUES (1,"啊啊啊",1,1,"JJ001",1,0,"2020-05-26 11:24:41","2020-05-26 11:24:41");
#插入多条数据
INSERT INTO purchase_supplier
VALUES (3,"啊23",1,1,"JJ002",1,0,"2020-05-26 11:24:41","2020-05-26 11:24:41"),(4,"啊啊啊啊3",1,2,"JJ004",1,0,"2020-05-26 11:24:41","2020-05-26 11:24:41");
(2)需指定列名及被插入的值
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
8.更新表中字段
update 表名 set 字段名=值 where 筛选条件;
9.时间筛选
SELECT * FROM `表名` WHERE placed_at>='2020-06-01' AND placed_at<='2020-06-02';
SELECT * FROM `表名` WHERE placed_at LIKE '%2020-06-01%' ;
10.倒序
select * from 表名 order by 字段名 desc
二、常见报错
1.Duplicate entry 'b' for key 'name'
A:键值b重复,换一个键值
2.1093 - You can't specify target table 'order_packet_sku' for update in FROM clause
- 不能先select出同一表中的某些值,再update这个表(在同一语句中)
- 修改思路:把结果集当作一个表,自我查询一遍
3.1248 - Every derived table must have its own alias
- 每个派生出来的表都必须有一个自己的别名
- 修改思路:加一个没有任何作用的别名t
#在同一张表中先select再update同时操作的正确例子
UPDATE `A` set sku_id=100059,count=1,delivery_count=0 WHERE id=(SELECT id from (select * from A order by id DESC limit 1) as t);
#在同一张表中先select再update同时操作的错误例子,会报错2
UPDATE `A` set sku_id=100059,count=1,delivery_count=0 WHERE id=(select MAX(id) from `A`);