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;

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

相关推荐
码小跳25 分钟前
软件无法连接MySql数据库
数据库·mysql
板栗焖小鸡38 分钟前
STM32-PWM驱动无源蜂鸣器
stm32·学习
Code季风43 分钟前
Gin 中间件详解与实践
学习·中间件·golang·go·gin
晋阳十二夜6 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL8 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT9 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
sealaugh329 小时前
aws(学习笔记第四十八课) appsync-graphql-dynamodb
笔记·学习·aws
水木兰亭9 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
鱼摆摆拜拜9 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
aha-凯心10 小时前
vben 之 axios 封装
前端·javascript·学习