开发者社区> 吴士龙> 正文

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 单价 


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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )
【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )
28 0
初涉MySQL——操作数据库
初涉MySQL——操作数据库 一、数据库创建:CREATE 1、语法:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name.
1009 0
《UNIX环境高级编程(第3版)》——2.8 基本系统数据类型
历史上,某些UNIX系统变量已与某些C数据类型联系在一起,例如,历史上主、次设备号存放在一个16位的短整型中,8位表示主设备号,另外8位表示次设备号。但是,很多较大的系统需要用多于256个值来表示其设备号,于是,就需要一种不同的技术。
1067 0
PostgreSQL技术周刊第22期:应用开发者指南
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
3082 0
Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
一、发现问题 先看两种方法插入数据 public void save(Person p) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("insert into person(name,phone) values (?,?)", new Object[] { p.getName(), p.ge
906 0
+关注
吴士龙
当时机不成熟的时候,把自己的厚度积累起来;当有一天时机来临的时候,你就能奔腾如海,成就自己的生命。
53
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载