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;

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

相关推荐
憨憨小江6 分钟前
ES6 混合 ES5学习记录
前端·学习·es6
xmh-sxh-13147 分钟前
关系型与非关系型数据库的主要区别
数据库
开心工作室_kaic9 分钟前
springboot437校园悬赏任务平台(论文+源码)_kaic
运维·开发语言·数据库·php·apache
代码欢乐豆14 分钟前
NoSQL大数据存储技术测试(7)键值对数据库Redis和其他NoSQL数据库
大数据·数据库·nosql
Crossoads28 分钟前
【汇编语言】内中断(二) —— 安装自己的中断处理程序:你也能控制0号中断
android·开发语言·数据库·人工智能·深度学习·机器学习·汇编语言
中东大鹅32 分钟前
【Java】链接数据库简介
java·开发语言·数据库
蓝本生33 分钟前
STM32标准库学习之环境搭建
stm32·嵌入式硬件·学习
百香果果ccc35 分钟前
SQL中数据库相关的操作
数据库·sql·oracle
垂杨有暮鸦⊙_⊙1 小时前
高等动力学中的正则变换
笔记·学习·高等动力学
尚雷55801 小时前
[ClickHouse 运维系列] 数据 TTL 学习笔记整理
笔记·学习·clickhouse