SQL 速查手册

前言:SQL(Structured Query Language)是用于管理关系型数据库的标准语言,广泛应用于数据查询、更新、定义和管理等操作。本文将为你提供一份详细的 SQL 速查手册,涵盖从基础到高级的各种 SQL 操作,帮助你快速掌握和应用 SQL 技能。

一、查找数据的查询

SELECT name AS "姓名" FROM users;
  • 功能:从 users 表中选择 name 列,并将其显示为“姓名”。
  • 详解SELECT 指定要查询的列,AS "姓名" 为查询结果指定别名,FROM users 指定数据来源表。

范例:

假设 users 表如下:

id name email
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;
  • 功能:从 employeesdepartments 表中选择匹配的行。
  • 详解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;
  • 功能:从 employeesdepartments 表中选择匹配的行。
  • 详解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';
  • 功能:返回 HRIT 部门的员工姓名。
  • 详解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;

结果:显示查询执行计划,帮助优化查询性能。

希望以上内容符合您的需求!

posted @ 2025-12-29 10:23  Linux运维技术栈  阅读(18)  评论(0)    收藏  举报