​MYSQL中常用的SQL语句​(增删改查)
2022-12-7 11:46:11 Author: 安全info(查看原文) 阅读量:5 收藏

一、增删改查

1.新增

指定字段插入:

INSERT INTO <表名> (<字段1>, <字段2>, <字段3>) VALUES (<值1>, <值2>, <值3>);

不指定字段插入:

INSERT INTO <表名> VALUES (<值1>, <值2>, <值3>);

一次插入多条数据:

INSERT INTO <表名> VALUES (<值1>, <值2>, <值3>), (<值4>, <值5>, <值6>);
INSERT INTO <表名> (<字段1>, <字段2>, <字段3>) VALUES (<值1>, <值2>, <值3>), (<值4>, <值5>, <值6>);

将查询结果插入新表:

INSERT INTO <表名1> SELECT * FROM <表名2>;

将查询部分字段插入新表:

INSERT INTO <表名1> (<字段1>, <字段2>) SELECT <字段3>,<字段4> FROM <表名2>;

复制表:

CREATE TABLE <表名1> SELECT * FROM <表名2>;

2.删除

条件删除:

DELETE FROM <表名> WHERE <字段> = 3;

全部删除(一行一行删):

快删:

DROP TABLE IF EXISTS <表名>;

3.修改

条件修改:

UPDATE <表名> SET <字段> = <新的值> WHERE <字段> =

全部修改:

UPDATE <表名> SET <字段> = <新的值>

修改多个字段:

UPDATE <表名> SET <字段1> = <值1>, <字段2> = <值2>;

使一列的值与另一列的值相等:

UPDATE <表名> SET <字段1> = <字段2>;

4.查询

全量查询:

去重查询某列:

SELECT DISTINCT <字段1>, <字段2> FROM <表名>;

比较运算:

SELECT * FROM <表名> WHERE id >= 3;

IN:

SELECT * FROM <表名> WHERE id IN (1, 2, 3);

BETWEEN AND:

SELECT * FROM <表名> WHERE id BETWEEN 1 AND 3;

NOT NULL:

SELECT * FROM <表名> WHERE id IS NOT NULL;

AND / OR:

SELECT * FROM <表名> WHERE id = 3 AND name = 'ming';

模糊查询(%为通配符,_为匹配任意一个字符,[charlist]为字符列中的任意单个字符):

SELECT * FROM <表名> WHERE <字段> LIKE '%';

正则匹配查询:

SELECT * FROM <表名> WHERE <字段> REGEXP '^[aeiou]|ok$';

起别名:

SELECT <字段> AS <别名> FROM <表名>;

合并两张表并去除重复值:

SELECT <字段1> FROM <表名1> UNION SELECT <字段1> FROM <表名2>;

合并两张表非去重:

SELECT <字段1> FROM <表名1> UNION ALL SELECT <字段1> FROM <表名2>;

分组:

SELECT <字段1>, <字段2>, COUNT(<字段1>), COUNT(<字段2>) FROM <表名> GROUP BY <字段1>, <字段2>;

分组 + 条件:

SELECT * FROM <表名> GROUP BY <字段> HAVING COUNT(*) > 1;

排序查询,正序ASC,逆序DESC:

SELECT * FROM <表名> ORDER BY <字段> DESC;

限制查询,从索引m开始,限制查n条:

SELECT * FROM <表名> ORDER BY <字段> DESC LIMIT m n;

二、函数

1.聚合函数

统计符合条件的行数:

SELECT COUNT(*) FROM <表名> WHERE <字段> > 3;

统计列中非空行数:

SELECT COUNT(<字段>) FROM <表名>;

统计列中非重复非空行数:

SELECT COUNT(DISTINCT <字段>) FROM <表名>;

统计列中的最大值和最小值:

SELECT MAX(<字段>) FROM <表名>;

统计求和:

SELECT SUM(<字段>) FROM <表名>;

求平均值:

SELECT AVG(<字段>) FROM <表名>;

分组合并:

SELECT <字段1>, GROUP_CONCAT(<字段1>) FROM <表名> GROUP BY <字段1>;

三、连表查询

内连接:

SELECT a.*, b.* FROM <表名1> AS a INNER JOIN <表名2> AS b ON a.id = b.id;

左连接:

SELECT a.*, b.* FROM <表名1> AS a LEFT JOIN <表名2> AS b ON a.id = b.id;

右连接:

SELECT a.*, b.* FROM <表名1> AS a RIGHT JOIN <表名2> AS b ON a.id = b.id;

子查询:

SELECT * FROM <表名> WHERE id IN (SELECT id FROM <表名> GROUP BY id HAVING COUNT(*) > 1);

四、常用场景

1.字符串替换:

UPDATE <表名> SET <字段> = REPLACE(<字段>, str1, str2)

2.根据某一列删除表中重复数据(保留id小的数据):

DELETE FROM <表名> WHERE id NOT IN (SELECT id FROM (SELECT MIN(id) AS id FROM <表名> GROUP BY <重复列>) AS t);

3.根据某一列删除表中重复数据(保留id大的数据):

DELETE FROM <表名> WHERE id NOT IN (SELECT id FROM (SELECT MAX(id) AS id FROM <表名> GROUP BY <重复列>) AS t);

4.三个表的连表查询:

SELECT * FROM (<表名1> AS a LEFT JOIN <表名2> AS b ON a.id = b.id) LEFT JOIN <表名3> AS c ON a.id = c.id;

5.排除某个表中的一列,查找其他所有列:

SELECT GROUP_CONCAT(<字段> SEPARATOR ',') FROM information_schema.COLUMNS WHERE table_name = <表名> AND column_name != <字段>;

6.去掉某一列中的括号及内容:

UPDATE <表名> SET <字段> = REPLACE(<字段>, SUBSTRING(<字段>, LOCATE('(', <字段>), LOCATE(')', <字段>)-LOCATE('(', <字段>)+1), '');

7.根据两个表的相同列更新另一个表中的另一列数据:

UPDATE <表名1> AS A, <表名2> AS B SET A.<字段1> = B.<字段2> WHERE A.<字段3> = B.<字段4>;

8.查询数据库中的表名及字段信息:

# 查询当前数据库
SELECT DATABASE();
# 查询当前数据库中的所有表名
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND TABLE_TYPE='BASE TABLE';
# 查询指定数据库中的所有表名
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='<数据库名>' AND TABLE_TYPE='BASE TABLE';
# 查询指定数据库中指定表名的字段信息
SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='<数据库名>' and TABLE_NAME='<表名>';

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2MTc0NTYyNg==&mid=2247484354&idx=1&sn=9013020195f3a7f3915375d27c1fb535&chksm=ce133b77f964b2618abc68ce3bd1d7eb3da7cefc48ed9f9352cfa403d1f4e9578541c2434b52#rd
如有侵权请联系:admin#unsafe.sh