龙空技术网

数据分析丨「SQL学习指南」一文详解如何检索数据

戎易大数据 418

前言:

现在我们对“sql的查找算法”都比较重视,我们都需要学习一些“sql的查找算法”的相关内容。那么小编也在网上网罗了一些有关“sql的查找算法””的相关内容,希望各位老铁们能喜欢,朋友们一起来了解一下吧!

本篇围绕着SELECT语法重点为大家讲解检索数据、排序检索数据相关内容。

01 检索数据

最经常使用的SQL语句大概就是SELECT语句了,它的用途是从一个或多个表中检索信息。

使用SELECT检索数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。

数据库术语

# SELECT 列名称 FROM 表名称

# SELECT * FROM 表名称

示例:SELECT column_name,column_name FROM table_nameSELECT * FROM table_name

检索单个列

示例:SELECT prod_name FROM Products

分析:利用SELECT语句从Products表中检索一个名为prod_name的列,所需的列名写在SELECT关键字之后,FROM关键字指出从哪个表中检索数据。

检索多个列

要想从一个表中检索多个列,仍然使用相同的SELECT语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

示例:SELECT prod_id, prod_name, prod_price FROM Products

分析:与前一个例子一样,这条语句使用SELECT语句从表Products中选择数据。在这个例子中,指定了3个列名,列名之间用逗号分隔。

检索所有列

检索所有的列而不必逐个列出它们,在实际列名的位置使用星号(*)通配符。

示例:SELECT * FROM Products

分析:如果给定一个通配符(*),则返回表中所有列。

检索不同的值

SELECT语句返回所有匹配的行,如果你不希望每个值每次都出现,该怎么办?

示例:SELECT vend_id FROM Products

分析:检索Products表中所有产品供应商的ID。

Products表中有9种产品,如何检索出不同的值?

示例:SELECT DISTINCT vend_id FROM Products

分析:SELECT DISTINCT vend_id告诉DBMS只返回不同(具有唯一性)的vend_id行,如果使用DISTINCT关键字,它必须直接放在列名的前面。

限制结果

SELECT语句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定数量的行,该怎么办呢?

在SQL Server中使用SELECT时,可以用TOP关键字来限制最多返回多少行。

示例:SELECT TOP 5 prod_name FROM Products

分析:上面代码使用SELECT TOP 5语句,只检索前5行数据。

如果你使用的是DB2,就得使用下面这样的DB2特有的SQL语句。

示例:SELECT prod_name FROM Products FETCH FIRST 5 ROWS ONLY

分析:FETCH FIRST 5 ROWS ONLY就会按字面的意思去做的(只取前5行)。

如果你使用Oracle,需要基于ROWNUM(行计数器)来计算行。

示例:SELECT prod_name FROM Products WHERE ROWNUM <=5

如果你使用MySQL、MariaDB、PostgreSQL或者SQLite,需要使用LIMIT子句。

示例:SELECT prod_name FROM Products LIMIT 5

分析:LIMIT 5指示MySQL等DBMS返回不超过5行的数据。

02 排序检索数据

排序数据

SQL语句返回某个数据库表的单个列,其输出内容并没有特定的顺序。检索出的数据并不是随机显示的,一般将以它在表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。

如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间方式的影响。

为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。

示例:SELECT prod_name FROM Products ORDER BY prod_name

分析:除了指示DBMS软件对prod_name列以字母顺序排序数据的ORDER BY子句外,这条语句与前面的语句相同。

按多个列排序

要按多个列排序,只须指定这些列名,列名之间用逗号分开即可。

示例:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod name

分析:代码检索3个列,并按其中两个列对结果进行排序,首先按价格,然后按名称排序。按多个列排序时,排序的顺序完全按规定进行。

按列位置排序

除了能用列名指出排序顺序外,ORDER BY还支持按相对列位置进行排序。

示例:SELECT prod_id, prod_price, prod_nameFROM Products ORDER BY 2, 3

分析:ORDER BY 2表示按SELECT清单中的第二个列prod_price进行排序。ORDER BY 2, 3表示先按prod_price,再按prod_name进行排序。

指定排序方向

数据排序不限于升序排序(从A到Z),这只是默认的排序顺序。还可以使用ORDER BY子句进行降序(从Z到A)排序。为了进行降序排序,必须指定DESC关键字。

示例:SELECT prod_id, prod_price, prod_nameFROM Products ORDER BY prod_price DESC

分析:DESC关键字只应用到直接位于其前面的列名。如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。

按指定字符串顺序排序

有时需要按照指定字符串顺序排序,根据检索条件把检索结果排序。SQLServer的CHARINDEX语法可以实现对字段按照指定的顺序排序。

示例:SELECT id,status FROM Test WHERE type='lu'order by charindex(status, 'YWNF'), id desc

分析:查询type='lu'的数据,⾸先按照状态Y,W,N,F 排序,然后根据id 降序排列。

以上就是今天分享的全部内容,下期围绕SQL的语法重点为大家介绍过滤数据、高级过滤数据以及用通配符进行过滤。我们下期见!

整理不易,点赞、转发帮忙点一下~

标签: #sql的查找算法