首页 常识文章正文

SQL语句大全,从基础到高级,一网打尽

常识 2024年10月22日 08:32 51 新樾

在数据驱动的时代,SQL(Structured Query Language)作为数据库查询和管理的标准语言,其重要性不言而喻,无论是数据分析师、开发人员还是数据库管理员,掌握SQL都是必备技能之一,本文将带你从基础到高级,全面了解SQL的各种常用语句,帮助你在数据处理和分析中更加得心应手。

1. 基础查询

1.1 选择所有列

SELECT * FROM table_name;

这条语句用于从表中选择所有列的数据。 表示选择所有列。

1.2 选择特定列

SELECT column1, column2 FROM table_name;

如果你只需要表中的某些特定列,可以使用这种方式来选择。

1.3 条件查询

SELECT * FROM table_name WHERE condition;

通过WHERE 子句,你可以根据条件筛选出符合条件的记录。

SELECT * FROM employees WHERE salary > 50000;

1.4 排序

SELECT * FROM table_name ORDER BY column1 ASC/DESC;

使用ORDER BY 子句可以对查询结果进行排序。ASC 表示升序,DESC 表示降序。

SELECT * FROM employees ORDER BY salary DESC;

1.5 分组

SELECT column1, COUNT(*) FROM table_name GROUP BY column1;

使用GROUP BY 子句可以将数据按某一列或多列分组,并对每个分组进行聚合操作。

SELECT department, COUNT(*) FROM employees GROUP BY department;

1.6 聚合函数

SQL 提供了多种聚合函数,如COUNT(),SUM(),AVG(),MIN(),MAX() 等,这些函数可以对数据进行统计分析。

SELECT AVG(salary) FROM employees;

2. 连接查询

2.1 内连接

SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;

内连接(INNER JOIN)返回两个表中满足连接条件的记录。

SELECT employees.name, departments.department_name 
FROM employees 
INNER JOIN departments 
ON employees.department_id = departments.department_id;

2.2 左连接

SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;

左连接(LEFT JOIN)返回左表中的所有记录,以及右表中满足连接条件的记录,如果右表中没有匹配的记录,则返回 NULL。

SELECT employees.name, departments.department_name 
FROM employees 
LEFT JOIN departments 
ON employees.department_id = departments.department_id;

2.3 右连接

SQL语句大全,从基础到高级,一网打尽

SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;

右连接(RIGHT JOIN)返回右表中的所有记录,以及左表中满足连接条件的记录,如果左表中没有匹配的记录,则返回 NULL。

SELECT employees.name, departments.department_name 
FROM employees 
RIGHT JOIN departments 
ON employees.department_id = departments.department_id;

2.4 全外连接

SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column;

全外连接(FULL OUTER JOIN)返回两个表中所有记录,无论是否满足连接条件,如果某一方没有匹配的记录,则返回 NULL。

SELECT employees.name, departments.department_name 
FROM employees 
FULL OUTER JOIN departments 
ON employees.department_id = departments.department_id;

3. 子查询

子查询是在另一个查询内部嵌套的查询,子查询可以出现在SELECT,FROM,WHEREHAVING 子句中。

3.1 单行子查询

SELECT * FROM table1 WHERE column = (SELECT column FROM table2 WHERE condition);

单行子查询返回一个值。

SELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);

3.2 多行子查询

SELECT * FROM table1 WHERE column IN (SELECT column FROM table2 WHERE condition);

多行子查询返回多个值。

SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

4. 高级查询

4.1 联合查询

SELECT * FROM table1 UNION SELECT * FROM table2;

联合查询(UNION)用于合并两个或多个查询的结果集。UNION 默认去除重复记录,如果需要保留重复记录,可以使用UNION ALL

SELECT name FROM employees UNION SELECT name FROM contractors;

4.2 交叉连接

SELECT * FROM table1 CROSS JOIN table2;

交叉连接(CROSS JOIN)返回两个表的笛卡尔积,即所有可能的组合。

SQL语句大全,从基础到高级,一网打尽

SELECT employees.name, departments.department_name 
FROM employees 
CROSS JOIN departments;

4.3 自连接

自连接是指在一个表上进行两次连接,假设有一个员工表,包含员工的上级信息,可以通过自连接查询某个员工的所有下属。

SELECT e1.name AS manager, e2.name AS employee 
FROM employees e1 
JOIN employees e2 
ON e1.employee_id = e2.manager_id;

4.4 窗口函数

窗口函数(Window Functions)允许你在一组相关行上执行计算,同时保持每行的独立性,常见的窗口函数包括ROW_NUMBER(),RANK(),DENSE_RANK(),LEAD(),LAG(),SUM(),AVG() 等。

SELECT name, salary, 
       RANK() OVER (ORDER BY salary DESC) AS rank 
FROM employees;

5. 数据修改

5.1 插入数据

INSERT INTO table_name (column1, column2) VALUES (value1, value2);

插入数据时,可以指定插入的列和对应的值。

INSERT INTO employees (name, salary) VALUES ('John Doe', 60000);

5.2 更新数据

UPDATE table_name SET column1 = value1 WHERE condition;

更新数据时,可以使用SET 子句指定要更新的列和新值,并使用WHERE 子句指定更新条件。

UPDATE employees SET salary = 70000 WHERE name = 'John Doe';

5.3 删除数据

DELETE FROM table_name WHERE condition;

删除数据时,使用WHERE 子句指定删除条件。

DELETE FROM employees WHERE name = 'John Doe';

6. 事务控制

事务是一组 SQL 语句,它们作为一个整体一起执行,事务控制语句包括BEGIN,COMMIT,ROLLBACKSAVEPOINT

6.1 开始事务

SQL语句大全,从基础到高级,一网打尽

BEGIN;

6.2 提交事务

COMMIT;

6.3 回滚事务

ROLLBACK;

6.4 设置保存点

SAVEPOINT savepoint_name;

设置保存点后,可以在需要时回滚到该保存点。

BEGIN;
SAVEPOINT before_update;
UPDATE employees SET salary = 70000 WHERE name = 'John Doe';
ROLLBACK TO SAVEPOINT before_update;
COMMIT;

7. 索引和优化

索引可以提高查询性能,但也会增加存储开销,创建索引时需要权衡利弊。

7.1 创建索引

CREATE INDEX index_name ON table_name (column1, column2);
CREATE INDEX idx_employee_name ON employees (name);

7.2 删除索引

DROP INDEX index_name;
DROP INDEX idx_employee_name;

8. 视图

视图是一种虚拟表,其内容由查询定义,视图可以简化复杂的查询,提高可读性和维护性。

8.1 创建视图

CREATE VIEW view_name AS SELECT * FROM table_name WHERE condition;
CREATE VIEW high_salary_employees AS SELECT * FROM employees WHERE salary > 50000;

8.2 查询视图

SELECT * FROM view_name;
SELECT * FROM high_salary_employees;

8.3 删除视图

DROP VIEW view

中盟盛世科技网 网站地图 免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,联系QQ:2760375052 版权所有:中盟盛世科技网:沪ICP备2023024865号-1