SQL 从基础操作到高级查询

文章目录


SQL从基础操作到高级查询

SQL(结构化查询语言)是管理和操作关系型数据库的核心工具,广泛应用于数据查询、管理和维护。本文将系统梳理SQL的核心知识点,涵盖数据操作、表结构管理、查询优化及SQL分类等内容,帮助你构建完整的SQL知识体系。

一、SQL基础操作

1.1 数据查询(SELECT)

SELECT语句用于从数据库中检索数据,是SQL中最常用的命令。

sql 复制代码
SELECT column1, column2, ... FROM table_name WHERE condition;
  • 使用*选择所有列
  • WHERE子句用于过滤数据
  • 支持条件组合(AND、OR、NOT)
sql 复制代码
-- 查询所有男性学生
SELECT * FROM student WHERE sex='男';

1.2 数据操作

插入数据(INSERT)
sql 复制代码
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
更新数据(UPDATE)
sql 复制代码
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE some_column = some_value;
删除数据(DELETE)
sql 复制代码
DELETE FROM table_name
WHERE some_column = some_value;

注意:不指定WHERE条件将删除表中所有数据!

二、高级查询技巧

2.1 WHERE子句高级用法

sql 复制代码
-- 模糊匹配(多字符)
SELECT * FROM students WHERE clazz LIKE 'xx%';

-- 模糊匹配(单字符)
SELECT * FROM students WHERE stu_name LIKE '张_';

-- 多关键词匹配
SELECT * FROM students WHERE name RLIKE '张|李|王';

-- IN操作符
SELECT * FROM students WHERE clazz IN ('xx', 'xx', 'xx');

-- BETWEEN范围查询
SELECT * FROM students WHERE age BETWEEN 22 AND 24;

2.2 排序与分组

ORDER BY排序
sql 复制代码
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
GROUP BY分组
sql 复制代码
SELECT column1, column2, ..., AVG(column_name)
FROM table_name
GROUP BY column1, column2, ...;
HAVING过滤分组
sql 复制代码
SELECT column1, column2, ..., aggregate_function(column_name)
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;

2.3 限制查询结果

LIMIT限制行数
sql 复制代码
-- 限制返回10行
SELECT * FROM students LIMIT 10;

-- 从第5行开始,返回10行
SELECT * FROM students LIMIT 5, 10;
OFFSET偏移量
sql 复制代码
SELECT column1, column2, ...
FROM table_name
LIMIT number OFFSET offset;

三、表结构管理

3.1 修改表结构(ALTER TABLE)

添加字段
sql 复制代码
-- 增加字段
ALTER TABLE students ADD [COLUMN] dateT DATE;

-- 增加字段并设置默认值
ALTER TABLE students ADD dateT DATE DEFAULT "2025-12-12";
修改字段
sql 复制代码
-- 修改字段类型
ALTER TABLE students MODIFY dataT DATETIME;

-- 修改字段注释
ALTER TABLE students MODIFY dateT DATE COMMENT "日期";

-- 修改字段约束
ALTER TABLE students MODIFY stu_id INT NOT NULL;
删除字段
sql 复制代码
ALTER TABLE students DROP length;
重命名字段
sql 复制代码
ALTER TABLE students CHANGE stu_id sid VARCHAR(255);

3.2 表级操作

修改字符集
sql 复制代码
ALTER TABLE students CHARACTER SET utf8;
重命名表
sql 复制代码
ALTER TABLE students RENAME TO student;
-- 或
RENAME TABLE students TO student;

3.3 删除表

sql 复制代码
DROP TABLE [IF EXISTS] students;

四、数据连接操作

4.1 内连接(INNER JOIN)

sql 复制代码
SELECT s.*, sc.subject_id, su.subject_name
FROM (
    students s
    JOIN scores sc
    JOIN subjects su
    ON s.stu_id = sc.stu_id AND sc.subject_id = su.subject_id
);

4.2 外连接

左外连接(LEFT JOIN)
sql 复制代码
SELECT *
FROM students AS s
LEFT JOIN scores AS sc
ON s.stu_id = sc.stu_id;
右外连接(RIGHT JOIN)
sql 复制代码
SELECT *
FROM students AS s
RIGHT JOIN scores AS sc
ON s.stu_id = sc.stu_id;

4.3 集合操作

UNION(去重合并)
sql 复制代码
SELECT s.stu_id, s.stu_name, sc.score, su.subject_name
FROM students s
JOIN scores sc ON s.stu_id = sc.stu_id
JOIN subjects su ON sc.subject_id = su.subject_id
WHERE sc.score >= 90
UNION
SELECT s.stu_id, s.stu_name, sc.score, su.subject_name
FROM students s
JOIN scores sc ON s.stu_id = sc.stu_id
JOIN subjects su ON sc.subject_id = su.subject_id
WHERE sc.score <= 60
ORDER BY score DESC;
UNION ALL(不去重复合)
sql 复制代码
SELECT name FROM students WHERE age = 20
UNION ALL
SELECT name FROM students WHERE age = 19;

五、SQL分类体系

5.1 数据查询语言(DQL)

核心作用 :查询/检索数据(只读)
关键字:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、JOIN

5.2 数据操作语言(DML)

核心作用 :增删改数据内容
关键字:INSERT、UPDATE、DELETE、MERGE

5.3 数据定义语言(DDL)

核心作用 :定义/修改数据库结构
关键字:CREATE、ALTER、DROP、TRUNCATE、RENAME

  • CREATE、ALTER、DROP:可以复原

5.4 数据控制语言(DCL)

核心作用 :管理权限和事务
关键字:GRANT、REVOKE、COMMIT、ROLLBACK

5.5 事务控制语言(TCL)

核心作用 :事务管理(DCL子集)
关键字:COMMIT、ROLLBACK、SAVEPOINT

六、实用技巧

6.1 数据导入导出

shell 复制代码
# 导入数据
LOAD DATA LOCAL INFILE '路径' INTO TABLE 表名 FIELDS TERMINATED BY '分隔符';

# 导出数据
mysqldump -uroot -p stu students > /root/data/mydb.sql

# 备份并压缩
alias db_backup='mysqldump -uroot -p --single-transaction stu students | gzip > /root/data/mydb_$(date +%Y%m%d).sql.gz'

6.2 查看数据库信息

sql 复制代码
-- 查看表结构
SHOW CREATE TABLE students;

-- 查看当前数据库
SELECT DATABASE();
相关推荐
余槐i6 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹6 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人6 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台8 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
花间相见9 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见9 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing202310 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶10 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课10 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析