- 文集信息
- 目录大纲
- 最新文档
- 知识宇宙
文集详情
文集导读
SQL 基础
1. SQL 概述
SQL 是一种声明性语言,意味着你只需要描述你想要的结果,而无需指定如何实现。它包含多种类型的语句,用于定义和操作数据库对象,以及查询和修改数据。
SQL 的主要组成部分:
-
DDL (Data Definition Language): 用于定义数据库结构,如创建、修改和删除数据库、表、索引等。 常用命令:CREATE, ALTER, DROP。
-
DML (Data Manipulation Language): 用于操作数据库中的数据,如插入、更新和删除数据。常用命令:INSERT, UPDATE, DELETE。
-
DQL (Data Query Language): 用于查询数据库中的数据。常用命令:SELECT。
-
DCL (Data Control Language): 用于控制数据库的访问权限和事务。常用命令:GRANT, REVOKE, COMMIT, ROLLBACK。
2. 数据库与表
在 SQL 中,数据存储在数据库中,数据库包含多个表。表由行 (记录) 和列 (字段) 组成,每一列都有一个特定的数据类型。
2.1 创建数据库
CREATE DATABASE my_database;
这条语句创建一个名为 my_database 的数据库。
2.2 选择数据库
USE my_database;
这条语句选择 my_database 作为当前使用的数据库。
2.3 创建表
CREATE TABLE employees ( id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), hire_date DATE, salary DECIMAL(10, 2) );
这条语句创建了一个名为 employees 的表,包含以下列:
-
id: 整数类型,作为主键 (PRIMARY KEY),唯一标识每一行数据。 -
first_name: 字符串类型,最大长度为 50。 -
last_name: 字符串类型,最大长度为 50。 -
email: 字符串类型,最大长度为 100。 -
hire_date: 日期类型。 -
salary: 小数类型,总共 10 位数,其中 2 位小数。
2.4 数据类型
SQL 支持多种数据类型,常用的数据类型包括:
-
INT/INTEGER: 整数
-
VARCHAR(n): 字符串,最大长度为 n
-
CHAR(n): 固定长度字符串,长度为 n
-
DATE: 日期
-
DATETIME: 日期和时间
-
DECIMAL(p, s): 小数,总共 p 位数,其中 s 位小数
-
BOOLEAN: 布尔值 (TRUE/FALSE)
3. 数据操作
3.1 插入数据
INSERT INTO employees (id, first_name, last_name, email, hire_date, salary) VALUES (1, 'John', 'Doe', 'john.doe@example.com', '2023-01-15', 60000.00); INSERT INTO employees (id, first_name, last_name, email, hire_date, salary) VALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', '2022-05-20', 75000.00);
这两条语句分别向 employees 表中插入了两条记录。
3.2 查询数据
SELECT * FROM employees;
这条语句查询 employees 表中的所有列和所有行。 * 表示选择所有列。
SELECT first_name, last_name, salary FROM employees;
这条语句只查询 employees 表中的 first_name, last_name 和 salary 列。
3.3 更新数据
UPDATE employees SET salary = 80000.00 WHERE id = 2;
这条语句将 employees 表中 id 为 2 的记录的 salary 更新为 80000.00。
3.4 删除数据
DELETE FROM employees WHERE id = 1;
这条语句从 employees 表中删除 id 为 1 的记录。
4. 数据查询 (SELECT 语句)
SELECT 语句是 SQL 中最核心的语句,用于从数据库中检索数据。
4.1 基本 SELECT 语句
SELECT column1, column2, ... FROM table_name WHERE condition;
-
SELECT: 指定要查询的列。 -
FROM: 指定要查询的表。 -
WHERE: 指定查询条件,用于过滤数据。
4.2 WHERE 子句
WHERE 子句用于指定查询条件。可以使用比较运算符、逻辑运算符等构建复杂的查询条件。
-
比较运算符:
=,!=,>,<,>=,<= -
逻辑运算符:
AND,OR,NOT -
其他运算符:
BETWEEN,LIKE,IN,IS NULL
示例:
-- 查询 salary 大于 70000 的员工 SELECT first_name, last_name, salary FROM employees WHERE salary > 70000; -- 查询 hire_date 在 2022-01-01 和 2022-12-31 之间的员工 SELECT first_name, last_name, hire_date FROM employees WHERE hire_date BETWEEN '2022-01-01' AND '2022-12-31'; -- 查询 first_name 以 'J' 开头的员工 SELECT first_name, last_name FROM employees WHERE first_name LIKE 'J%'; -- 查询 email 为空的员工 SELECT first_name, last_name, email FROM employees WHERE email IS NULL; -- 查询 id 为 1 或 2 的员工 SELECT first_name, last_name, id FROM employees WHERE id IN (1, 2);
4.3 ORDER BY 子句
ORDER BY 子句用于对查询结果进行排序。
SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
-
ASC: 升序 (默认)。 -
DESC: 降序。
示例:
-- 按照 salary 降序排列员工 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC; -- 按照 last_name 升序排列,然后按照 first_name 升序排列 SELECT first_name, last_name FROM employees ORDER BY last_name ASC, first_name ASC;
4.4 GROUP BY 子句
GROUP BY 子句用于将查询结果按照指定的列进行分组。通常与聚合函数一起使用,如 COUNT, SUM, AVG, MIN, MAX。
SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 ORDER BY column1;
示例:
-- 统计每个部门的员工数量 (假设 employees 表有一个 department_id 列) SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id ORDER BY department_id; -- 计算每个部门的平均工资 SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id ORDER BY department_id;
4.5 HAVING 子句
HAVING 子句用于过滤分组后的数据,类似于 WHERE 子句,但作用于分组后的结果。
SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 HAVING condition ORDER BY column1;
示例:
-- 统计员工数量大于 5 的部门 SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id HAVING COUNT(*) > 5 ORDER BY department_id;
4.6 LIMIT 子句
LIMIT 子句用于限制查询结果的行数。
SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 LIMIT row_count; SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 LIMIT offset, row_count;
-
row_count: 指定要返回的行数。 -
offset: 指定要跳过的行数。
示例:
-- 查询 salary 最高的 3 个员工 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC LIMIT 3; -- 查询 salary 排名 4-6 的员工 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC LIMIT 3, 3; -- 跳过前 3 行,返回接下来的 3 行
5. 连接 (JOIN)
连接用于将来自多个表的数据组合在一起。
5.1 INNER JOIN
INNER JOIN 返回两个表中都匹配的行。
SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
示例:
假设我们有 employees 表和 departments 表,employees.department_id 对应 departments.id。
-- 查询每个员工的姓名和部门名称 SELECT e.first_name, e.last_name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.id;
5.2 LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN 返回左表的所有行,以及右表中匹配的行。如果右表中没有匹配的行,则右表的列将显示为 NULL。
SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
示例:
-- 查询所有员工的姓名和部门名称,即使员工没有分配到部门 SELECT e.first_name, e.last_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id;
5.3 RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN 返回右表的所有行,以及左表中匹配的行。如果左表中没有匹配的行,则左表的列将显示为 NULL。
SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
5.4 FULL JOIN (FULL OUTER JOIN)
FULL JOIN 返回左表和右表的所有行。如果某个表中没有匹配的行,则该表的列将显示为 NULL。 并非所有数据库系统都支持 FULL JOIN。
SELECT column1, column2, ... FROM table1 FULL JOIN table2 ON table1.column_name = table2.column_name;
6. 子查询
子查询是指嵌套在另一个查询中的查询。
示例:
-- 查询 salary 大于平均 salary 的员工 SELECT first_name, last_name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
7. 总结
本文详细介绍了 SQL 的基础知识,包括数据库和表的创建、数据操作、数据查询、连接和子查询。通过代码示例,你可以更好地理解这些概念,并开始使用 SQL 进行数据管理和分析。掌握这些基础知识是进一步学习高级 SQL 技术的关键。记住,实践是最好的老师,多写 SQL 语句,多练习,你将能够熟练掌握 SQL。
目录大纲
最新文档
知识宇宙
正在加载知识图谱...