从零学SQL 05 基础查询

刚开始学数据库,只会写 SELECT *?本文将带你全面掌握 MySQL 基础查询!从语法规范到别名设置,并提示了全表查询和深分页可能产生的性能问题。文末还揭秘了"为什么单行注释 -- 后必须加空格"的有趣细节。

文章目录

    • [一、 SQL 语法基础:规则与规范](#一、 SQL 语法基础:规则与规范)
      • [1.1 大小写](#1.1 大小写)
      • [1.2 语句终止符 (Semicolon,分号)](#1.2 语句终止符 (Semicolon,分号))
      • [1.3 备注](#1.3 备注)
    • [二、 查询数据](#二、 查询数据)
      • [2.1 全表查询](#2.1 全表查询)
      • [2.2 查询指定列](#2.2 查询指定列)
    • [三、 结果集优化:去重与限制](#三、 结果集优化:去重与限制)
      • [3.1 数据去重 (DISTINCT)](#3.1 数据去重 (DISTINCT))
      • [3.2 限制结果集数量 (LIMIT)](#3.2 限制结果集数量 (LIMIT))
    • 为什么单行注释,双横线后必须要有空格?

一、 SQL 语法基础:规则与规范

SQL 是由英文术语组成的指令集,这些术语叫做关键字。其中SELECT 是最频繁使用的关键字,用于从表中提取信息,基础语法是 SELECT ... FROM ...;。

1.1 大小写

  • SQL 语句不区分大小写 (SELECT 等于 select 等于 Select),你可以将关键字大写,表名/列名小写,以提升代码可读性,全部小写也行(SQL美化工具通常会自动对关键字大写)。

1.2 语句终止符 (Semicolon,分号)

  • 当SQL编辑区存在多个 SQL 语句并列时,语句间必须用分号 ; 分隔,而单条 SQL 末尾可以不加分号。但我还是建议统一规则:单条查询也以分号结尾。

1.3 备注

备注是我们为SQL添加的一些说明,解释器会忽略所有备注。

  • 单行备注,通常用来对SQL逻辑进行简短解释:
    • 标准 SQL 格式(-- ):使用两个短横线加一个空格,缺失空格会导致语法报错(可以试着想一下为什么?文末有答案)。
    • MySQL特有格式:使用#,后续可以不加空格。
  • 多行备注,适用于解释复杂的业务逻辑、存储过程描述,或者暂时屏蔽一段代码块:
    • 语法:以 /* 开始,以 */ 结束

二、 查询数据

2.1 全表查询

即查询某张表的全部数据,主要快速查看小表数据,如果表数据量很大,会带来很大的I/O压力(生产环境慎用),MySQL Workbench默认限制只查询1000条数据,你也可以解除此限制:

  • 语句 :SELECT * FROM tbl_name;,* 代表查询表中的所有字段,tbl_name代表当前数据库下的某张表名。如果跨库查询,需要用 db_name.tbl_name的方式指定。
  • 极简方式 (MySQL 8.0+) :TABLE tbl_name;,这是 SELECT * 的简写语法,是MySQL特有的写法,有一定限制(无法使用过滤条件)。

2.2 查询指定列

和全表查询类似,唯一的区别是你必须在 SELECT 关键字之后指定多个列名,并且必须用逗号分隔这些列。

  • 语法:SELECT column_names FROM tbl_name;
  • 可以使用 desc tbl_name; 查看表有哪些列
  • 别名:查询时可以为每个字段设置别名,语法是 "字段名 as 别名",其中as关键字可省略

三、 结果集优化:去重与限制

3.1 数据去重 (DISTINCT)

  • 语法:SELECT DISTINCT column_name FROM tbl_name;
  • 注意 :DISTINCT 作用于后面所有列的组合,而不仅仅是紧随其后的第一个字段,即所有字段的组合去重。

3.2 限制结果集数量 (LIMIT)

当我们不需要全量结果集时,可以使用limit关键字仅返回部分数据。

  • 基础截取 :LIMIT n;,返回前 n 行。
  • 范围偏移 :LIMIT offset, n;,从第 offset 行开始,取 n 行(即丢弃前offset行),这也是MySQL中一种查询分页方法。
  • 性能预警:LIMIT offset, n; 分页时,offset丢掉的数据也是占资源的(查询出来后再丢弃),如果offset非常大,可能导致严重的性能问题。此时要进行优化,不能用简单的limit语法。

为什么单行注释,双横线后必须要有空格?

对于SQL:SELECT 1--1,结果是什么?

  • 可能性 A(减法): 把 --1 看作是"减去负 1"。按照数学法则 1- (-1),结果应该是 2。
  • 可能性 B(注释): 把 --1 看作注释开始。那么 1 及其后面的内容都被忽略,结果应该是 1。

为了消除这种歧义,MySQL 规定:如果不加空格,-- 就优先被视为减法和负数符号的组合。只有加了空格,它才被确认为注释 ,因此 1--1 在MySQL中运行结果是2。

相关推荐
ClickHouseDB5 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_639906945 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
钱工的门窗技术笔记5 小时前
室内极窄全景移门的支承路径与预留接口:轨道形式、型材壁厚口径与验收边界
物联网·架构·数据分析
时间售卖铺6 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw6 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
quantdash_cc6 小时前
如何验证历史行情的交易日期是否完整覆盖研究区间?
python·数据分析·pandas·量化交易·股票数据·quantdash
数智园区合作社7 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙7 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3768 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02149 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法