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

2.高级型

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


2.1BETWEEN 限制查询范围

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

利用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-8-1' AND '2005-9-1'


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

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

FROM 供应商信息

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


2.2使用WHERE的复合条件

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

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

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

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

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

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

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

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

FROM 顾客信息

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

2.2.2使用多个关键字

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

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

条件为:不是7、5、4、2其中任何一个的供应商代号;以10开始的商品编号;单价不在20~100之间;不属于12、13、14其中任何一个类别的商品;商品单位不能为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

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

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

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

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

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

WHERE t2.进货时间 BETWEEN '2004-1-1' AND '2004-12-31'

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

ORDER BY t2.进货时间

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

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

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

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

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

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

2.4保存SELECT结果

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

2.4.1保存结果到表

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

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

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

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

INTO 销售详情 05_08

FROM 销售信息

WHERE 售出时间 BETWEEN '2005-8-1' AND '2005-8-31'

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

SELECT *  FROM 销售详情 05_08

2.4.2保存结果到视图

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

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

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

CREATE VIEW 供应商 07_VIEW

AS 

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

FROM 商品信息

WHERE 供应商代号=7

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

SELECT *

FROM 供应商07_VIEW

ORDER BY 单价 


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

时间: 2024-07-28 13:36:06

SQL应用与开发:(七)数据操作 &#183; 查 &#183; (二)高级型的相关文章

SQL应用与开发:(七)数据操作 &amp;#183; 查 &amp;#183; (三)使用子查询访问和修改数据

3.使用子查询访问和修改数据 子查询和连接查询一样提供了使用单个查询访问多个表中的数据的方法.子查询在其他结果的基础上提供一种有效地方式来表示WHERE子句的条件.子查询是一个SELECT语句,它定义在SELECT.INSERT.UPDATE或DELECT语句或者另一个子查询中.子查询的SELECT语句可与外部查询指向不同的表. 嵌套的子查询或嵌套的SELECT语句是指包含一个或多个子查询的SELECT语句.子查询可嵌套在外部的SELECT.INSERT.UPDATE或DELECT语句的WHER

SQL应用与开发:(七)数据操作 &amp;#183; 查 &amp;#183; (一)常规型

数据库是为了便于有效地管理信息而创建的,人们希望数据库可以随时提供所需要的数据信息.因此,对用户来说,数据查询是数据库最重要的功能.在数据库中创建了对象并且在基表中添加了数据后,用户便可以从数据库中检索特定信息. 1.常规型 常规型数据查询是通过SELECT语句来完成的.SELECT语句可以从数据库中按用户要求检索数据,并将查询结果以表格的形式返回. 1.1SELECT语句概述 SELECT子句是SQL编程人员最常用的语句之一,也是SQL标准中最灵活和应用最为广泛的语句之一.SELECT语句是一

SQLServer导出sql文件/表架构和数据操作步骤_MsSql

很多朋友问到sql server数据库"生成脚本",只导出了数据库的sql脚本,而表里的数据依然没有导出来.很简单,看教程: 注:我这里用的SQLServer2008,其它版本应该差不多. 一.选中要导出的数据库–>任务–>生成脚本(或者在任务里面有生成脚本这个选项,好好找找能找到的!)   二.出现"生成和发布脚本"窗口,点击下一步 三.选择要编写脚本的数据库对象,全部导出选第一个,如果你想导出部分数据勾选    第二个就好了 四.出现这个画面后点击&

SQLServer导出sql文件/表架构和数据操作步骤

很多朋友问到sql server数据库"生成脚本",只导出了数据库的sql脚本,而表里的数据依然没有导出来.很简单,看教程: 注:我这里用的SQLServer2008,其它版本应该差不多. 一.选中要导出的数据库–>任务–>生成脚本(或者在任务里面有生成脚本这个选项,好好找找能找到的!) 二.出现"生成和发布脚本"窗口,点击下一步 三.选择要编写脚本的数据库对象,全部导出选第一个,如果你想导出部分数据勾选    第二个就好了 四.出现这个画面后点击&qu

SQL Server各种导入导出数据方式的比较

本文为原创,如需转载,请注明作者和出处,谢谢!本文曾发表于IT168:http://tech.it168.com/db/s/2006-08-02/200608020911005.shtml     当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据导入导出功能,并且在导入导出的同时可以对数据进行灵活的处理.     在SQL Server中主要有三

SQL应用与开发:(二)数据操作 &amp;#183; 增

表是用来存储数据和操作数据的逻辑结构,关系数据库中的所有数据都表现为表格的形式,并且关系数据库是由表.查询等对象组成,而查询等对象又是通过表来显示的.因此,表是数据库的基础.只有创建了表,才能存储数据库记录信息. 当数据库中的表被创建后,必然要将数据添加到表中.这些数据可以是从其他应用程序来的,需要存储到数据库中:也可能是新数据要被添加到新创建的表中,或已存在的表中. 在SQL语句中,最常用的向表中添加的数据的方法是使用INSERT语句.基本的INSERT语句的语法相当的简单,下面列出了INSE

SQL应用与开发:(三)数据操作 &amp;#183; 改 AND 删

继续上一篇博客的序幕,接下来,写一些关于数据操作的"改"和"删"的相关课题.在本次的学习总结中,一致围绕着数据的操作问题,这也是数据库基本.最简单的应用之一. 1.修改和删除表 在创建好表之后,如果想对表中的数据进行修改,可以使用SQL提供的ALTER TABLE语句:如果在使用过程中发现某个表已不再需要,可以通过SQL提供的DROP TABLE语句将该表删除. 1.1修改SQL表 可以使用ALTER TABLE语句修改存储在数据库中的基表定义.ALTER TABL

掌握SQL四条最基本的数据操作语句

数据|语句 掌握sql四条最基本的数据操作语句:insert,select,update和delete. 练掌握sql是数据库用户的宝贵财富.在本文中,我们将引导你掌握四条最基本的数据操作语句-sql的核心功能-来依次介绍比较操作符.选择断言以及三值逻辑.当你完成这些学习后,显然你已经开始算是精通sql了. 在我们开始之前,先使用create table语句来创建一个表(如图1所示).ddl语句对数据库对象如表.列和视进行定义.它们并不对表中的行进行处理,这是因为ddl语句并不处理数据库中实际的

SQL数据操作基础(中级)10

数据 操作日期和时间 日期和时间函数对建立一个站点是非常有用的.站点的主人往往对一个表中的数据何时被更新感兴趣.通过日期和时间函数,你可以在毫秒级跟踪一个表的改变. 返回当前日期和时间 通过函数GETDATE(),你可以获得当前的日期和时间.例如,语句SELECT GETDATE()返回如下的结果: -----------.. NOV 30 1997 3:29AM (1 row(s) affected) 显然,如果你将来使用这个函数,你得到的日期将比这个时间晚,或者梗早. 函数GETDATE()