一、SQL 概述
1. SQL 的发展
-
SQL:Structured Query Language,结构化查询语言
-
起源于 1974 年 IBM 的论文《SEQUEL》
-
标准版本:SQL-86、SQL-89、SQL-92、SQL-99 等
-
排行榜
2. SQL 分类
分类 | 名称 | 作用 | 关键字 |
---|---|---|---|
DDL | 数据定义语言 | 创建/修改表结构 | CREATE 、DROP 、ALTER |
DML | 数据操作语言 | 增、删、改、查 | INSERT 、DELETE 、UPDATE 、SELECT |
DCL | 数据控制语言 | 权限管理 | GRANT 、REVOKE |
DQL | 数据查询语言 | 查询数据 | SELECT (实际上属于 DML,但常独立分出) |
TCL | 事务控制语言 | 控制事务提交/回滚 | COMMIT 、ROLLBACK |
一般情况下我们只分为DDL、DML、DCL这三类。 |
二、SQL 编写规范
1. 书写规则
-
语句可多行,建议子句分行写,缩进清晰
-
每条命令以
;
、g
或G
结尾 -
标点必须成对:括号、单引号、双引号等
-
使用英文输入法下的半角字符
2. 大小写规范
-
关键字和函数名:建议全大写
-
数据库名、表名、字段名:建议全小写
-
Windows 下 MySQL 不区分大小写,Linux 下区分
3. 注释方式
-- 单行注释(推荐,后必须有空格) # 单行注释(MySQL 特有) /* 多行注释 */
4. 命名规范(简记)
-
名称 ≤ 30 字符,仅含 A-Z、a-z、0-9 和 _
-
不可与系统关键字冲突(如
order
),必要时使用 着重号(反引号)“ 包裹 -
命名统一风格、见名知意
三、基本 SELECT 语法
1. SELECT 语法结构
SELECT column1, column2, ... FROM table_name WHERE 条件;
2. SELECT
- 选择所有字段(不推荐用于生产环境)
SELECT * FROM employees;
3. 指定字段 & 列别名
-- 给字段起别名,as 可省略 SELECT employee_id AS "编号", last_name 姓名 FROM employees;
⚠️ 字段别名中如有空格,必须使用引号
" "
括起来。
四、常用 SELECT 特性
1. 去除重复项:DISTINCT
SELECT DISTINCT department_id FROM employees; -- 同时去重 department_id 和 salary 的组合 SELECT DISTINCT department_id, salary FROM employees;
DISTINCT
必须放在所有列名前面,对所有列组合进行去重。
2. 空值(NULL)运算
-
任何运算遇到
NULL
都会返回NULL
-
NULL != ''
(空值 ≠ 空字符串) -
NULL
是有空间占用的
3. 着重号 “
- 避免关键字冲突,如
order
SELECT * FROM `order`;
4. 查询常数
- 给查询结果添加一列常量字段(用于标识、合并等场景)
SELECT '尚硅谷' AS corporation, last_name FROM employees;
五、查看表结构
使用 DESC 或 DESCRIBE
DESC employees;
字段说明:
字段名 | 含义 |
---|---|
Field | 字段名称 |
Type | 数据类型 |
Null | 是否可为 NULL |
Key | 索引类型(PRI 主键,UNI 唯一,MUL 可重复) |
Default | 默认值 |
Extra | 额外信息(如 AUTO_INCREMENT) |
六、过滤数据(WHERE 子句)
SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 90;
-
WHERE
语句紧跟在FROM
后面 -
用于过滤数据行,只返回满足条件的记录
七、数据导入(命令行)
在 MySQL 命令行中使用:
source 路径/文件.sql;
例:
source d:/mysqldb.sql;
补充建议
-
尽量避免
SELECT *
,明确指定字段可提升性能 -
养成良好命名规范和注释习惯,减少团队协作中的沟通成本
-
使用常数列或别名可提升数据可读性与可维护性
-
经常使用
DESC 表名
熟悉表结构,是编写 SQL 的前提