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 和子查询,可以实现复杂的多表数据插入逻辑,满足各种业务需求。