news 2026/5/15 18:53:28

MySQL 基本的SELECT语句

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 基本的SELECT语句

1. SQL概述

1.1 SQL概述

  • 自1946年电脑诞生以来,SQL经久不衰
    • 1974 年,IBM 研究员发布了一篇揭开数据库技术的论文《SEQUEL:一门结构化的英语查询语言》,直到今天这门结构化的查询语言并没有太大的变化
  • 无论前后端,都会与数据打交道,都需要了解如何快速精确的提取需要的数据
  • SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道,由IBM上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准, 先后有 SQL-86 , SQL-89 , SQL-92 , SQL-99 等标准
    • QL 有两个重要的标准,分别是 SQL92 和 SQL99,它们分别代表了 92 年和 99 年颁布的 SQL 标准,今天使用的 SQL 语言依然遵循这些标准
  • 不同的数据库生产厂商都支持SQL语句,但都有特有内容
    • 好比,SQL规范是普通话,MySQL、Oracle等是方言

1.2 SQL语言排行榜

自 SQL 加入 TIOBE 编程语言排行榜,一直保持在 Top 10


1.3 SQL 分类

SQL语言在功能上主要分为3大类DDL,DML,DCL:

  • DQL本属于DML,因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类
  • TCL本属于DCL
分类全称主要作用核心关键字
DDLData Definition Language
(数据定义语言)
定义和修改数据库对象的结构(如库、表、索引等)CREATE(创建)、DROP(删除)、ALTER(修改)、TRUNCATE(清空)
DMLData Manipulation Language
(数据操作语言)
对数据库表中的数据记录进行增、删、改操作INSERT(插入)、UPDATE(更新)、DELETE(删除)、
DQLData Query Language
(数据查询语言)
专门用于从数据库表中查询和检索数据(不修改数据本身)SELECT(查询)
DCLData Control Language
(数据控制语言)
定义数据库用户的访问权限和安全级别GRANT(授权)、REVOKE(撤销权限)
TCLTransaction Control Language
(事务控制语言)
用于管理数据库中的事务,维护数据的一致性COMMIT(提交)、ROLLBACK(回滚)、SAVEPOINT(保存点)
  • SELECT是SQL语言的基础,最为重要

2. SQL语言的规则与规范

规则 必 遵守
建议 建 遵守

2.1 基本规则(必须遵守)

  • SQL 可以写在一行或者多行

    • 为提高可读性,各子句分行写,必要时缩进
  • 每条命令以 ; 或 \g 或 \G 结束
    \g结尾与\G结尾的不同
    ;与\G结尾结果相同

  • 关键字不能被缩写也不能分行
    蓝色的就是关键字

  • 关于标点符号

    • 必须保证所有的()、单引号、双引号是成对结束的
    • 必须使用英文状态下的半角输入方式
    • 字符串型和日期时间类型的数据可以使用单引号(’ ')表示
    • 列的别名,尽量使用双引号(" "),而且不建议省略as

2.2 SQL大小写规范 (建议遵守)

  • MySQL 在 Windows 环境下是大小写不敏感的
    Windows本身不区分大小写
    证:
    将 ABC.text 文件拖入 abc.text 所在文件夹会提示:

  • MySQL 在 Linux 环境下是大小写敏感的

    • 数据库名、表名、表的别名、变量名是严格区分大小写的
    • 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的
  • 推荐采用统一的书写规范:

    • 数据库名、表名、表别名、字段名、字段别名等都小写
    • SQL 关键字、函数名、绑定变量等都大写

2.3 注释

单行注释:#注释文字(MySQL特有的方式) 单行注释:-- 注释文字(--后面必须包含一个空格) 多行注释:/* 注释文字 */ /* 注释文字 */
  • 注意:
    • 多行注释不能嵌套/*会与最近的*/配对

    • –后面必须包含一个空格

      变灰就说明是注释,第一个没变灰,且运行会报错


2.4 命名规则(暂时了解)

  • 数据库、表名不得超过30个字符,变量名限制为29个
  • 必须只能包含 A–Z, a–z, 0–9,_共63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 不能重名
    • 同一个MySQL软件中,数据库不能同名
    • 同一个库中,表不能重名
    • 同一个表中,字段不能重名
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突
    如果坚持使用,请在SQL语句中使用 `(着重号)引起来
  • 保持字段名和类型的一致性
    • 在命名字段并为其指定数据类型的时候一定要保证一致性
    • 假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了

例:

#以下两句是一样的,不区分大小写 show databases; SHOW DATABASES; #创建表格 create table student info(...); #表名错误,因为表名有空格 create table student_info(...); #其中order使用``飘号,因为order和系统关键字或系统函数名等预定义标识符重名了 CREATE TABLE `order`( id INT, lname VARCHAR(20) ); select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略 select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略"" select id as 编号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""

2.5 数据导入指令

命令行客户端登录mysql,使用source指令导入

mysql> source 路径

eg:

mysql> source d:\mysqldb.sql

注意:图形化工具中不能使用此命令


3. 基本的SELECT语句

3.0 SELECT…

SELECT 1; #没有任何子句 SELECT 9/2; #没有任何子句

3.1 SELECT … FROM

  • 语法:
SELECT 标识选择哪些列 FROM 标识从哪个表中选择
  • *表示表中的所有字段(或列)

在生产环境下,不推荐直接使用 SELECT * 进行查询:

可以节省输入查询语句的时间,但是获取不需要的列数据会降低查询和所使用的应用程序的效率
但其也有优势,即当不知道所需要的列的名称时,可以通过它获取它们


3.2 列的别名

  • 重命名一个列
  • 列名和别名间一个空格或AS
  • ""可有可无,但若别名中有空格,则必须用双引号引起来
  • 别名应简短

注:' '也能编译通过,因为MySQL这方面不严谨,但不建议这么写,不规范


3.3 去除重复行

  • 默认查询返回全部行
  • 使用关键字DISTINCT去除重复行
SELECT DISTINCT department_id FROM employees;

注意:

  1. DISTINCT 需要放到所有列名的前面,如果写成SELECT salary, DISTINCT department_id FROM employees会报错
    可以这么想:要是后面的去重了,前面的没有,那行数就不一样了,这表就没法看了
  2. DISTINCT 是对后面所有列名的组合进行去重,能看到最后的结果是 74 条(然而id只有11种),因为这 74 个部门id不同,都有 salary 这个属性值
    如果想要看都有哪些不同的部门(department_id),只需要写 DISTINCT department_id 即可,后面不需要再加其他的列名了
    • 这么写不报错,但没有实际意义

3.4 空值参与运算

  • null ≠ 0 ,‘’,‘null’
  • null 参与运算,结果为 null(任何运算均如此,只要有null,结果就为null)

  • MySQL中控制长度为空,且占用空间

3.5 着重号

  • 着重号: `

实例:

  • 在查询order表时候报错

  • 因为order是关键字,所以需用 ` 引起来
    之前也有说过:
    [[MySQL 基础笔记#2.4 命名规则(暂时了解)]]
    注:
    普通字段也可以加,但没必要

结论:

  1. 需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突
  2. 若真的相同,需在 SQL语句中使用一对 `(着重号)引起来

3.6 查询常数

就是在 SELECT 查询结果中增加一列固定的常数列

why:
SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数


注意:若没有别名,那么常数列的列名就是那个常数本身


4. 显示表结构

使用DESCRIBE或 DESC 命令,表示表结构

其中,各个字段的含义分别解释如下:

  • Field:表示字段名称
  • Type:表示字段类型
    • barcode、goodsname 是文本型的
    • price 是整数类型的
  • Null:表示该列是否可以存储NULL值
  • Key:表示该列是否已编制索引
    • PRI表示该列是表主键的一部分;
    • UNI表示该列是UNIQUE索引的一部分;
    • MUL表示在列中某个给定值允许出现多次
  • Default:表示该列是否有默认值,如果有,那么值是多少
  • Extra:表示可以获取的与给定列有关的附加信息
    例如AUTO_INCREMENT等

5. 过滤数据

诉求:查询满足条件的数据

  • 语法:
SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件
  • 使用WHERE 子句,将不满足条件的行过滤掉
  • WHERE子句紧随 FROM子句

eg:

注意:

  1. Windows中大小写不分,字符串区分大小写,但若是查询字符串还是不区分,这里还是因为MySQL不严谨的锅
  2. MySQL中用' '(单引号) 表示字符串

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 18:52:41

如何3分钟构建智能简历解析系统?PyResParser终极指南

如何3分钟构建智能简历解析系统?PyResParser终极指南 【免费下载链接】pyresparser A simple resume parser used for extracting information from resumes 项目地址: https://gitcode.com/gh_mirrors/py/pyresparser 还在手动筛选海量简历吗?Py…

作者头像 李华
网站建设 2026/5/15 18:52:39

WzComparerR2终极指南:5步快速掌握冒险岛WZ文件解析工具

WzComparerR2终极指南:5步快速掌握冒险岛WZ文件解析工具 【免费下载链接】WzComparerR2 Maplestory online Extractor 项目地址: https://gitcode.com/gh_mirrors/wz/WzComparerR2 想要深入了解冒险岛游戏内部的神秘世界吗?WzComparerR2作为一款强…

作者头像 李华
网站建设 2026/5/15 18:48:57

深度解析:基于MIOT协议的小米智能设备HomeAssistant集成技术实现

深度解析:基于MIOT协议的小米智能设备HomeAssistant集成技术实现 【免费下载链接】hass-xiaomi-miot Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices. 小米米家智能家居设备接入Hass集成 项目地址:…

作者头像 李华
网站建设 2026/5/15 18:48:55

如何免费播放英雄联盟所有版本回放:ROFL-Player完整使用指南

如何免费播放英雄联盟所有版本回放:ROFL-Player完整使用指南 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联盟…

作者头像 李华