余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

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

xiyangw 2022-11-25 11:57 19 浏览 0 评论

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

01 检索数据

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

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

数据库术语

# SELECT 列名称 FROM 表名称

# SELECT * FROM 表名称

示例:
SELECT column_name,column_name FROM table_name
SELECT * 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_name
FROM 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_name
FROM 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的语法重点为大家介绍过滤数据、高级过滤数据以及用通配符进行过滤。我们下期见!

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

相关推荐

spring利用spring.handlers解析自定义配置(spring validation 自定义)

一、问题我们在spring的xml配置文件里经常定义各种各样的配置(tx、bean、mvc、bean等等)。以及集成第三方框架时,也会看到一些spring之外的配置,例如dubbo的配置、securi...

「Spring源码分析」AOP源码解析(上篇)(spring源码深度解析(第2版))

前言前面写了六篇文章详细地分析了SpringBean加载流程,这部分完了之后就要进入一个比较困难的部分了,就是AOP的实现原理分析。为了探究AOP实现原理,首先定义几个类,一个Dao接口:1&nbs...

Spring 解析注册BeanDefinition这一篇就Over
Spring 解析注册BeanDefinition这一篇就Over

一、简介:学习过Spring框架的人一定都会听过Spring的IoC(控制反转)、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC、...

2023-03-20 14:53 xiyangw

域、模块、空间、闭包,你真的懂了吗?(模块控制域与作用域的关系)

Javascript有一个特性叫做域。尽管对于初学者来说理解域是有难度的,但我会尽力用最简单的方式让你理解域。理解域能让你的代码更优秀,减少错误,及有助于你做出更强大的模式设计。什么是域域是在运行时,...

这一次搞懂Spring自定义标签以及注解解析原理
这一次搞懂Spring自定义标签以及注解解析原理

前言在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如...

2023-03-20 14:53 xiyangw

前端基础进阶(七)-前端工程师最容易出错的问题-this关键字
前端基础进阶(七)-前端工程师最容易出错的问题-this关键字

我们在学习JavaScript的时候,因为对一些概念不是很清楚,但是又会通过一些简洁的方式把它给记下来,那么这样自己记下来的概念和真正的概念产生了很强的偏差.当...

2023-03-20 14:52 xiyangw

深入K8s:守护进程DaemonSet及其源码分析(k8s 进程)
深入K8s:守护进程DaemonSet及其源码分析(k8s 进程)

建议学习:膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了最近也一直在加班,处理项目中的事情,发现问题越多越是感觉自己的能力不足,...

2023-03-20 14:52 xiyangw

Spring 是如何解析 bean 标签的?(spring beans标签)
Spring 是如何解析 bean 标签的?(spring beans标签)

前情回顾上回「SpringIoC容器初始化(2)」说到了Spring如何解析我们定义的<bean>标签,代码跟进了一层又一层,跋山涉水,...

2023-03-20 14:52 xiyangw

快速了解JavaScript文本框操作(javascript文本框代码)
快速了解JavaScript文本框操作(javascript文本框代码)

HTML中使用<input>元素表示单行输入框和<textarea>元素表示多行文本框。HTML中使用的<input&...

2023-03-20 14:51 xiyangw

荐读|30道JavaOOP面试题,可以和面试官扯皮了
荐读|30道JavaOOP面试题,可以和面试官扯皮了

面试是我们每个人都要经历的事情,大部分人且不止一次,今天给大家准备了30道JavaOOP面试题,希望能够帮助到对Java感兴趣的同学,让大家在找工作的时候能够...

2023-03-20 14:51 xiyangw

源码系列——mybatis源码刨析总结,下(mybatis源码分析)
源码系列——mybatis源码刨析总结,下(mybatis源码分析)

接上文简答题一.1.Mybatis动态sql是做什么的?1.动态sql就是根据条件标签动态的拼接sql,包括判空,循环,拼接等2.哪些动态sql?动态sql大...

2023-03-20 14:50 xiyangw

Java面试题(第二弹)(java面试题及答案整理)
Java面试题(第二弹)(java面试题及答案整理)

1.抽象类和接口的区别?接口可以被多重implements,抽象类只能被单一extends接口只有定义,抽象类可以有定义和实现接口的字段定义默认为:public...

2023-03-20 14:50 xiyangw

mybatis3 源码深度解析-动态 sql 实现原理(sql数据库基础知识)
mybatis3 源码深度解析-动态 sql 实现原理(sql数据库基础知识)

大纲动态sql使用示例SqlSource和BoundSql以及实现类LanguageDriver以及实现类SqlNode以及实现类动态sql解...

2023-03-20 14:50 xiyangw

第43节 Text、Comment及CDATASection(第43节 Text、Comment及CDATASection)
第43节 Text、Comment及CDATASection(第43节 Text、Comment及CDATASection)

本内容是《Web前端开发之Javascript视频》的课件,请配合大师哥《Javascript》视频课程学习。文本节点用Text类型表示,包含的是可以按字面解释...

2023-03-20 14:49 xiyangw

Qt读写三种文件(qt读取文件数据并赋值给变量)

第一种INI配置文件.ini文件是InitializationFile的缩写,即初始化文件。除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要...

取消回复欢迎 发表评论: