博客 / Linux/ SQL 常用语句详解:查询、增删改、聚合与多表插入

SQL 常用语句详解:查询、增删改、聚合与多表插入

SQL 常用语句详解:查询、增删改、聚合与多表插入

SQL 基础操作语句

SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。以下是常用的 SQL 语句示例,适用于 MySQL、PostgreSQL、SQL Server 等主流数据库系统。

数据查询(SELECT)

-- 查询表中所有数据
SELECT * FROM table1 WHERE condition;

-- 模糊查询
SELECT * FROM table1 WHERE field1 LIKE '%value1%';

-- 排序查询
SELECT * FROM table1 ORDER BY field1, field2 [DESC];

数据操作(INSERT, UPDATE, DELETE)

-- 插入数据
INSERT INTO table1 (field1, field2) VALUES (value1, value2);

-- 更新数据
UPDATE table1 SET field1 = value1 WHERE condition;

-- 删除数据
DELETE FROM table1 WHERE condition;

聚合函数

-- 统计行数
SELECT COUNT(*) AS totalcount FROM table1;

-- 求和
SELECT SUM(field1) AS sumvalue FROM table1;

-- 平均值
SELECT AVG(field1) AS avgvalue FROM table1;

-- 最大值
SELECT MAX(field1) AS maxvalue FROM table1;

-- 最小值
SELECT MIN(field1) AS minvalue FROM table1;

多表数据插入:从多个表组合字段插入新表

在实际业务中,经常需要从多个源表组合数据并插入到目标表。以下通过一个具体场景说明:

场景:有三张表 a(目标表)、b、c(源表),需要将表 b 和表 c 中的特定字段组合后插入到表 a 的对应字段中。

方法一:直接 SELECT 插入(适用于字段直接对应)

INSERT INTO a (field1, field2)
SELECT field1, field2 FROM b;

此方法适用于单个源表,或多个表字段可直接对应的情况。

方法二:使用 JOIN 组合多表字段

当需要从多个表组合字段时,可先通过 JOIN 连接表,再插入数据。

INSERT INTO a (field1, field2)
SELECT b.f1, c.f2
FROM b
JOIN c ON b.id = c.b_id;

如果需要更复杂的处理或过滤,可以使用子查询(派生表):

INSERT INTO a (field1, field2)
SELECT tb.f1, tb.f2
FROM (
    SELECT b.f1, c.f2
    FROM b
    JOIN c ON b.id = c.b_id
    WHERE b.status = 'active'
) AS tb; -- 注意:派生表必须指定别名

重要注意事项

  • 派生表别名:在 MySQL 中,每个派生表(子查询)都必须有别名,否则会报错:ERROR 1248 (42000): Every derived TABLE must have its own alias
  • 字段匹配:确保 INSERT 的字段列表与 SELECT 的字段列表在数量、顺序和数据类型上一致。
  • JOIN 条件:多表连接时务必明确关联条件,避免产生笛卡尔积导致数据异常。

扩展:插入多个表的数据

若需要从超过两个表组合数据,可以连续使用 JOIN:

INSERT INTO target_table (col1, col2, col3)
SELECT t1.col1, t2.col2, t3.col3
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.t1_id
JOIN table3 t3 ON t2.id = t3.t2_id
WHERE t1.is_valid = 1;

通过灵活运用 SELECT、JOIN 和子查询,可以实现复杂的多表数据插入逻辑,满足各种业务需求。

发表评论

您的邮箱不会公开。必填项已用 * 标注。