SQL基础语句大全(建议收藏)
SQL基础语句大全(建议收藏)
一、单表查询
1.1 基础查询
(1)查询所有列
SELECT * FROM employees;
SELECT * 表示选取表中所有字段,适用于快速查看全表数据。
(2)查询指定列
SELECT last_name, salary, email FROM employees;
通过明确列名筛选所需字段,减少数据传输量。
(3)去重查询(DISTINCT)
SELECT DISTINCT department_id FROM employees;
DISTINCT 用于消除重复记录,适用于统计唯一值场景。
(4)列别名
SELECT last_name AS 姓, first_name AS 名 FROM employees; -- 或省略AS SELECT last_name 姓, first_name 名 FROM employees;
别名提升结果可读性,常用于字段名复杂或需要重命名的情况。
1.2 数据过滤(WHERE子句)
(1)比较运算符
SELECT * FROM products WHERE price > 100; -- 大于 SELECT * FROM products WHERE price <= 50; -- 小于等于 SELECT * FROM customers WHERE age = 18; -- 等于
支持 >, =, <= 等运算符。
(2)逻辑运算符
-- AND:同时满足多个条件 SELECT * FROM orders WHERE total_price > 1000 AND status = \'paid\'; -- OR:满足任一条件 SELECT * FROM employees WHERE department_id = 10 OR salary > 5000; -- NOT:取反条件 SELECT * FROM products WHERE NOT category = \'Electronics\';
(3)IN与BETWEEN
-- IN:匹配列表中的任意值 SELECT * FROM customers WHERE city IN (\'北京\', \'上海\', \'广州\'); -- BETWEEN:范围查询(闭区间) SELECT * FROM orders WHERE order_date BETWEEN \'2025-01-01\' AND \'2025-03-31\';
(4)模糊匹配(LIKE)
-- 匹配以“张”开头的姓名 SELECT * FROM employees WHERE last_name LIKE \'张%\'; -- 匹配包含“科技”的地址 SELECT * FROM customers WHERE address LIKE \'%科技%\';
通配符 % 表示任意字符,_ 表示单个字符。
(5)NULL值处理
-- 查询未填写邮箱的用户 SELECT * FROM users WHERE email IS NULL; -- 查询已填写电话号码的用户 SELECT * FROM users WHERE phone IS NOT NULL;
需用 IS NULL 或 IS NOT NULL 判断空值。
二、聚合函数与分组统计
2.1 常用聚合函数
SELECT COUNT(*) AS total FROM orders; -- 统计行数 SELECT SUM(sales) AS total_sales FROM orders; -- 求和 SELECT AVG(salary) AS avg_salary FROM employees; -- 平均值 SELECT MAX(price) AS max_price FROM products; -- 最大值 SELECT MIN(price) AS min_price FROM products; -- 最小值
聚合函数用于对数据集进行统计计算。
2.2 分组统计(GROUP BY)
-- 按部门统计平均薪资 SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id; -- 按城市和性别分组统计用户数 SELECT city, gender, COUNT(*) AS user_count FROM users GROUP BY city, gender;
GROUP BY 需与非聚合字段结合使用,支持多字段分组。
2.3 分组后过滤(HAVING)
-- 筛选平均薪资超过5000的部门 SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 5000;
HAVING 用于对分组后的结果进行条件过滤(类似WHERE,但作用于分组后)。
三、多表查询与表连接
3.1 内连接(INNER JOIN)
SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;
仅返回两表中匹配的行,适用于需要精确关联的场景。
3.2 左连接(LEFT JOIN)
SELECT employees.last_name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;
保留左表所有记录,右表无匹配时填充NULL。
3.3 右连接与全外连接
-- 右连接(RIGHT JOIN) SELECT employees.last_name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id; -- 全外连接(FULL OUTER JOIN) SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.id = table2.id;
右连接保留右表全部数据,全外连接保留两表所有记录。
3.4 自连接
-- 查询员工及其经理的姓名 SELECT e1.employee_name, e2.employee_name AS manager_name FROM employees e1 LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id;
通过表别名实现同一表的关联查询。
四、子查询与联合查询
4.1 子查询
(1)WHERE子句中的子查询
-- 查询薪资高于平均薪资的员工 SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
(2)FROM子句中的子查询
-- 统计每个部门的最高薪资 SELECT department_id, max_salary FROM (SELECT department_id, MAX(salary) AS max_salary FROM employees GROUP BY department_id) AS dept_salary;
(3)EXISTS子查询
-- 查询有订单的客户 SELECT * FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
EXISTS 用于判断子查询是否返回结果。
4.2 联合查询(UNION)
-- 合并两个查询结果(自动去重) SELECT city FROM customers UNION SELECT city FROM suppliers; -- 保留重复记录(UNION ALL) SELECT city FROM customers UNION ALL SELECT city FROM suppliers;
UNION 要求列数和数据类型一致。
五、常用函数
5.1 字符串函数
SELECT CONCAT(first_name, \' \', last_name) AS full_name FROM employees; -- 拼接 SELECT UPPER(name) FROM products; -- 转大写 SELECT SUBSTRING(address, 1, 3) FROM customers; -- 截取子串 SELECT LENGTH(description) FROM articles; -- 计算长度
5.2 数值函数
SELECT ROUND(price, 2) FROM products; -- 四舍五入保留两位小数 SELECT ABS(profit) FROM sales; -- 绝对值 SELECT CEIL(3.2); -- 向上取整(结果4) SELECT FLOOR(3.7); -- 向下取整(结果3)
5.3 时间日期函数
SELECT NOW(); -- 当前日期时间 SELECT DATE_FORMAT(order_date, \'%Y-%m\') FROM orders; -- 格式化日期 SELECT DATEDIFF(\'2025-03-31\', \'2025-03-01\'); -- 日期差值(30天) SELECT DATE_ADD(\'2025-03-01\', INTERVAL 7 DAY); -- 日期加减
六、基本操作语句
6.1 DDL(数据定义语言)
(1)数据库操作
CREATE DATABASE company; -- 创建数据库 DROP DATABASE company; -- 删除数据库 ALTER DATABASE company CHARACTER SET utf8; -- 修改字符集:ml-citation{ref=\"2,8\" data=\"citationList\"}
(2)表操作
-- 创建表 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, salary DECIMAL(10,2) );
-- 修改表结构
ALTER TABLE employees ADD COLUMN email VARCHAR(100); ALTER TABLE employees DROP COLUMN email;
6.2 DML(数据操作语言)
-- 插入数据
INSERT INTO employees (id, name, salary) VALUES (1, \'张三\', 8000);
-- 更新数据
UPDATE employees SET salary = 9000 WHERE id = 1;
-- 删除数据
DELETE FROM employees WHERE salary < 5000;
七、总结
本文系统梳理了SQL基础语句,涵盖单表查询、多表关联、聚合统计、子查询等核心操作。建议结合实际业务场景练习,并收藏本文作为速查手册。后续可深入学习索引优化、事务控制等进阶内容。
技术不分好坏,合适的地方使用合适的技术;优雅的代码,清晰的逻辑,给你的每一个项目更好的归宿。
送给您的一封信:
尊敬的同仁,您好:
我是《Drools 规则引擎技术指南》的作者来志辉 。非常感谢大家对本书及相关技术的关注。为方便交流,特提供以下联系方式与交流群组:
-
微信号:Lai01102020
-
企鹅号:448998253
QQ讨论群:974369023 及 676219749,群文件中准备了丰富的开源文档与开源项目资源,供大家学习参考。在群内,大家不仅可以围绕 Drools 规则引擎技术展开深入探讨,还能发布招聘信息,进行其他技术领域的学习交流,期待您的加入,共同营造活跃的技术交流氛围 。
微信讨论群:因人数已达扫码进群上限,烦请添加我的个人微信,我会及时邀请您入群,一起在群里畅聊技术,分享经验 。
希望这些渠道能助力大家在技术学习与交流的道路上更进一步,期待与各位在群里相见!
微信公众号:程序猿之塞伯坦,欢迎大家阅览和点评
我的代表作:《Drools规则引擎技术指南》,请多多支持