Appearance
11.4 SQL 基础语法
什么是 SQL?
SQL(Structured Query Language)是结构化查询语言,是用于管理关系型数据库的标准语言。
SQL 的分类
- DDL(数据定义语言):用于定义数据库结构
- DML(数据操作语言):用于操作数据
- DQL(数据查询语言):用于查询数据
- DCL(数据控制语言):用于控制访问权限
DDL 语句
1. 创建数据库
sql
CREATE DATABASE database_name;
-- 创建数据库并指定字符集
CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2. 删除数据库
sql
DROP DATABASE database_name;
-- 安全删除(如果存在)
DROP DATABASE IF EXISTS database_name;3. 创建表
sql
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);
-- 示例:创建用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
age INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);4. 修改表
sql
-- 添加列
ALTER TABLE table_name ADD column_name datatype constraints;
-- 修改列
ALTER TABLE table_name MODIFY column_name datatype constraints;
-- 删除列
ALTER TABLE table_name DROP column_name;
-- 重命名表
ALTER TABLE table_name RENAME TO new_table_name;5. 删除表
sql
DROP TABLE table_name;
-- 安全删除(如果存在)
DROP TABLE IF EXISTS table_name;DML 语句
1. 插入数据
sql
-- 插入完整记录
INSERT INTO table_name VALUES (value1, value2, ...);
-- 插入指定列
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
-- 插入多条记录
INSERT INTO table_name (column1, column2, ...) VALUES
(value1, value2, ...),
(value1, value2, ...),
...;
-- 示例
INSERT INTO users (username, email, password) VALUES
('admin', 'admin@example.com', 'password123'),
('user1', 'user1@example.com', 'password456');2. 更新数据
sql
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
-- 示例
UPDATE users SET age = 25 WHERE id = 1;
UPDATE users SET password = 'newpassword' WHERE username = 'admin';3. 删除数据
sql
DELETE FROM table_name WHERE condition;
-- 删除所有记录
DELETE FROM table_name;
-- 示例
DELETE FROM users WHERE id = 3;
DELETE FROM users WHERE age < 18;DQL 语句
1. 基本查询
sql
-- 查询所有列
SELECT * FROM table_name;
-- 查询指定列
SELECT column1, column2, ... FROM table_name;
-- 示例
SELECT id, username, email FROM users;2. 条件查询
sql
SELECT * FROM table_name WHERE condition;
-- 常用运算符:=, !=, >, <, >=, <=, LIKE, IN, BETWEEN
-- 示例
SELECT * FROM users WHERE age > 18;
SELECT * FROM users WHERE username LIKE 'a%';
SELECT * FROM users WHERE id IN (1, 2, 3);
SELECT * FROM users WHERE age BETWEEN 18 AND 30;3. 排序
sql
SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;
-- ASC:升序(默认)
-- DESC:降序
-- 示例
SELECT * FROM users ORDER BY created_at DESC;
SELECT * FROM users ORDER BY age ASC, username DESC;4. 分组
sql
SELECT column1, COUNT(*) FROM table_name GROUP BY column1;
-- 示例
SELECT age, COUNT(*) as user_count FROM users GROUP BY age;5. 限制
sql
SELECT * FROM table_name LIMIT 10;
SELECT * FROM table_name LIMIT 5 OFFSET 10;
-- 示例
SELECT * FROM users LIMIT 5; -- 取前5条
SELECT * FROM users LIMIT 5 OFFSET 5; -- 从第6条开始取5条6. 连接查询
sql
-- 内连接
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
-- 左连接
SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
-- 右连接
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
-- 示例:查询用户及其订单
SELECT users.username, orders.order_id, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;常用函数
1. 聚合函数
- COUNT():计算行数
- SUM():计算总和
- AVG():计算平均值
- MAX():计算最大值
- MIN():计算最小值
sql
-- 示例
SELECT COUNT(*) FROM users;
SELECT SUM(amount) FROM orders;
SELECT AVG(age) FROM users;
SELECT MAX(created_at) FROM users;2. 字符串函数
- CONCAT():连接字符串
- LENGTH():计算字符串长度
- UPPER():转换为大写
- LOWER():转换为小写
- SUBSTRING():截取字符串
sql
-- 示例
SELECT CONCAT(username, ' - ', email) FROM users;
SELECT LENGTH(username) FROM users;
SELECT UPPER(username) FROM users;3. 日期函数
- NOW():获取当前日期时间
- DATE():提取日期部分
- TIME():提取时间部分
- YEAR():提取年份
- MONTH():提取月份
- DAY():提取日
sql
-- 示例
SELECT NOW();
SELECT DATE(created_at) FROM users;
SELECT YEAR(created_at) FROM users;事务
1. 开始事务
sql
START TRANSACTION;2. 提交事务
sql
COMMIT;3. 回滚事务
sql
ROLLBACK;示例
sql
START TRANSACTION;
-- 操作1
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 操作2
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 检查是否有错误
-- 如果没有错误,提交事务
COMMIT;
-- 如果有错误,回滚事务
-- ROLLBACK;视图
创建视图
sql
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;
-- 示例
CREATE VIEW active_users AS SELECT * FROM users WHERE status = 'active';使用视图
sql
SELECT * FROM view_name;索引
创建索引
sql
CREATE INDEX index_name ON table_name (column1, column2, ...);
-- 唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column);
-- 示例
CREATE INDEX idx_username ON users (username);
CREATE UNIQUE INDEX idx_email ON users (email);删除索引
sql
DROP INDEX index_name ON table_name;练习
- 创建一个学生表,包含学号、姓名、性别、年龄、班级等字段
- 插入10条学生记录
- 查询年龄大于18的学生
- 更新某个学生的信息
- 删除某个学生记录
- 按年龄排序查询学生
- 计算学生的平均年龄
- 创建一个视图,只显示男生的信息
- 为学生表创建索引
