当前位置: 首页 > ai >正文

SQL Server从入门到项目实践(超值版)读书笔记 17

第9章 SQL数据的查询操作

🎉学习指引

数据库管理系统的一个最重要的功能就是提供数据查询。

数据查询不是简单返回数据库中存储的数据,而是根据业务需求对数据进行筛选,以及让数据以怎样的方式呈现。

本章将详细介绍SQL数据的查询操作。主要内容包括简单查询、条件查询、聚合函数查询、嵌套查询等。

9.1 数据的简单查询

一般来讲,简单查询是指对一张表的查询操作,使用关键字SELECT。

9.1.1 查看表中的全部数据

select查询记录最简单的形式是从一张表中检索所有记录,使用星号“*”通配符实现。

select * from table_name

为了演示该查询,我们在mydatabase数据库中创建一张员工表employee,信息如下:

员工表employee结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

code

员工编号

int

name

员工姓名

varchar(50)

sex

员工性别

char(2)

deptcode

部门编码

int

job

职位

varchar(50)

salary

薪水

int

hiredate

入职日期

date

use mydatabase
create table employee
(code int primary key, --标明主键,说明该字段既非空,也唯一name varchar(20) not null,sex char(2),deptcode int not null,job varchar(50) not null,salary int not null 
)

创建好数据表后,在表名上鼠标右键,单击该表的“编辑前200行”快捷菜单命令,进入编辑模式,向表中录入一些记录值。

我们也可以通过SQL语句来添加记录,语句如下

insert into table_name
values(col_name1,col_name2,col_name3,...)

那么,上面的数据我们就可以这样写

insert into employee
values(101,'李宇恒','男',2,'文员',3000),(102,'王丽芬','女',3,'销售员',2500),.....(112,'尚琳琳','女',3,'文员',3000)

员工编号103至111的数据信息我在此就省略不写了。

输入完成后全选执行,即可添加完成。

当然,向数据表内添加数据的语句规则远不止这样,以后我们再后面章节详述。

数据有了,下面开始我们的简单查询。

例:从employee表中查询所有字段数据记录,

select * from employee --前提是已在mydatabase数据库下,如果不是,需要提前切换

从结果中可以知晓,使用星号“*”通配符时,将返回所有数据记录,数据记录按照定义表的顺序显示。

9.1.2 查看表中想要的数据

查询表中所有数据记录非常简单,但是如果每次都要查询表中的所有记录,就会影响查询效率,尤其是在表中数据比较多的情况下,这时就可以使用select语句来获取指定字段的数据信息,语法如下:

select column1,column2,...columnN from table_name

例:从employee表中,查找name、job、salary三列,在“查询编辑器”窗口中输入:

select name,job,salary from employee

💡注意:SQL Server中的SQL语句是不区分大小写的,因此,select和SELECT的作用一致,但是,许多开发人员习惯将关键字使用大写,而数据列和表名使用小写。
我们也应该养成一个良好的编程习惯,这样写出来的代码更容易阅读和维护。
9.1.3 使用TOP查询表中的前几行

使用TOP关键字可以限制显示的结果数量,帮助用户每次返回查询结果的前N行,其语法格式如下:

SELECT TOP [N|PERCENT] FROM table_name

各参数说明:

  • N:从查询结果集中返回的行数;
  • PERCENT:从结果集中返回的百分比数目的行;

例:查询数据表employee中所有的记录,但只显示前5条

SELECT TOP 5 * FROM employee

例:查询数据表employee中前50%的记录

SELECT TOP 50 PERCENT * FROM employee

9.1.4 给查询结果中的列换个名称

在查询结果中,看到的列标题就是数据表中的列名,如果不是表的设计者,别人很难理解其含义,那么如何才能让别人很容易就能读懂呢?在SQL Server中,可以使用给列定义列名的方法来完成。

具体的方法有以下三种:

9.1.4.1 使用AS关键字给列设置别名

在列名表达式后面,跟一个AS关键字后,再接一个字符串为表达式指定别名,AS关键字也可以省略:

SELECT col_name1 AS '别名1',col_name2 AS '别名2',...FROM table_name

各参数说明:

  • col_name1:为表中的字段名称;
  • '别名':为字段设置的别名,单引号可以忽略;

例:查询employee表,为name取别名为“员工姓名”,salary取别名为“基本工资”,语法如下:

SELECT name AS '员工姓名',salary AS 基本工资 FROM employee

9.1.4.2 使用等号“=”给列设置别名

在列名的前面使用等号“=”为列表达式指定别名,别名的单引号也可以忽略,语法如下:

SELECT '别名1'=col_name1,'别名2'=col_name2,...FROM table_name

例:查询employee表,为name取别名为“员工姓名”,salary取别名为“基本工资”,语法如下:

SELECT '员工姓名'=name,基本工资=salary FROM employee

9.1.4.3 使用空格给列设置别名

语法如下:

SELECT col_name1 '别名1',col_name2 别名2,...FROM table_name

例:查询employee表,为name取别名为“员工姓名”,salary取别名为“基本工资”,语法如下:

SELECT name '员工姓名',salary 基本工资 FROM employee

同样,别名的单引号也可以忽略。

9.1.5 在查询时去除重复的结果

在查询时,有时希望去除一些重复的数据,方便查看。

这时,只需要在SELECT语句后面加上DISTINCT关键字。

例:查询employee表,显示员工的工作职位,并除去重复的信息,语句如下:

SELECT DISTINCT job 职务 FROM employee

结果只返回了7条值,而且没有重复记录。

9.1.6 查询的列为表达式

在SELECT查询结果中,可以根据需要,使用算术运算符或逻辑运算符,对查询的结果进行处理。

例:查询employee表中所有员工的姓名与基本工资,并对基本工资加上500元后,再输出:

SELECT name 员工姓名,salary 原工资,salary+500 现工资 FROM employee

9.1.7 查询结果也能进行排序

对查询结果进行排序要使用ORDER BY语句,并且可以指定排序方式,具体语法如下:

SELECT col_name1,col_name2,...FROM table_name ORDER BY col_name1 DESC|ASC,col_name2 DESC|ASC...

各参数说明:

  • DESC:降序排列
  • ASC:升序排序

例:查询employee表中所有员工的基本工资,并按照由高到低的顺序进行排序:

SELECT * FROM employee ORDER BY salary DESC

💡提示:
ORDER BY子句也可以对查询结果惊醒升序排列,升序排列是默认的排序方式,在使用ORDER BY 子句升序排列时,可以使用ASC关键字,也可忽略掉该关键字,如下如所示:

http://www.xdnf.cn/news/14296.html

相关文章:

  • 目标分割数据集大全「包含分割数据标注+训练脚本」 (持续原地更新)
  • Level1.8for循环
  • 【Create my OS】5 内核线程
  • 分割数据集 - 航拍水域分割数据集下载
  • SylixOS armv7 任务切换
  • 【C判断a*a+b*b=c*c且a>=b>0且输出最小的】2022-6-26
  • 包含30个APP客户端UI界面的psd适用于旅游酒店项目
  • 基于ssm智慧乡村旅游服务平台微信小程序源码数据库文档
  • 青少年编程与数学 01-011 系统软件简介 21 杀毒软件及安全软件
  • C++ 网络编程(12)利用单例逻辑实现逻辑类
  • 初探 Pytest:编写并运行你的第一个测试用例
  • .net6接口多个实现类使用特性标记并解析
  • React-router实现原理剖析
  • 基于SVD的推荐系统:详尽的原理与实践解析
  • 网络安全相关概念与技术详解
  • 高速 PCB 设计的材料选择,第 2 部分
  • ubuntu 22.04 安装部署kibana 7.10.0详细教程
  • Linux——libevent库
  • Python实例题:Python计算曲线曲面积分
  • 网页后端开发(基础2--maven单元测试)
  • useMemo vs useCallback:React 性能优化的两大利器
  • 如何通过 noindex 阻止网页被搜索引擎编入索引?
  • 哈希函数结构:从MD到海绵的进化之路
  • AudioLab安卓版:音频处理,一应俱全
  • Redis中的zset的底层实现
  • SeaTunnel与Hive集成
  • Chapter12-API testing
  • 极客时间《后端存储实战课》阅读笔记
  • 快速使用 Flutter 中的 SnackBar 和 Toast
  • Vue-Leaflet地图组件开发(四)高级功能与深度优化探索