SQL 入门教程笔记
下面是一个全面的 SQL 教程,适合初学者和有一定编程经验的人士。SQL(Structured Query Language)是一种用于管理和处理关系型数据库的标准语言。
1. 简介
- 定义:SQL 是一种用于管理关系型数据库的标准语言。
- 用途:
- 数据查询和检索。
- 数据插入、更新和删除。
- 数据库结构的创建和修改。
- 数据库权限管理。
- 特点:
- 易于学习和使用。
- 标准化(尽管各数据库系统可能有一些差异)。
- 强大的数据处理能力。
2. 安装和配置数据库
使用 MySQL
- 在 Windows 上安装:
- 下载并安装 MySQL Community Server。
- 配置环境变量
PATH
指向 MySQL 的bin
目录。
- 在 macOS 上安装:
- 使用 Homebrew 安装 MySQL:
brew install mysql
- 使用 Homebrew 安装 MySQL:
- 在 Linux 上安装:
- 使用包管理器安装 MySQL:
sudo apt-get update sudo apt-get install mysql-server
- 使用包管理器安装 MySQL:
启动 MySQL 服务
- 在终端或命令提示符中启动 MySQL 服务:
sudo service mysql start
连接到 MySQL 服务器
- 使用以下命令连接到 MySQL 服务器:
mysql -u root -p
- 输入密码后,你将进入 MySQL 命令行界面。
3. 创建数据库和表
创建数据库
- 使用
CREATE DATABASE
语句创建一个新的数据库:CREATE DATABASE mydatabase;
选择数据库
- 使用
USE
语句选择要操作的数据库:USE mydatabase;
创建表
- 使用
CREATE TABLE
语句创建一个新的表:CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), hire_date DATE, salary DECIMAL(10, 2) );
4. 插入数据
插入单条记录
- 使用
INSERT INTO
语句插入一条记录:INSERT INTO employees (first_name, last_name, email, hire_date, salary) VALUES ('John', 'Doe', 'john.doe@example.com', '2023-01-15', 50000.00);
插入多条记录
- 使用
INSERT INTO
语句插入多条记录:INSERT INTO employees (first_name, last_name, email, hire_date, salary) VALUES ('Jane', 'Smith', 'jane.smith@example.com', '2023-02-01', 55000.00), ('Alice', 'Johnson', 'alice.johnson@example.com', '2023-03-10', 60000.00);
5. 查询数据
基本查询
- 使用
SELECT
语句查询所有记录:SELECT * FROM employees;
条件查询
- 使用
WHERE
子句进行条件查询:SELECT * FROM employees WHERE salary > 50000.00;
排序
- 使用
ORDER BY
子句对结果进行排序:SELECT * FROM employees ORDER BY salary DESC;
分页
- 使用
LIMIT
和OFFSET
子句进行分页查询:SELECT * FROM employees LIMIT 10 OFFSET 0; -- 获取前 10 条记录
聚合函数
- 使用聚合函数如
COUNT
,SUM
,AVG
,MAX
,MIN
进行统计:SELECT COUNT(*) AS total_employees, AVG(salary) AS average_salary FROM employees;
分组
- 使用
GROUP BY
子句对结果进行分组:SELECT department, COUNT(*) AS num_employees FROM employees GROUP BY department;
6. 更新数据
更新单条记录
- 使用
UPDATE
语句更新一条记录:UPDATE employees SET salary = 52000.00 WHERE id = 1;
更新多条记录
- 使用
UPDATE
语句更新多条记录:UPDATE employees SET salary = salary * 1.1 WHERE hire_date < '2023-01-01';
7. 删除数据
删除单条记录
- 使用
DELETE
语句删除一条记录:DELETE FROM employees WHERE id = 1;
删除多条记录
- 使用
DELETE
语句删除多条记录:DELETE FROM employees WHERE salary < 50000.00;
清空表
- 使用
TRUNCATE
语句清空整个表:TRUNCATE TABLE employees;
8. 数据库结构操作
添加列
- 使用
ALTER TABLE
语句添加新列:ALTER TABLE employees ADD COLUMN phone_number VARCHAR(20);
修改列
- 使用
ALTER TABLE
语句修改现有列:ALTER TABLE employees MODIFY COLUMN phone_number VARCHAR(15);
删除列
- 使用
ALTER TABLE
语句删除列:ALTER TABLE employees DROP COLUMN phone_number;
添加主键
- 使用
ALTER TABLE
语句添加主键:ALTER TABLE employees ADD PRIMARY KEY (id);
添加外键
- 使用
ALTER TABLE
语句添加外键:ALTER TABLE orders ADD FOREIGN KEY (employee_id) REFERENCES employees(id);
9. 复杂查询
内连接
- 使用
INNER JOIN
进行内连接:SELECT e.first_name, e.last_name, o.order_number FROM employees e INNER JOIN orders o ON e.id = o.employee_id;
左连接
- 使用
LEFT JOIN
进行左连接:SELECT e.first_name, e.last_name, o.order_number FROM employees e LEFT JOIN orders o ON e.id = o.employee_id;
右连接
- 使用
RIGHT JOIN
进行右连接:SELECT e.first_name, e.last_name, o.order_number FROM employees e RIGHT JOIN orders o ON e.id = o.employee_id;
全外连接
- 使用
FULL OUTER JOIN
进行全外连接(某些数据库不支持此语法,可以使用UNION
实现):SELECT e.first_name, e.last_name, o.order_number FROM employees e FULL OUTER JOIN orders o ON e.id = o.employee_id;
子查询
- 使用子查询嵌套查询:
SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
10. 事务
开始事务
- 使用
START TRANSACTION
或BEGIN
开始一个事务:START TRANSACTION;
提交事务
- 使用
COMMIT
提交事务:COMMIT;
回滚事务
- 使用
ROLLBACK
回滚事务:ROLLBACK;
11. 视图
创建视图
- 使用
CREATE VIEW
语句创建视图:CREATE VIEW high_salary_employees AS SELECT * FROM employees WHERE salary > 50000.00;
查询视图
- 使用
SELECT
语句查询视图:SELECT * FROM high_salary_employees;
删除视图
- 使用
DROP VIEW
语句删除视图:DROP VIEW high_salary_employees;
12. 存储过程
创建存储过程
- 使用
CREATE PROCEDURE
语句创建存储过程:DELIMITER // CREATE PROCEDURE GetHighSalaryEmployees() BEGIN SELECT * FROM employees WHERE salary > 50000.00; END // DELIMITER ;
调用存储过程
- 使用
CALL
语句调用存储过程:CALL GetHighSalaryEmployees();
删除存储过程
- 使用
DROP PROCEDURE
语句删除存储过程:DROP PROCEDURE GetHighSalaryEmployees;
总结
以上是一个全面的 SQL 入门教程,涵盖了从基础语法到复杂查询、事务、视图和存储过程的基本步骤。通过这些基础知识,你可以开始编写简单的 SQL 查询,并进一步探索更复杂的功能和创意。