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


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

目录
相关文章
|
7天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
27天前
|
SQL 存储 关系型数据库
一文搞懂SQL优化——如何高效添加数据
**SQL优化关键点:** 1. **批量插入**提高效率,一次性建议不超过500条。 2. **手动事务**减少开销,多条插入语句用一个事务。 3. **主键顺序插入**避免页分裂,提升性能。 4. **使用`LOAD DATA INFILE`**大批量导入快速。 5. **避免主键乱序**,减少不必要的磁盘操作。 6. **选择合适主键类型**,避免UUID或长主键导致的性能问题。 7. **避免主键修改**,保持索引稳定。 这些技巧能优化数据库操作,提升系统性能。
226 4
一文搞懂SQL优化——如何高效添加数据
|
1月前
|
SQL 数据可视化 数据处理
使用SQL和Python处理Excel文件数据
使用SQL和Python处理Excel文件数据
54 0
|
1月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
7天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。
|
14天前
|
SQL 人工智能 自然语言处理
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
NL2SQL进阶系列(2):DAIL-SQL、DB-GPT开源应用实践详解Text2SQL
|
30天前
|
SQL 关系型数据库 MySQL
SQL INSERT INTO order_record SELECT * FROM 从一张表查出数据插入到另一张表
SQL INSERT INTO order_record SELECT * FROM 从一张表查出数据插入到另一张表
14 0