SQL 的查询语句

简介: 说到查询,我们要回答两个问题:1.查询什么?2.从哪查询?我们可以使用 SQL 的 SELECT 子句来表达要查询什么。使用 FROM 子句来表达从哪查询。举个例子,我们要从数据库 order_manager 的 products 表中查询商品名称信息。在查询之前,我们首先来看下导航面板,现在 sys 数据库的字体是加粗的,这表明当前选中的数据库是 sys。

1. 查询

说到查询,我们要回答两个问题:1.查询什么?2.从哪查询?我们可以使用 SQL 的 SELECT 子句来表达要查询什么。使用 FROM 子句来表达从哪查询。

举个例子,我们要从数据库 order_manager 的 products 表中查询商品名称信息。在查询之前,我们首先来看下导航面板,现在 sys 数据库的字体是加粗的,这表明当前选中的数据库是 sys。

网络异常,图片无法展示
|

而我们要从 order_manager 这个数据库中查询数据,所以我们需要切换数据库。我们可以使用 MySQL 的 USE 命令来选中数据库。

下面我们来演示一下,

USE order_manager

执行命令。我们也可以使用快捷方式,在 mac 上是 cmd + enter。我们看到 order_manager 的字体变成了加粗字体。也就是说我们当前选中了 order_manager 数据库。

网络异常,图片无法展示
|

在这里,有一点要说明下,SQL 语句不区分大小写,意思是我们可以使用大写或者小写,都是可以的。像刚才的语句我们可以使用,use order_manager。或者大小写混合,Use order_manager。但是比较规范的做法是,SQL 的关键字大写,表名或者字段名小写,这样更易于阅读和调试代码。

下面我们来演示下,如何从 products 表中查询 prod_name。

首先用 SELECT 来列出要查询什么?然后是用 FROM 列出从哪查询。

SELECT
prod_name FROM products;

运行结果如下:

网络异常,图片无法展示
|

如果你在自己的电脑上运行这个查询,可能会发现输出的数据顺序与这里不同。出现这个情况很正常。因为如果没有明确排序查询结果,则返回的数据没有特定的顺序。返回数据的顺序可能是数据被添加到表中的顺序,也可能不是。只要返回的结果相同就是正常的。

对于单条 SQL 语句来说,在结尾处加分号或者不加分号都是可以的。但是多条 SQL 语句必须以分号分隔。虽然单条语句不强制加分号,但是加上也没有什么不好,所以我们建议单条 SQL 语句也加上分号。还有点要注意,刚才说的标点符号要是英文的标点符号,如果使用中文的标点符号会报错。还有就是,在处理 SQL 语句时,所有的空格都会被忽略,我们可以把一条 SQL 语句写在一行上,也可以分开写在多行上。但是比较好的习惯是,将 SQL 语句写在多行上,这样使得代码更容易阅读和调试。

刚才我们从数据库表中查询的是单个列,我们还可以从数据库表中查询多个列。

例如,我们从数据库表 products 中查询 prod_id 和 prod_name,各个列之间以逗号分隔,最后一列的后面不加逗号。

SELECT prod_id, vend_id FROM products;

运行结果如下:

网络异常,图片无法展示
|

我们还可以从数据库表中查询所有列。例如:

SELECT prod_id, vend_id, prod_name, prod_price, prod_desc FROM products;

运行结果如下:

网络异常,图片无法展示
|

除了列出所有的列之外,我们还可以使用*号通配符来做到这点。

SELECT * FROM products;

运行结果如下:

网络异常,图片无法展示
|

一般而言,除非需要表中的每一列,否则最好不要使用 * 通配符。因为查询不需要的列通常会降低查询和应用程序的性能。阿里java开发手册中也明确指出,在表查询中,一律不要使用 * 作为查询的字段列表,需要查询哪些字段必须明确写明。

前面的查询中,SELECT 语句会返回所有匹配的行,但是,有时候我们不希望每个值每次都出现。例如,我们来查询 products 表中所有产品的供应商ID:

SELECT vend_id FROM products;

运行结果如下:

网络异常,图片无法展示
|

结果有 9 行,但是却只包含 3 个不同的供应商 ID。这时候该怎么办呢?办法就是使用 DISTINCT 关键字。顾名思义,它表示数据库只返回不同的值。

SELECT DISTINCT vend_id FROM products;

运行结果如下:

网络异常,图片无法展示
|

有点要注意的地方是,DISTINCT 关键字作用于所有的列,不仅仅是跟在其后的那一列。而且,DISTINCT 关键字要放在所有要查询的列的最前面。不可以放在中间位置。例如:

SELECT DISTINCT vend_id, prod_price FROM products;

运行结果如下:

网络异常,图片无法展示
|

有时候,我们并不想一次返回所有的结果,而是返回一定数量的记录。我们可以使用 LIMIT 子句来实现这一目的。

SELECT prod_name FROM products LIMIT 5;

运行结果如下:

网络异常,图片无法展示
|

这样便只返回了 5 条记录。

如果我们想返回后面的几条数据怎么办?这时候我们便需要指定从哪开始返回以及返回的行数。

SELECT prod_name FROM products LIMIT 5 OFFSET 5;

运行结果如下:

网络异常,图片无法展示
|

这样我们便返回了后面的几条数据,由于总共只有9条数据,所以只返回了 4 条数据。这里有点要注意的是,第一个被查询的行是第 0 行,而不是第 1 行。

SELECT prod_name FROM products LIMIT 1 OFFSET 0;

运行结果如下:

网络异常,图片无法展示
|

可以看到结果返回的是第 0 行而不是第 1 行。

2. 注释

随着 SQL 语句越来越复杂,我们需要添加一些注释,便于自己以及别人参考。 有三种不同类型的注释:

2.1 和 SQL 语句在同一行
SELECT prod_name -- 这是一条注释
FROM products;

运行结果如下:

网络异常,图片无法展示
|

2.2 自己单独一行
# 这是一条注释
SELECT prod_name 
FROM products;

运行结果如下:

网络异常,图片无法展示
|

2.3 注释分布在多行
/*
这是一条注释
这是一条注释
这是一条注释
*/
SELECT prod_name 
FROM products;

运行结果如下:

网络异常,图片无法展示
|

可以看到无论哪一种注释方式,注释对运行结果均没有影响。

下列哪一个关键字的作用是又拿过来限制返回数据的数量?

A. SELECT

B. WHERE

C. LIMIT

D. DISTINCT

相关文章
|
24天前
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
24天前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
24天前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
4月前
|
SQL 数据挖掘 数据库
第三篇:高级 SQL 查询与多表操作
本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
307 1
|
29天前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
133 18
|
6月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
1月前
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
89 0
|
6月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
2月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
4月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路