国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > 数据库应用 > SQL应用与开发:(七)数据操作 · 查 · (二)高级型

SQL应用与开发:(七)数据操作 · 查 · (二)高级型

来源:程序员人生   发布时间:2015-07-31 08:29:34 阅读次数:3506次

2.高级型

在高级型查询中,是将SELECT的语句的高级利用,和怎样使用它查询数据库中符合条件的数据,例如通过BETWEEN来限制查询的范围和条件,并将取得的结果保存到表或视图。


2.1BETWEEN 限制查询范围

使用关键字BETWEEN可以方便的限制数据的范围。BETWEEN用来指定1个范围,可让用户对上边界值、下边界值及它们中的值进行搜索。

利用BETWEEN关键字来限定查询条件的基本语法格式为:

SELECT <select_list>

FROM <table_reference>

WHERE test_expression [NOT] BETWEEN begin_expression AND end_expression


2.1.1举例来讲,利用BETWEEN关键字来限制日期,从数据库“销售关系系统”的“入库单信息”表中,查询“入库日期”从2004年8月1日至2005年9月1日期间的入库单信息。

SELECT 入库单编号,供应商编号,库存编号,商品编号,入库日期,操作员编号

FROM 入库单信息

WHERE 入库日期 BETWEEN '2004⑻⑴' AND '2005⑼⑴'


2.1.2举例来讲,利用BETWEEN关键字来限制文本,从数据库“销售关系系统”的“入库单信息”表中,查询所在城市为北京市到南京市的供应商信息。

SELECT 供应商编号,供应商名称,供应商所在城市,联系人姓名,联系电话,备注

FROM 供应商信息

WHERE 供应商所在城市 BETWEEN '北京市' AND '南京市'


2.2使用WHERE的复合条件

使用WHERE子句的目的是将表中数据挑选出符合条件的行,WHERE可以限定查询的范围,提高效力。WHERE子句中的条件表达式包括算术表达式、逻辑表达式等。这里将会综合前面介绍的内容,在WHERE子句中使用复合条件来实现1些复杂的查询操作。


2.2.1在WHERE子句中使用复合条件

可使用3种布尔连接符构成复合条件,这3种布尔连接符是:AND、OR和NOT。AND和OR将两个条件合并构成1个复合条件,重复利用这些组合就能够将许多条件组合到1个单独的复合条件中;NOT利用于单个条件,含义为取反。

AND 只有在所有条件都成立时才返回结果。即A和B都为TRUE时,语句“A AND B”才为TRUE。

OR 只要其中1个调价成立便可返回结果。即A或B为TRUE时,语句“A OR B”为TRUE。

NOT 表示否认1个表达式,表达式成立时不反悔结果。即在A为FALSE时,语句“NOT A ”为TRUE。

举例来讲,从“珠宝营销系统”数据库的“顾客信息”表中,非北京且消费金额在2000以上的顾客,或北京的顾客。

SELECT 消费者姓名,消费者消费金额,消费者所在城市,联系电话,邮编

FROM 顾客信息

WHERE ((消费者消费金额 > 2000 AND NOT 消费者所在城市='北京市') OR 消费者所在城市='北京市')


2.2.2使用多个关键字

NOT可以用两种不同的方式与多个条件1起使用,包括IN、BETWEEN、LIKE和IS NULL时,此时含义完全相同。

举例来讲,在本例中从“经销商”数据库中显示符合以下所有条件的商品信息,包括商品编号、供应商朝号、商品名称、商品种别、单价和商品单位。

条件为:不是7、5、4、2其中任何1个的供应商朝号;以10开始的商品编号;单价不在20~100之间;不属于12、13、14其中任何1个种别的商品;商品单位不能为NULL。

SELECT 商品编号,供应商朝号,商品名称,商品种别,单价,商品单位

FROM 商品信息

WHERE 供应商朝号NOT IN ('7','5','4','2')

           AND 商品编号 LIKE '10%'

           AND 单价 NOT BETWEEN 20 AND 100

           AND 商品种别 NOT IN(12,13,14)

           AND 商品单位 IS NOT NULL


2.3使用常数值、DISTINCT和ALL

在表的数据级别上,常数值是每行中都有相同值得1个列。我们通常有两种方法来替换常数值。第1种方法是将1个文字值放入SELECT子句作为编码值,这类方法适用于只有少数SELECT语句时。不过当有大量SELECT语句时,这类方法就不够灵活,也不容易更改代码来满足变化的需求。

第2种方法是将常数值放入1个单独的表中,我们将这个表称为“常数表”。这类表被定义为只有1行的表。在这类表中,每一个不同的常数值都有1个单独的列。这些列的名字通常都是唯1的,并且与任何其他表中的表名不同。在创建后,可使用它与任意其他表编写SELECT语句。这类方法只要在有较多使用相同常数集的SELECT语句时使用。

数据库“经销商”中,查询出2004年所收进的货物,并列出货物的名称,价格,进货的数量及进货的日期。

SELECT TOP10 t1.商品名称,t1.单价,t2.进货数量,t2.进货时间

FROM 商品信息 AS t1,进货信息 AS t2

WHERE t2.进货时间 BETWEEN '2004⑴⑴' AND '2004⑴2⑶1'

AND t2.商品编号=t1.商品编号

ORDER BY t2.进货时间

当指定1个日期时,不能只给出年份。为了制定1个年份,必须将这个日期设成这1年的1月1日到12月31日之间的日期。

在SELECT子句中DISTINCT和ALL关键字可让我们明确该如何在结果中处理重复行。ALL返回所有限定行,是默许用法。如果不明确指定ALL或DISTINCT,那就会默许设置为ALL。DISTINCT只返回唯1的行。

在前面的总结中,已说明了二者的相干用法,在这里,不在累述。

下面我们了解1下要求:DISTINCT或ALL在SELECT子句中只能使用1次,在SELECT列表中被看做为首词并且后面不能添加逗号。

举例来讲,在“珠宝营销系统”数据库的查询消费者所在城市和邮编,要求不返回重复行。

SELECT DISTINCT 消费者所在城市,邮编  FROM 顾客信息


2.4保存SELECT结果

查询的结果是1个表,可以像处理器1样进行处理。当查询语句运行后,查询结果知识显示在屏幕上,如果关闭计算机,则这些查询结果也会消失。为了便于查看查询结果,我们1般将查询结果保存到1个新表或1个视图中。


2.4.1保存结果到表

将查询结果保存到1个新表,也就是说,从SELECT语句的查询结果中创建1个新表。1旦将查询结果保存到1个新表,用户即可以通过天剑新行、更新行或删除行来修改表中的数据。

在SQL Server中,新行添加在SELECT语句后,然后在FROM关键字之前增加1个INTO子句,并在INTO关键字后给出这个新表的名称。除此以外,不需要对查询语句的其他子句进行修改。

举例来讲,从数据库“经销商”的“销售信息”表中,查询2005年8月份的销售信息,并将查询结果保存到1个名为“销售详情 05_08”的新表中,要求该表中包括列“商品编号”、“金额”、“销售人员编号”和“售出时间”。

SELECT 商品边号,金额,销售人员编号,售出时间

INTO 销售详情 05_08

FROM 销售信息

WHERE 售出时间 BETWEEN '2005⑻⑴' AND '2005⑻⑶1'

上述语句是在数据库“经销商”中,创建1个新表名为“销售详情 05_08”。通过下述SELECT语句可以查看新标的数据:

SELECT *  FROM 销售详情 05_08


2.4.2保存结果到视图

还可以将查询结果保存到1个视图中,而不死保存到1个表中。视图与表非常相似。

在创建1个视图后,可以像使用基表1样使用它,可以任意的SELECT语句的FROM子句中使用视图。

举例来讲,从数据库“经销商”的“商品信息”表中,查询由代号为7的供应商提供的商品信息,并将查询结果保存到1个名为“供应商 07_VIEW”的视图中,要求改视图中的列为“商品编号”、“商品名称”和“单价”。

CREATE VIEW 供应商 07_VIEW

AS 

SELECT 商品编号,商品名称,单价

FROM 商品信息

WHERE 供应商朝号=7

上述语句运行后,就会在数据库“经销商”中,添加1个名为“供应商 07_VIEW”的新视图。利用SELECT语句查询该视图中的数据。

SELECT *

FROM 供应商07_VIEW

ORDER BY 单价 


关于数据库的查操作,未完待续......

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生