前言: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;
结果:显示查询执行计划,帮助优化查询性能。
希望以上内容符合您的需求!