MySQL基础教程:SELECT语句详解
- 一、SQL概述
- 1.1 SQL背景知识
- 1.2 SQL语言排行榜
- 1.3 SQL分类
- 二、SQL语言的规则与规范
- 2.1 基本规则
- 2.2 大小写规范
- 2.3 注释
- 2.4 命名规则
- 2.5 数据导入
- 三、基本的SELECT语句
- 3.0 最简单的SELECT
- 3.1 SELECT...FROM
- 3.2 列的别名
- 3.3 去除重复行
- 3.4 空值处理
- 3.5 着重号
- 3.6 查询常数
- 四、显示表结构
- 五、过滤数据
- 六、最佳实践建议
- 总结
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、SQL概述
1.1 SQL背景知识
SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,由IBM在上世纪70年代开发出来。作为一门已经存在45年的语言,SQL展现了惊人的生命力:
- 1974年:IBM研究员发布《SEQUEL:一门结构化的英语查询语言》论文
- 标准化历程:SQL-86 → SQL-89 → SQL-92 → SQL-99
- 两个重要标准:SQL92和SQL99,至今仍被广泛遵循
SQL之所以经久不衰,是因为它作为数据处理的通用语言,几乎被所有关系型数据库系统支持,包括MySQL、Oracle、SQL Server等。
1.2 SQL语言排行榜
在TIOBE编程语言排行榜中,SQL长期保持Top 10的位置,这证明了它在实际开发中的重要性。
1.3 SQL分类
SQL语言按功能主要分为三大类:
-
DDL(数据定义语言):用于定义数据库对象
- 关键字:CREATE、DROP、ALTER等
-
DML(数据操作语言):用于数据操作
- 关键字:INSERT、DELETE、UPDATE、SELECT等
- 其中SELECT是最基础且最重要的语句
-
DCL(数据控制语言):用于权限控制
- 关键字:GRANT、REVOKE等
此外,还有:
- DQL(数据查询语言):专指SELECT查询
- TCL(事务控制语言):COMMIT、ROLLBACK等
二、SQL语言的规则与规范
2.1 基本规则
-
书写格式:
- 可以单行或多行书写
- 建议子句分行写并使用缩进
- 每条命令以
;
、\g
或\G
结束
-
关键字:
- 不能缩写或分行
-
标点符号:
- 括号、引号必须成对出现
- 使用英文半角输入
- 字符串和日期用单引号
- 列别名建议用双引号
2.2 大小写规范
- Windows:大小写不敏感
- Linux:大小写敏感
- 推荐规范:
- 数据库名、表名、字段名等用小写
- SQL关键字、函数名用大写
2.3 注释
MySQL支持三种注释方式:
# 单行注释(MySQL特有)
-- 单行注释(--后必须有空格)
/* 多行注释 */
2.4 命名规则
-
长度限制:
- 数据库/表名≤30字符
- 变量名≤29字符
-
合法字符:A-Z、a-z、0-9、_
-
禁止事项:
- 名称中包含空格
- 使用保留字(如必须使用,用``包围)
2.5 数据导入
在命令行中使用source
指令导入SQL文件:
mysql> source d:/mysqldb.sql
三、基本的SELECT语句
3.0 最简单的SELECT
SELECT 1; -- 返回常数1
SELECT 9/2; -- 返回计算结果4.5
3.1 SELECT…FROM
基本语法:
SELECT 列名1, 列名2
FROM 表名;
查询所有列(不推荐生产环境使用):
SELECT * FROM departments;
查询特定列:
SELECT department_id, location_id
FROM departments;
3.2 列的别名
为列指定别名的三种方式:
-- 方式1:使用AS关键字
SELECT last_name AS name FROM employees;-- 方式2:省略AS
SELECT last_name name FROM employees;-- 方式3:别名包含空格时用双引号
SELECT salary*12 "Annual Salary" FROM employees;
3.3 去除重复行
使用DISTINCT
关键字:
-- 单列去重
SELECT DISTINCT department_id FROM employees;-- 多列组合去重
SELECT DISTINCT department_id, salary FROM employees;
注意:
- DISTINCT必须放在所有列名前
- DISTINCT对后面所有列的组合进行去重
3.4 空值处理
- 任何与NULL的运算结果都是NULL
- NULL ≠ 空字符串(NULL占用空间但长度为空)
示例:
SELECT employee_id, salary, commission_pct,12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;
-- 当commission_pct为NULL时,计算结果为NULL
3.5 着重号
当标识符与关键字冲突时,使用``包围:
-- 错误写法
SELECT * FROM ORDER;-- 正确写法
SELECT * FROM `order`;
3.6 查询常数
可以在结果集中添加常数列:
SELECT '部门' AS corporation, last_name
FROM employees;
四、显示表结构
使用DESCRIBE
或DESC
命令:
DESCRIBE employees;
-- 或
DESC employees;
输出结果包含:
- Field:字段名
- Type:字段类型
- Null:是否允许NULL
- Key:索引类型(PRI/UNI/MUL)
- Default:默认值
- Extra:附加信息(如AUTO_INCREMENT)
五、过滤数据
使用WHERE子句进行条件过滤:
SELECT 字段1, 字段2
FROM 表名
WHERE 条件;
示例:
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90;
六、最佳实践建议
- 避免使用SELECT *:只查询需要的列
- 一致的命名规范:团队统一大小写规则
- 处理NULL值:使用IFNULL或COALESCE函数
- 注释:复杂SQL添加必要注释
- 格式化:保持SQL语句良好的可读性
总结
SELECT语句作为SQL中最基础也最重要的语句,掌握其各种用法是数据库操作的基石。从简单的数据查询到条件过滤,SELECT语句提供了丰富灵活的数据检索能力。理解并遵循SQL的书写规范和最佳实践,能够帮助我们编写出高效、可维护的数据库查询语句。
🌺The End🌺点点关注,收藏不迷路🌺 |