SQL Server中select语句的使用技巧
2017-12-20韩继英
韩继英
(山西职业技术学院计算机工程系,山西 太原 030006)
SQL Server中select语句的使用技巧
韩继英
(山西职业技术学院计算机工程系,山西 太原 030006)
本文主要以商品信息管理数据库为例,详细介绍了关系数据库管理系统中SQL查询语句—select的一些基本用法和使用技巧,主要包括了单表的基本查询、关键字辅助查询、统计查询以及多表的连接查询和嵌套查询。
select语句;查询;商品信息管理数据库
SQL是Structured Query Language 的缩写,是一种结构化查询语言,因此,查询功能是SQL语言的重要组成部分,此项功能非常强大,只要是数据库中存储的数据,都可以通过SQL查询语句将其查询出来。
SQL中的查询功能都是通过select语句实现的,它可以与其它语句相互配合来完成相应的查询功能。可见,select语句应用之灵活,功能之强大。在数据库中,select查询语句不仅能够完成对单表的基本查询、条件查询以及统计查询,还可以实现多表之间的连接查询与子查询等等。下面就结合商品信息管理数据库来谈谈有关select语句的用法。
1 商品信息管理数据库[1]简介
在商品信息管理数据库中包含了商品信息表、客户信息表、销售信息表、进货信息表、商品类型表及库存信息表。每张数据表中所包含的字段信息如下:
表1 商品信息表
表2 客户信息表
表3 销售信息表
表4 进货信息表
表5 商品类型表
表6 库存信息表
2 select语句的使用
2.1 基本查询
基本查询是SQL中最简单的查询,语法格式:
select *|字段列表 from 表名称
可以查询表中一个字段或多个字段信息,当需要查询数据表中所有字段信息时select后跟‘*’。当对单表进行查询时,from后跟一个数据表名,当需要对多表进行查询时,from后跟多个数据表名,表名之间用逗号分隔。
例1.在库存信息表中查询所有库存商品的库存编号、商品编号及库存数量。
select * from 库存信息表
若只查询商品编号和库存数量,则查询语句为:
select 商品编号,库存数量 from 库存信息表
当用户需要对数据表中记录进行筛选时,可以使用where语句加条件表达式来查询。
例2.在销售信息表中查询客户编号为‘20130001’的销售信息。
select * from 销售信息表
where 客户编号=’20130001’
2.2 关键字辅助查询
2.2.1 distinct
为了使用户浏览数据方便,有时需要保证查询结果中没有重复行出现,这时,就可以通过distinct关键字完成此项功能。
例3.在商品信息表中,查询商品的产地有哪些?
如果直接用select语句查询:
select 产地 from 商品信息表
则查询结果中将会出现所有记录的产地,有很多重复值。如果在select语句中添加distinct关键字:
select distinct 产地 from 商品信息表
则在查询结果中就会去掉重复的数据,每个产地只显示了一次,查询结果非常清晰。
2.2.2 between…and…
当需要查询某个取值范围内的记录信息时,可以在where语句中使用between…and…关键字。
例4.在进货信息表中查询进货数量在150到200之间的进货信息。
select * from 进货信息表
where 进货数量 between 150 and 200
若表示不在某一范围之内时,则只需要在between前面加not就可以了。
2.2.3 like
查询过程中,我们经常会遇到需要在一定范围内模糊查询的情况,解决这种问题可以在where后面加like关键字构成的表达式作为筛选条件。
例5.在客户信息表中查询姓“李”的客户信息。
select * from 客户信息表
where 客户姓名 like ‘李%’
若需要表示否定时,在like前面加not即可。
2.3 统计查询
2.3.1 order by
在查询数据的过程中,有时用户想要的查询效果并不是原始数据表中的记录顺序,此时可以使用order by子句对一个或多个字段进行排序,满足用户的需求。
例6.在库存信息表中查询库存数量最多的前3条记录。
select top 3 * from 库存信息表
order by 库存数量desc
其中desc是descending的缩写,表示降序;也可以用asc即ascending的缩写,表示升序。
2.3.2 group by[2]
Excel中有分类汇总功能,而在SQL中也可以group by子句对查询结果实现分类汇总功能。
例7.在进货信息表中,对记录按进货日期进行分类,统计进货数量和进货金额。
select 进货日期,sum(进货数量) ‘总进货数量’, sum(进货金额) ‘总进货金额’ from 进货信息表
group by 进货日期
可以在group by 后面添加having子句来限定分组查询的条件。
2.3.3 compute…by
compute…by子句放在order by子句的后面,表示先分组排序,再小计。Compute后面可以跟多个聚合函数,by之后的分组字段必须和order by之后的排序字段保持一致。
例8.在销售信息表中,按客户编号分类统计销售数量和销售金额。
select * from 销售信息表
order by 客户编号
compute sum(销售数量), sum(销售金额) by 客户编号
2.4 高级查询
以上介绍的都是查询同一张数据表中的数据,但用户在实际操作过程中,往往需要从数据库中的多个数据表中查询信息,因此,就必须用到更为高级的查询技术。下面主要介绍高级查询中的嵌套查询[3]和多表连接查询。
2.4.1 嵌套查询
所谓嵌套查询就是指在一个查询语句中包含了多个查询语句,这样就通过一个个简单的查询语句构建了相当复杂的查询过程。
例9.在商品信息管理数据库中查询出2012年12月11日购买商品的客户信息。
select * from 客户信息表
where 客户编号 in(select 客户编号 from 销售信息表
where 销售日期=’2012-12-11’)
上题中要先根据销售日期在销售信息表中找到相应的客户编号,再在客户信息表中根据客户编号找到相应的客户信息。因此,嵌套查询要先查询最内层括号中的子查询,然后逐层向外查询,直到查询出最终结果。
2.4.2 多表连接查询
SQL Server 提供了使用连接从多个数据表查询满足条件的指定字段数据信息的方法。连接类型主要有交叉连接、内连接和外连接。
1) 交叉连接查询
所谓交叉连接查询就是将第一个表中的每一行与第二个表中的每一行进行连接,最终查询结果的行数是两个数据表的行数之积,列数是两个数据表列数之和。通常使用cross join 子句完成此项功能。
例10.对销售信息表和库存信息表进行交叉连接查询。
select * from 销售信息表 cross join 库存信息表
销售信息表10行、7列,库存信息表20行、3列,交叉连接结果集行数为200行、列数为10列。可见查询结果复杂,而且存在很多无意义的数据。因此,交叉连接很少使用,为了消除查询结果中的数据冗余,一般会使用条件连接。
2) 条件连接
条件连接即通过where子句完成表的连接。
例11.在商品信息管理数据库中,查询出库存商品的详细信息,要求显示商品编号、商品名称、库存数量、商品类型名。
select 商品编号,商品名称,库存数量,商品类型名
from 库存信息表,商品信息表,商品类型表
where 库存信息表.商品编号=商品信息表.商品编号
and 商品信息表.商品类型号=商品类型表.商品类型号
在条件查询中,在select子句对字段进行了筛选,where子句对记录进行了筛选,因此,在最终的查询结果中,不存在无意义的数据。
3) 内连接查询
条件连接查询还可以用内连接查询的方式来表示。
上例可以表示为:
select 商品编号,商品名称,库存数量,商品类型名
from 库存信息表
join商品信息表on商品信息表.商品编号= 库存信息表.商品编号
join商品类型表 on 商品类型表.商品类型号=商品信息表.商品类型号
查询结果与条件连接一致。
4) 外连接[4]
使用条件连接和内连接实现的多表连接中,查询结果都是满足条件的多个数据表中的公共记录。因此会出现查询信息不完整的情况。为了解决问题,可以在连接查询中使用以某张数据表为主的外连接查询实现。外连接查询主要有三种:左外连接查询、右外连接查询和全外连接查询。
例12.在商品信息管理数据库中,显示出客户购买商品的全部信息。要求显示客户编号、客户姓名、商品编号、销售日期信息。
select 客户信息表.客户编号,客户姓名,商品编号,销售日期
from 客户信息表 left join 销售信息表
on 客户信息表.客户编号=销售信息表.客户编号
以上为左连接,查询结果以左表客户信息表为主表,用主表中的每条记录与右表销售信息表中的每一个记录连接组合,结果中除了满足条件的记录被显示外,不满足条件的客户信息也会出现在查询结果中,对不满足条件的记录系统会为其补充空值,即null。
左连接用left join来表示,是以左表为主表;而右连接用right join来表示,是以右表为主表;全外连接用 full join来表示,除了显示满足条件的所有记录外,左表、右表中不满足条件的所有记录都会被显示。
3 结束语
本文主要阐述了SQL中常用的查询功能,只要掌握了select语句的使用方法和技巧,掌握了查询精髓,就可以帮助我们方便地完成数据库的操作。
[1] 刘畅,叶宾,毛乃川. SQL Server 2008 数据库项目教程[M].北京:现代教育出版社,2015.
[2] 何玉洁,梁琦.数据库原理与应用[M].第2版.北京:机械工业出版社,2011.
[3] 高云,崔艳春.SQL Server 2008数据库技术实用教程[M].北京:清华大学出版社,2011.
[4] 徐人凤,曾建华. SQL Server 2005 数据库及应用[M].北京:高等教育出版社,2014.
TheUsingSkillofSelectStatementsinSQLServer
Han Jiying
(DepartmentofComputerScienceEngineering,ShanxiPolytechnicCollege,TaiyuanShanxi030006,China)
This paper, mainly takes the database of commodity information management as an example, introduces some basic usage of SQL query select and the use skills in the database management system, including single table basic query, keywords assisted query, statistics query and connection query and nested query for multiple tables, that hopes to bring some help to readers.
the select statement; query; commodity information management database
2017-10-13
韩继英(1982- ),女,山西盂县人,讲师,硕士,主要研究方向:计算机信息管理。
1674- 4578(2017)06- 0062- 04
TP311.13
A