常见SQL语句

一、常用语句

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`);
原文地址:https://www.cnblogs.com/jasmine0112/p/12559341.html