100条常用SQL语句

兄弟,哪位知道,100条常用SQL语句
最新回答
幼稚园里的幼稚鬼

2026-10-22 19:39:50

以下是整理后的100条常用SQL语句,按功能分类并补充了典型场景示例,便于快速查阅与实践:

一、基础查询(15条)
  • 全表查询SELECT * FROM employees;
  • 指定列查询SELECT name, salary FROM employees;
  • 条件查询SELECT * FROM employees WHERE department = 'IT';
  • 模糊查询SELECT * FROM products WHERE name LIKE 'Laptop%';
  • 排序查询SELECT * FROM orders ORDER BY order_date DESC;
  • 限制行数SELECT * FROM logs LIMIT 100;
  • 去重查询SELECT DISTINCT city FROM customers;
  • 多条件组合SELECT * FROM employees WHERE salary > 5000 AND department = 'HR';
  • 范围查询SELECT * FROM products WHERE price BETWEEN 100 AND 500;
  • 空值判断SELECT * FROM users WHERE email IS NULL;
  • 非空值判断SELECT * FROM users WHERE phone IS NOT NULL;
  • 分页查询SELECT * FROM articles ORDER BY publish_date LIMIT 10 OFFSET 20;
  • 字段别名SELECT name AS employee_name FROM employees;
  • 表别名SELECT e.name, d.name FROM employees e JOIN departments d ON e.dept_id = d.id;
  • 常量列SELECT name, 'Active' AS status FROM users;
二、聚合与分组(10条)
  • 计数SELECT COUNT(*) FROM orders;
  • 分组统计SELECT department, COUNT(*) FROM employees GROUP BY department;
  • 条件分组SELECT product_id, SUM(quantity) FROM order_items GROUP BY product_id HAVING SUM(quantity) > 10;
  • 总和计算SELECT SUM(salary) FROM employees;
  • 平均值SELECT AVG(rating) FROM reviews;
  • 最大值SELECT MAX(price) FROM products;
  • 最小值SELECT MIN(stock) FROM inventory;
  • 多聚合函数SELECT MIN(price), MAX(price), AVG(price) FROM products;
  • 分组拼接字符串SELECT department, GROUP_CONCAT(name) FROM employees GROUP BY department;
  • 唯一值计数SELECT COUNT(DISTINCT city) FROM customers;
三、数据操作(10条)
  • 插入单行INSERT INTO customers (name, email) VALUES ('John', 'john@example.com');
  • 插入多行INSERT INTO products (name, price) VALUES ('A', 10), ('B', 20);
  • 更新数据UPDATE employees SET salary = salary * 1.1 WHERE department = 'Engineering';
  • 条件更新UPDATE orders SET status = 'Shipped' WHERE order_date < '2023-01-01';
  • 删除数据DELETE FROM temp_users WHERE last_login < DATE_SUB(NOW(), INTERVAL 1 YEAR);
  • 批量删除DELETE FROM logs WHERE level = 'DEBUG';
  • 复制表数据INSERT INTO archive_orders SELECT * FROM orders WHERE order_date < '2022-01-01';
  • 条件插入INSERT INTO vip_customers SELECT * FROM customers WHERE total_purchases > 1000;
  • 更新或插入(UPSERT)INSERT INTO settings (key, value) VALUES ('theme', 'dark') ON DUPLICATE KEY UPDATE value = 'dark';
  • 清空表TRUNCATE TABLE temp_data;
四、表操作(10条)
  • 创建表CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE);
  • 删除表DROP TABLE old_logs;
  • 添加列ALTER TABLE products ADD COLUMN description TEXT;
  • 修改列类型ALTER TABLE orders MODIFY COLUMN order_date DATETIME;
  • 删除列ALTER TABLE customers DROP COLUMN phone;
  • 重命名表ALTER TABLE customer_backup RENAME TO archive_customers;
  • 添加约束ALTER TABLE employees ADD CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(id);
  • 删除约束ALTER TABLE employees DROP FOREIGN KEY fk_dept;
  • 创建自增列ALTER TABLE transactions ADD COLUMN transaction_id INT AUTO_INCREMENT PRIMARY KEY;
  • 复制表结构CREATE TABLE new_products LIKE products;
五、索引与视图(8条)
  • 创建索引CREATE INDEX idx_email ON users(email);
  • 复合索引CREATE INDEX idx_name_age ON customers(last_name, age);
  • 删除索引DROP INDEX idx_email ON users;
  • 创建视图CREATE VIEW active_users AS SELECT * FROM users WHERE last_login > DATE_SUB(NOW(), INTERVAL 30 DAY);
  • 更新视图CREATE OR REPLACE VIEW vip_customers AS SELECT * FROM customers WHERE tier = 'Gold';
  • 删除视图DROP VIEW active_users;
  • 索引视图(部分数据库支持)CREATE MATERIALIZED VIEW sales_summary ASSELECT product_id, SUM(quantity) FROM order_items GROUP BY product_id;
  • 检查视图定义SHOW CREATE VIEW active_users;
六、连接查询(8条)
  • 内连接SELECT o.order_id, c.name FROM orders o INNER JOIN customers c ON o.customer_id = c.id;
  • 左连接SELECT e.name, d.name FROM employees e LEFT JOIN departments d ON e.dept_id = d.id;
  • 右连接SELECT p.name, s.name FROM products p RIGHT JOIN suppliers s ON p.supplier_id = s.id;
  • 全连接(MySQL需用UNION模拟)SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.idUNIONSELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id WHERE table1.id IS NULL;
  • 交叉连接SELECT * FROM colors CROSS JOIN sizes;
  • 自然连接SELECT * FROM employees NATURAL JOIN departments;
  • 自连接SELECT e1.name AS employee, e2.name AS manager FROM employees e1 JOIN employees e2 ON e1.manager_id = e2.id;
  • 多表连接SELECT o.order_id, c.name, p.name FROM orders o JOIN customers c ON o.customer_id = c.id JOIN order_items oi ON o.id = oi.order_id JOIN products p ON oi.product_id = p.id;
七、子查询与集合(10条)
  • IN子查询SELECT * FROM products WHERE category_id IN (SELECT id FROM categories WHERE parent_id = 5);
  • EXISTS子查询SELECT * FROM departments d WHERE EXISTS (SELECT 1 FROM employees e WHERE e.dept_id = d.id);
  • NOT EXISTS子查询SELECT * FROM customers c WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
  • 相关子查询SELECT name, (SELECT AVG(salary) FROM employees e2 WHERE e2.dept_id = e1.dept_id) AS avg_dept_salary FROM employees e1;
  • UNION合并结果SELECT name FROM customers WHERE country = 'US' UNION SELECT name FROM suppliers WHERE country = 'US';
  • UNION ALL保留重复SELECT product_id FROM order_items_2022 UNION ALL SELECT product_id FROM order_items_2023;
  • INTERSECT交集(MySQL需用INNER JOIN模拟)SELECT product_id FROM order_items_2022 o1INNER JOIN order_items_2023 o2 ON o1.product_id = o2.product_id;
  • EXCEPT差集(MySQL需用LEFT JOIN模拟)SELECT product_id FROM order_items_2022 o1LEFT JOIN order_items_2023 o2 ON o1.product_id = o2.product_idWHERE o2.product_id IS NULL;
  • 子查询作为派生表SELECT d.name, dept_counts.count FROM departments d JOIN (SELECT dept_id, COUNT(*) AS count FROM employees GROUP BY dept_id) dept_counts ON d.id = dept_counts.dept_id;
  • CTE(公用表表达式)WITH dept_stats AS ( SELECT dept_id, AVG(salary) AS avg_salary FROM employees GROUP BY dept_id)SELECT d.name, ds.avg_salary FROM departments d JOIN dept_stats ds ON d.id = ds.dept_id;
八、日期与时间(8条)
  • 当前时间SELECT NOW();
  • 当前日期SELECT CURDATE();
  • 日期加法SELECT DATE_ADD(order_date, INTERVAL 7 DAY) AS expected_ship_date FROM orders;
  • 日期减法SELECT DATEDIFF(NOW(), hire_date) AS days_employed FROM employees;
  • 格式化日期SELECT DATE_FORMAT(order_date, '%Y-%m-%d %H:%i') FROM orders;
  • 提取日期部分SELECT YEAR(order_date), MONTH(order_date) FROM orders GROUP BY YEAR(order_date), MONTH(order_date);
  • 时间戳转换SELECT FROM_UNIXTIME(1672531200) AS human_readable_date;
  • 时区转换SELECT CONVERT_TZ(order_date, '+00:00', '+08:00') AS beijing_time FROM orders;
九、字符串处理(8条)
  • 字符串连接SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;
  • 字符串长度SELECT LENGTH(password) FROM users;
  • 子字符串提取SELECT SUBSTRING(product_code, 1, 3) AS category_code FROM products;
  • 字符串替换SELECT REPLACE(description, 'old', 'new') FROM products;
  • 大小写转换SELECT UPPER(country), LOWER(city) FROM customers;
  • 去除空格SELECT TRIM(BOTH FROM phone) FROM customers;
  • 字符串比较SELECT * FROM products WHERE STRCMP(name, 'Laptop') = 0;
  • 正则匹配SELECT * FROM emails WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@gmail.com$';
十、高级功能(10条)
  • CASE条件判断SELECT name, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END AS gradeFROM students;
  • IF函数SELECT name, IF(is_active, 'Active', 'Inactive') AS status FROM users;
  • COALESCE处理NULLSELECT name, COALESCE(phone, 'N/A') AS contact FROM customers;
  • NULLIF避免除零错误SELECT amount / NULLIF(quantity, 0) AS unit_price FROM order_items;
  • ROLLUP分组汇总SELECT region, city, SUM(sales) FROM sales_data GROUP BY region, city WITH ROLLUP;
  • 窗口函数(排名)SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS salary_rank FROM employees;
  • 窗口函数(累计和)SELECT date, revenue, SUM(revenue) OVER (ORDER BY date) AS cumulative_revenue FROM daily_sales;
  • JSON处理(MySQL 5.7+)SELECT JSON_EXTRACT(user_data, '$.address.city') AS city FROM users;
  • 存储过程CREATE PROCEDURE update_salaries(IN dept_id INT, IN percentage DECIMAL(5,2))BEGIN UPDATE employees SET salary = salary * (1 + percentage/100) WHERE department_id = dept_id;END;
  • 触发器CREATE TRIGGER log_employee_updateBEFORE UPDATE ON employeesFOR EACH ROWINSERT INTO employee_audit (employee_id, old_salary, new_salary, change_date)VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
十一、性能优化(5条)
  • EXPLAIN分析查询EXPLAIN SELECT * FROM orders WHERE customer_id = 100;
  • 强制使用索引SELECT * FROM products FORCE INDEX (idx_category) WHERE category_id = 5;
  • 临时表优化CREATE TEMPORARY TABLE temp_results AS SELECT * FROM large_table WHERE condition;
  • 查询缓存控制SET SESSION query_cache_type = OFF;
  • 慢查询日志SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2;
十二、系统与工具(8条)
  • 显示数据库版本SELECT VERSION();
  • 显示当前用户SELECT CURRENT_USER();
  • 显示所有数据库SHOW DATABASES;
  • 显示表结构DESCRIBE employees;
  • 显示进程列表SHOW PROCESSLIST;
  • 显示表状态SHOW TABLE STATUS LIKE 'orders%';
  • 显示索引信息SHOW INDEX FROM customers;
  • 显示变量设置SHOW VARIABLES LIKE 'max_connections';
十三、备份与恢复(4条)
  • 数据库备份mysqldump -u root -p mydatabase > backup.sql
  • 恢复数据库mysql -u root -p mydatabase < backup.sql
  • 备份特定表mysqldump -u root -p mydatabase customers orders > tables_backup.sql
  • 压缩备份mysqldump -u root -p mydatabase | gzip > backup.sql.gz
十四、安全相关(4条)
  • 创建用户CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
  • 授予权限GRANT SELECT, INSERT ON mydatabase.* TO 'newuser'@'localhost';
  • 撤销权限REVOKE INSERT ON mydatabase.* FROM 'newuser'@'localhost';
  • 刷新权限FLUSH PRIVILEGES;

以上语句覆盖了SQL开发的核心场景,可根据实际数据库类型(MySQL、PostgreSQL、SQL Server等)调整语法细节。建议结合具体业务需求进行实践验证。