前言:SQL(Structured Query Language)是用于管理关系型数据库的标准语言,广泛应用于数据查询、更新、定义和管理等操作。本文将为你提供一份详细的 SQL 速查手册,涵盖从基础到高级的各种 SQL 操作,帮助你快速掌握和应用 SQL 技能。
一、查找数据的查询
SELECT name AS "姓名" FROM users;
- 功能:从
users表中选择name列,并将其显示为“姓名”。 - 详解:
SELECT指定要查询的列,AS "姓名"为查询结果指定别名,FROM users指定数据来源表。
范例:
假设 users 表如下:
| id | name | |
|---|---|---|
| 1 | Alice | alice@example.com |
| 2 | Bob | bob@example.com |
| 3 | Charlie | charlie@example.com |
执行语句:
SELECT name AS "姓名" FROM users;
结果:
| 姓名 |
|---|
| Alice |
| Bob |
| Charlie |
二、修改数据的查询
UPDATE employees SET salary = salary * 1.1 WHERE department = 'IT';
- 功能:将
IT部门的员工工资提高 10%。 - 详解:
UPDATE指定要更新的表,SET指定要更新的列和值,WHERE指定更新条件。
范例:
假设 employees 表如下:
| id | name | salary | department |
|---|---|---|---|
| 1 | Alice | 50000 | HR |
| 2 | Bob | 60000 | IT |
| 3 | Charlie | 55000 | Finance |
执行语句:
UPDATE employees SET salary = salary * 1.1 WHERE department = 'IT';
结果:
| id | name | salary | department |
|---|---|---|---|
| 1 | Alice | 50000 | HR |
| 2 | Bob | 66000 | IT |
| 3 | Charlie | 55000 | Finance |
三、聚合查询
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) > 50000;
- 功能:按部门分组,计算每个部门的平均工资,并筛选出平均工资大于 50000 的部门。
- 详解:
SELECT指定要查询的列,GROUP BY按部门分组,HAVING筛选条件。
范例:
假设 employees 表如下:
| id | name | salary | department |
|---|---|---|---|
| 1 | Alice | 50000 | HR |
| 2 | Bob | 60000 | IT |
| 3 | Charlie | 55000 | Finance |
| 4 | David | 58000 | IT |
执行语句:
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) > 50000;
结果:
| department | avg_salary |
|---|---|
| IT | 59000 |
四、连接查询
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
- 功能:从
employees和departments表中选择匹配的行。 - 详解:
INNER JOIN连接两个表,ON指定连接条件。
范例:
假设 employees 表如下:
| id | name | department_id |
|---|---|---|
| 1 | Alice | 1 |
| 2 | Bob | 2 |
| 3 | Charlie | 3 |
假设 departments 表如下:
| id | department_name |
|---|---|
| 1 | HR |
| 2 | IT |
| 3 | Finance |
执行语句:
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
结果:
| name | department_name |
|---|---|
| Alice | HR |
| Bob | IT |
| Charlie | Finance |
五、视图查询
CREATE VIEW high_salary_employees AS SELECT name, salary FROM employees WHERE salary > 50000;
- 功能:创建一个视图,显示工资高于 50000 的员工。
- 详解:
CREATE VIEW创建视图,AS定义视图的查询。
范例:
假设 employees 表如下:
| id | name | salary |
|---|---|---|
| 1 | Alice | 50000 |
| 2 | Bob | 60000 |
| 3 | Charlie | 55000 |
执行语句:
CREATE VIEW high_salary_employees AS SELECT name, salary FROM employees WHERE salary > 50000;
查询视图:
SELECT * FROM high_salary_employees;
结果:
| name | salary |
|---|---|
| Bob | 60000 |
| Charlie | 55000 |
六、修改表的查询
ALTER TABLE employees ADD COLUMN bonus DECIMAL(10,2);
- 功能:向
employees表中添加一个bonus列。 - 详解:
ALTER TABLE修改表结构,ADD COLUMN添加新列。
范例:
假设 employees 表如下:
| id | name | salary |
|---|---|---|
| 1 | Alice | 50000 |
| 2 | Bob | 60000 |
| 3 | Charlie | 55000 |
执行语句:
ALTER TABLE employees ADD COLUMN bonus DECIMAL(10,2);
结果:
| id | name | salary | bonus |
|---|---|---|---|
| 1 | Alice | 50000 | NULL |
| 2 | Bob | 60000 | NULL |
| 3 | Charlie | 55000 | NULL |
七、单表查询
SELECT name, salary FROM employees WHERE salary > 50000;
- 功能:从
employees表中选择工资高于 50000 的员工。 - 详解:
SELECT指定要查询的列,WHERE指定查询条件。
范例:
假设 employees 表如下:
| id | name | salary |
|---|---|---|
| 1 | Alice | 50000 |
| 2 | Bob | 60000 |
| 3 | Charlie | 55000 |
执行语句:
SELECT name, salary FROM employees WHERE salary > 50000;
结果:
| name | salary |
|---|---|
| Bob | 60000 |
| Charlie | 55000 |
八、多表查询
SELECT employees.name, departments.department_name
FROM employees, departments
WHERE employees.department_id = departments.id;
- 功能:从
employees和departments表中选择匹配的行。 - 详解:
FROM指定两个表,WHERE指定连接条件。
范例:
假设 employees 表如下:
| id | name | department_id |
|---|---|---|
| 1 | Alice | 1 |
| 2 | Bob | 2 |
| 3 | Charlie | 3 |
假设 departments 表如下:
| id | department_name |
|---|---|
| 1 | HR |
| 2 | IT |
| 3 | Finance |
执行语句:
SELECT employees.name, departments.department_name
FROM employees, departments
WHERE employees.department_id = departments.id;
结果:
| name | department_name |
|---|---|
| Alice | HR |
| Bob | IT |
| Charlie | Finance |
九、集合运算
SELECT name FROM employees WHERE department = 'HR'
UNION
SELECT name FROM employees WHERE department = 'IT';
- 功能:返回
HR和IT部门的员工姓名。 - 详解:
UNION合并两个查询结果。
范例:
假设 employees 表如下:
| id | name | department |
|---|---|---|
| 1 | Alice | HR |
| 2 | Bob | IT |
| 3 | Charlie | Finance |
| 4 | David | IT |
执行语句:
SELECT name FROM employees WHERE department = 'HR'
UNION
SELECT name FROM employees WHERE department = 'IT';
结果:
| name |
|---|
| Alice |
| Bob |
| David |
十、子查询
SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
- 功能:选择工资高于平均工资的员工。
- 详解:
SELECT指定要查询的列,WHERE中的子查询计算平均工资。
范例:
假设 employees 表如下:
| id | name | salary |
|---|---|---|
| 1 | Alice | 50000 |
| 2 | Bob | 60000 |
| 3 | Charlie | 55000 |
执行语句:
SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
结果:
| name |
|---|
| Bob |
十一、数据操作
INSERT INTO employees (name, salary, department) VALUES ('Eve', 52000, 'HR');
- 功能:向
employees表中插入一条新记录。 - 详解:
INSERT INTO插入新记录,VALUES指定插入的值。
范例:
假设 employees 表如下:
| id | name | salary | department |
|---|---|---|---|
| 1 | Alice | 50000 | HR |
| 2 | Bob | 60000 | IT |
| 3 | Charlie | 55000 | Finance |
执行语句:
INSERT INTO employees (name, salary, department) VALUES ('Eve', 52000, 'HR');
结果:
| id | name | salary | department |
|---|---|---|---|
| 1 | Alice | 50000 | HR |
| 2 | Bob | 60000 | IT |
| 3 | Charlie | 55000 | Finance |
| 4 | Eve | 52000 | HR |
十二、数据定义
CREATE TABLE departments (id INT PRIMARY KEY,department_name VARCHAR(50)
);
- 功能:创建一个
departments表。 - 详解:
CREATE TABLE创建表,PRIMARY KEY指定主键。
范例:
执行语句:
CREATE TABLE departments (id INT PRIMARY KEY,department_name VARCHAR(50)
);
结果:成功创建 departments 表。
十三、扩展内容
EXPLAIN SELECT * FROM employees WHERE salary > 50000;
- 功能:显示查询执行计划。
- 详解:
EXPLAIN用于分析查询性能。
范例:
假设 employees 表如下:
| id | name | salary |
|---|---|---|
| 1 | Alice | 50000 |
| 2 | Bob | 60000 |
| 3 | Charlie | 55000 |
执行语句:
EXPLAIN SELECT * FROM employees WHERE salary > 50000;
结果:显示查询执行计划,帮助优化查询性能。
希望以上内容符合您的需求!