作为一个程序员,不掌握SQL怎么行?掌握SQL是数据管理和分析的必备技能,本教程将带你系统学习SQL的核心命令和实用技巧,从入门到精通。

什么是SQL?

SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。通过SQL,你可以:

  • 创建和管理数据库和表
  • 插入、更新和删除数据
  • 查询和分析数据
  • 设置访问权限
  • 管理事务

SQL主要分为四类命令:

  1. DDL(数据定义语言) - 创建/修改数据库结构
  2. DML(数据操作语言) - 操作数据
  3. DQL(数据查询语言) - 查询数据
  4. DCL(数据控制语言) - 控制访问权限

一、数据库操作

创建数据库

CREATE DATABASE school_db;

查看所有数据库

SHOW DATABASES;

选择数据库

USE school_db;

删除数据库

DROP DATABASE school_db;

二、表操作

创建表

CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 15),
email VARCHAR(100) UNIQUE,
enrollment_date DATE DEFAULT CURRENT_DATE
);

查看表结构

DESCRIBE students;

修改表结构

-- 添加新列
ALTER TABLE students ADD COLUMN major VARCHAR(50);

-- 修改列类型
ALTER TABLE students MODIFY COLUMN age SMALLINT;

-- 删除列
ALTER TABLE students DROP COLUMN email;

删除表

DROP TABLE students;

三、数据操作(CRUD)

插入数据

INSERT INTO students (name, age, enrollment_date)
VALUES
('张三', 18, '2023-09-01'),
('李四', 19, '2023-08-25'),
('王五', 17, '2023-09-05');

查询数据

-- 查询所有列
SELECT * FROM students;

-- 查询特定列
SELECT name, age FROM students;

-- 带条件查询
SELECT * FROM students WHERE age > 18;

更新数据

UPDATE students
SET age = 20
WHERE name = '张三';

删除数据

DELETE FROM students
WHERE name = '王五';

四、高级查询技巧

排序结果

SELECT * FROM students
ORDER BY age DESC, name ASC;

限制结果数量

SELECT * FROM students
ORDER BY enrollment_date DESC
LIMIT 5;

模糊查询

SELECT * FROM students
WHERE name LIKE '张%';

聚合函数

SELECT
COUNT(*) AS total_students,
AVG(age) AS average_age,
MIN(enrollment_date) AS earliest_enrollment,
MAX(age) AS max_age
FROM students;

分组统计

SELECT
major,
COUNT(*) AS student_count,
AVG(age) AS avg_age
FROM students
GROUP BY major
HAVING COUNT(*) > 5;

五、表连接

创建课程表

CREATE TABLE courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(50),
instructor VARCHAR(50)
);

CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrollment_date DATE,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

内连接

SELECT s.name, c.course_name
FROM students s
INNER JOIN enrollments e ON s.id = e.student_id
INNER JOIN courses c ON e.course_id = c.course_id;

左连接

SELECT s.name, c.course_name
FROM students s
LEFT JOIN enrollments e ON s.id = e.student_id
LEFT JOIN courses c ON e.course_id = c.course_id;

六、子查询

单行子查询

SELECT * FROM students
WHERE age > (SELECT AVG(age) FROM students);

多行子查询

SELECT * FROM courses
WHERE course_id IN (
SELECT course_id FROM enrollments
GROUP BY course_id
HAVING COUNT(*) > 30
);

七、索引优化

创建索引

-- 单列索引
CREATE INDEX idx_student_name ON students(name);

-- 复合索引
CREATE INDEX idx_student_age_name ON students(age, name);

-- 唯一索引
CREATE UNIQUE INDEX idx_unique_email ON students(email);

查看索引

SHOW INDEX FROM students;

删除索引

DROP INDEX idx_student_name ON students;

八、视图

创建视图

CREATE VIEW student_summary AS
SELECT
s.id,
s.name,
COUNT(e.course_id) AS courses_enrolled
FROM students s
LEFT JOIN enrollments e ON s.id = e.student_id
GROUP BY s.id, s.name;

使用视图

SELECT * FROM student_summary
WHERE courses_enrolled > 3;

删除视图

DROP VIEW student_summary;

九、事务管理

START TRANSACTION;

-- 一系列操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

-- 或回滚事务
-- ROLLBACK;

十、最佳实践

  1. 命名规范:使用有意义的表名和列名(如student_id而非sid
  2. **避免SELECT ***:只选择需要的列
  3. 使用参数化查询:防止SQL注入攻击
  4. 索引优化:为经常查询的列创建索引
  5. 定期备份:使用mysqldump或类似工具
mysqldump -u username -p database_name > backup.sql

常见错误处理

权限问题

-- 授予权限
GRANT SELECT, INSERT ON school_db.* TO 'user'@'localhost';

-- 撤销权限
REVOKE INSERT ON school_db.* FROM 'user'@'localhost';

保留关键字冲突

-- 使用反引号包裹关键字
CREATE TABLE `user` (
`id` INT PRIMARY KEY,
`name` VARCHAR(50)
);

学习资源推荐

  1. SQLZoo - 交互式SQL学习平台
  2. W3Schools SQL教程 - 基础到进阶教程
  3. SQL Fiddle - 在线SQL测试环境
  4. LeetCode数据库题库 - 实战练习题

通过本教程,你已经掌握了SQL的核心概念和常用命令。持续练习是提高SQL技能的关键 - 尝试创建自己的数据库项目,解决实际问题,你将成为SQL专家!

参考&致谢

系列教程

全部文章RSS订阅

数据库系列


作者: 夜法之书
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 夜法之书 !
评论
数据加载中 ...
 上一篇

阅读全文

PostgreSQL命令行使用教程:掌握 psql 工具
PostgreSQL命令行使用教程:掌握 psql 工具 PostgreSQL命令行使用教程:掌握 psql 工具
掌握PostgreSQL的命令行工具 psql 是高效管理数据库的关键。本文将带你全面了解这个强大的交互式终端工具的各种使用方法,包括各种常见问题和技巧总结。
2025-11-22
下一篇 

阅读全文

Zlibrary 图书资源下载与 Calibre 图书管理打造结构化电子图书馆高阶教程
Zlibrary 图书资源下载与 Calibre 图书管理打造结构化电子图书馆高阶教程 Zlibrary 图书资源下载与 Calibre 图书管理打造结构化电子图书馆高阶教程
电子书不仅要下载可看,还要有书签,封面,简洁,作者,出版社等元数据帮助记忆和管理,否则,下载了一堆没法查找和没下载差不多!再加上世界上最大的电子书图书馆 Zlibrary ,这里几乎能找到所有的电子化图书!Calibre 和 Zlibrary 结合起来使用,就可以创建结构化的电子图书馆!本文将介绍Calibre 的使用,刮削,图书管理,web 界面的图书管理,重点介绍 Zlibrary 的使用。
2025-09-05
  目录