SQL server学习05-查询数据表中的数据(上)

目录

一,基本格式

1,简单的SQL查询语句

2,关键字TOP

3,关键字DISTINCT

二,模糊查询

1,通配符

三,对结果集排序

1,不含关键字DISTINCT

2,含关键字DISTINCT

3,多列排序


通过之前的学习,已经能够创库表及进行相应的修改和删除,但是在日常生活中,用到最多的是把需要的数据从表中找出来。这就是这篇文章我要学习的内容。

查询:是在现有的数据表中,找到符合条件的记录行,将其提取出来,然后组成一个类似于表的结构体,返回给用户。

记录集:查询的结果就是记录集(结果集)。记录集是一张虚拟表,还可以使用SQL语句在记录集的基础上继续查询。

一,基本格式

语法如下:

sql 复制代码
SELECT 列名或表达式
INTO 新表名   --创建新表并将结果集插入新表中
FROM 表名     --指定查询语句中所使用的表或视图
WHERE 查询条件   --设定检索条件。定义了源表中的行要满足SELECT语句的要求所必须达到的条件。只有符合条件的行才向结果集提供数据。即,不采用不符合条件的行数据。
GROUP BY 分组表达式  --分组子句
HAVING 分组条件   --和GROUP BY 一起使用,表示过滤组。
ORDER BY 列名或表达式 ASC升序/DESC降序  --为查询结果排序。

1,简单的SQL查询语句

最简单的查询语句由SELECT和FROM子句构成,如下👇查询数据表中所有列的数据(*)。

sql 复制代码
SELECT * FROM students
SELECT * FROM dept
SELECT * FROM classes
SELECT * FROM courses
SELECT * FROM score

当然也可以只查找指定的列信息,将*号去掉,改成指定的列名即可。

这里以学生表为例,现在查询所有学生的学号sno,姓名sne,出生日期sbd:

sql 复制代码
SELECT sno AS 学号,sne AS 姓名,sbd AS 出生日期 FROM students

其中,AS关键字用于给列起别名(表中的列名依旧没变),可知道询出来的信息具体是什么。

也省略AS关键字,使用空格,如下👇

sql 复制代码
SELECT sno   学号,sne   姓名,sbd  出生日期 FROM students

或者是赋值的形式(使用'='号),语法如下:

sql 复制代码
SELECT 别名=列名,...FROM 数据表名
sql 复制代码
SELECT 学号=sno,姓名=sne,出生日期=sbd FROM students

2,关键字TOP

如果只想看数据表的前几条记录,可以使用TOP关键字,语法如下:

sql 复制代码
SELECT TOP n 列名 AS 别名,...FROM 表名  --整数n:返回记录集的前n行或n%行

例如,我现在只想要看学号1~3,即前三个学生的学号sno,姓名sne,出生日期sbd

sql 复制代码
SELECT TOP 3 sno AS 学号,sne AS 姓名,sbd AS 出生日期 FROM students

3,关键字DISTINCT

DISTINCT / dɪˈstɪŋkt /:不同的,有区别的;清楚的,明显的;确切的。

顾名思义,DISTINCT的作用就是消除记录集中的重复行,语法如下:

sql 复制代码
SELECT DISTINCT 列名 FROM 表名 

依旧是以学生表students为例,要求查找学生表中学生的班级编号有哪些(不同的班级编号),如果直不加DISTINCT关键字而直接使用列名进行查找,就会直接返回所有学生的班级编号(包括相同的班级编号),如下👇

如果在SELECT后面加上关键字DISTINCT之后,就会消除记录集中的重复行,如下👇

sql 复制代码
SELECT DISTINCT cno AS 班级编号_D FROM students 

二,模糊查询

之前的查询都是精确查询,即对查询字段的值有着准确完整的描述。有些时候记忆的东西多起来,就会容易忘掉细枝末节的部分,例如,学生表students中有李li姓同学,但是忘记ta具体叫什么,这个时候可以使用模糊查询来进行查找。在使用模糊查询之前,需要先认识SQL语言提供的通配符👇

1,通配符

带通配符的字符串就叫模式。

sql 复制代码
SELECT 列名 AS 别名,...FROM 表名 WHERE 列名 LIKE '使用通配符查找关键字符'

可以看到模糊查询是基于LIKE关键字的WHERE子句。

|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 通配符 | 含义 |
| % | 零个或任意多个字符。 例如,给出模式"li%": 查询表中列以li(li为关键字符)开头的数据,后面带上零个或任意多个字符。如下👇找李li姓同学 sql SELECT sno AS 学号,sne AS 姓名,sbd AS 出生日期 FROM students WHERE sne LIKE 'li%' 也可以是模式"%wu ",包含字符"wu"的列数据。 sql SELECT sno AS 学号,sne AS 姓名,sbd AS 出生日期 FROM students WHERE sne LIKE '%wu' |
| _ | 任意一个字符。 如果写一个下划线,则有一个字符,写两个,就有两个字符。例如: 对于模式"李_白",可以匹配的数据有: 李太白,李小白,李大白...... 而不能匹配:李太太白,李小小白,李大大白...... 如果要匹配:李xx白,则修改模式为:"李__白" --中间是两个下划线。 |
| [] | 方括号中列出的任意一个字符。 对于模式"X123[0,3,6]",可以匹配的数据有三种: X123
0
,X1233 ,X126 而不能匹配:X12311,..... |
| [^] | 任意一个没有出现在方括号中的字符。和[]相反。 |
[SQL语言提供的通配符]

三,对结果集排序

使用ORDER BY 子句可将查询结果按照指定的一个或多个列,进行升序或降序排序。语法如下:

sql 复制代码
SELECT 查询列表 FROM 表名
ORDER BY 列名 | 表达式[ASC | DESC]

在默认情况下是升序排列,即如果想要对结果集进行升序排序,则ASC关键字可省略。而在降序排列的情况 下,DESC关键必须写。

被排序列可以是选择列表中的列,也可以不出现在选择列表中。

1,不含关键字DISTINCT

如下,查找对成绩表中的成绩进行降序排序,并返回对应的学生编号和课程编号:

可以看到,SELECT 语句选择了sno 和 cno两列,但排序是根据 成绩get列进行的,get可能并不出现在 SELECT 的选择列表中。

2,含关键字DISTINCT

需要注意的是:如果使用了DISTINCT关键字,ORDER BY 子句中的列必须出现在选择列表中,这是因为,DISTINCT 操作是基于选择列表中的列来判断是否有重复记录的。如果在 ORDER BY 中使用了不在 SELECT 列表中的列,SQL 引擎就无法确定如何对这些列进行去重或排序,因此会报错。

错误语句如下:

正确语句如下:

3,多列排序

可以根据多列进行排序,排列的优先级按照在ORDER BY后面出现的先后。

sql 复制代码
SELECT * FROM score 
ORDER BY cno ASC, get DESC;

有问题请在评论区留言或者是私信我,回复时间不超过一天。

相关推荐
weixin_458580121 天前
如何在 Go 中直接将 AST 编译为可执行二进制文件?
jvm·数据库·python
Highcharts.js1 天前
Highcharts Grid 中文站正式上线:表格数据处理的全新选择
前端·javascript·数据库·表格数据·highcharts·可视化图表·企业级图表
Elastic 中国社区官方博客1 天前
Elasticsearch:使用 Agent Builder 的 A2A 实现 - 开发者的圣诞颂歌
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
2301_816660211 天前
PHP怎么处理Eloquent Attribute Inference属性推断_Laravel从数据自动推导类型【操作】
jvm·数据库·python
chools1 天前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
自信150413057591 天前
重生之从0开始学习c++之模板初级
c++·学习
nashane1 天前
HarmonyOS 6学习:解决异步场景下Toast提示框无法弹出的UI上下文丢失问题
学习·ui·harmonyos·harmony app
qq_372154231 天前
Go 中自定义类型与基础类型的显式转换规则详解
jvm·数据库·python
_下雨天.1 天前
NoSQL之Redis配置与优化
数据库·redis·nosql
LiAo_1996_Y1 天前
CSS如何实现文字渐变效果_通过background-clip实现艺术字
jvm·数据库·python