SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库的标准语言。无论是查询数据、插入新记录、更新现有记录,还是删除记录,SQL 都提供了一整套完整的指令。本教程将带您从基础开始,逐步掌握 SQL 的核心概念和常用操作。
一、SQL 基础概念
1. 什么是 SQL?
SQL 是一种标准的数据库查询和操作语言,用于在关系数据库管理系统(RDBMS)中进行数据操作。它可以用于创建、读取、更新和删除数据库中的数据。
2. 关系数据库管理系统(RDBMS)
RDBMS 是基于关系模型的数据库管理系统。常见的 RDBMS 有 MySQL、PostgreSQL、Oracle、SQL Server 等。它们都支持 SQL 语言,但在某些特性和功能上可能略有不同。
二、SQL 的基本操作
1. 创建数据库和表
创建数据库
sql复制代码CREATE DATABASE mydatabase;
创建表
sql复制代码CREATE TABLE employees ( id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), birth_date DATE, hire_date DATE );
2. 插入数据
sql复制代码INSERT INTO employees (id, first_name, last_name, birth_date, hire_date) VALUES (1, 'John', 'Doe', '1980-01-01', '2020-01-15');
3. 查询数据
查询所有列
sql复制代码SELECT * FROM employees;
查询特定列
sql复制代码SELECT first_name, last_name FROM employees;
使用条件查询
sql复制代码SELECT * FROM employees WHERE first_name = 'John';
4. 更新数据
sql复制代码UPDATE employees SET last_name = 'Smith' WHERE id = 1;
5. 删除数据
sql复制代码DELETE FROM employees WHERE id = 1;
三、SQL 的高级操作
1. 聚合函数
COUNT
sql复制代码SELECT COUNT(*) FROM employees;
SUM
sql复制代码SELECT SUM(salary) FROM employees;
AVG
sql复制代码SELECT AVG(salary) FROM employees;
MAX 和 MIN
sql复制代码SELECT MAX(salary) FROM employees; SELECT MIN(salary) FROM employees;
2. 分组和排序
分组(GROUP BY)
sql复制代码SELECT department, COUNT(*) FROM employees GROUP BY department;
排序(ORDER BY)
sql复制代码SELECT * FROM employees ORDER BY last_name ASC; SELECT * FROM employees ORDER BY hire_date DESC;
3. 联合查询(JOIN)
内连接(INNER JOIN)
sql复制代码SELECT employees.first_name, employees.last_name, departments.name FROM employees INNER JOIN departments ON employees.department_id = departments.id;
左连接(LEFT JOIN)
sql复制代码SELECT employees.first_name, employees.last_name, departments.name FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
右连接(RIGHT JOIN)
sql复制代码SELECT employees.first_name, employees.last_name, departments.name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
4. 子查询
作为条件的子查询
sql复制代码SELECT first_name, last_name FROM employees WHERE department_id = (SELECT id FROM departments WHERE name = 'Sales');
作为列的子查询
sql复制代码SELECT first_name, last_name, (SELECT name FROM departments WHERE departments.id = employees.department_id) AS department_name FROM employees;
四、数据库设计的基本原则
1. 规范化
数据库设计的规范化包括将数据分解为多个相关表,以减少数据冗余和提高数据完整性。常见的规范化范式有第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
2. 主键和外键
- 主键(Primary Key):唯一标识表中的每一行记录,通常是单个列或一组列。
- 外键(Foreign Key):用于建立和强制连接两个表之间的关系。
3. 数据完整性
通过定义适当的数据类型、设置约束(如 NOT NULL、UNIQUE、CHECK 等)来确保数据的准确性和一致性。
五、实战练习
通过以下几个简单的练习,可以巩固您对 SQL 的理解和掌握。
1. 创建并填充数据库和表
sql复制代码CREATE DATABASE company; USE company; CREATE TABLE departments ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); CREATE TABLE employees ( id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), department_id INT, hire_date DATE, FOREIGN KEY (department_id) REFERENCES departments(id) ); INSERT INTO departments (id, name) VALUES (1, 'Sales'), (2, 'Engineering'); INSERT INTO employees (id, first_name, last_name, department_id, hire_date) VALUES (1, 'John', 'Doe', 1, '2020-01-15'), (2, 'Jane', 'Smith', 2, '2019-03-10');
2. 查询和操作数据
查询所有员工的信息:
sql复制代码SELECT * FROM employees;查询特定部门的员工:
sql复制代码SELECT first_name, last_name FROM employees WHERE department_id = 1;更新员工的部门信息:
sql复制代码UPDATE employees SET department_id = 2 WHERE id = 1;删除某个员工:
sql复制代码DELETE FROM employees WHERE id = 2;