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关键字,也可忽略掉该关键字,如下如所示: