2022年SQL多层查询 .pdf
《2022年SQL多层查询 .pdf》由会员分享,可在线阅读,更多相关《2022年SQL多层查询 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、多层 SQL 查询基础举例讲解顾名思义,多层的 SQL 查询的便在于:“在一个 SQL 语句中可以包含另一个SQL 查询语句,形成内部嵌套的查询类型。”comparisonANY|ALL|SOME(sqlstatement)expressionNOTIN(sqlstatement)NOTEXISTS(sqlstatement)comparison 将表达式与内层查询的结果比较的操作。expression 对内层查询的结果作搜索的表达式。sqlstatement 为 Select 语句构成的SQL 查询,必须用()将该语句括起来。例如:我们先从订单表格当中,查询出所有的单位,再将产品表格中的单位
2、与的一一对比,查询出所有高于订单表格的单位价格的记录。Select*FROM 产品表格Where 单位价格 ANY(Select 单位价格FROM 订单表格Where 折扣=.25);有些书上将内嵌的select 语句称为子查询,子查询形成的结果又成为父查询的条件。子查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。子查询中不能有order by 分组语句。再例如:select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal=(select sal from scott.emp where ename=WA
3、RD);在这段代码中,子查询 select sal from scott.emp where ename=WARD 的含义是从emp 数据表中查询姓名为WARD 的员工的薪水,父查询的含义是要找出emp 数据表中薪水大于等于WARD 的薪水的员工。上面的查询过程等价于两步的执行过程。(1)执行“select sal from scott.emp where ename=WARD”,得出 sal=1250;(2)执行“select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal=1250;”带 in 的嵌套查询select
4、 emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal in(select sal from scott.emp where ename=WARD);上述语句完成的是查询薪水和WARD 相等的员工,也可以使用not in 来进行查询。带 any 的嵌套查询select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal any(select sal from scott.emp where job=MANAGER);带 any 的查询过程等价于两步的执行过程
5、。(1)执行“select sal from scott.emp where job=MANAGER”(2)查询到3 个薪水值2975、2850 和 2450,父查询执行下列语句:select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal 2975 or sal2850 or sal2450;带 some 的嵌套查询名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal
6、=some(select sal from scott.emp where job=MANAGER);(1)子查询,执行“select sal from scott.emp where job=MANAGER”。(2)父查询执行下列语句。select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal=2975 or sal=2850 or sal=2450;带【any】的嵌套查询和【some】的嵌套查询功能是一样的。早期的SQL 仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留
7、了【any】关键词。带 all 的嵌套查询select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal all(select sal from scott.emp where job=MANAGER);带 all 的嵌套查询与【some】的步骤相同。(1)子查询。(2)父查询执行下列语句。select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal 2975 and sal2850 and sal2450;带 exists 的嵌套查询select
8、emp.empno,emp.ename,emp.job,emp.sal from scott.emp,scott.dept where exists(select*from scott.emp where scott.emp.deptno=scott.dept.deptno);并操作的嵌套查询并操作就是集合中并集的概念。属于集合A 或集合 B 的元素总和就是并集。(select deptno from scott.emp)union(select deptno from scott.dept);交操作的嵌套查询交操作就是集合中交集的概念。属于集合A 且属于集合B 的元素总和就是交集。(sele
9、ct deptno from scott.emp)intersect(select deptno from scott.dept);差操作的嵌套查询差操作就是集合中差集的概念。属于集合A 且不属于集合B 的元素总和就是差集。select deptno from scott.dept)minus(select deptno from scott.emp;并、交和差操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。第九章查询数据库这一章介绍如何用TQuery 构件查询数据库,如何通过SQL 语句检索、插入、更新和删除数据。SQL 是符合工业标准的关系数据库语言,既可以用于远程的基于服务器的
10、数据库,如 Sybase、Oracle、InterBase 和 Microsoft SQL Server,也可以用于本地数据库如Paradox、dBASE、FoxPro 和 Access 以及符合ODBC 的数据库。9.1 有效地使用查询要有效地使用查询,必须熟悉标准的SQL 语言以及所使用的服务器对SQL-92 的限制和扩展,同时还要熟悉BDE。9.1.1 查询桌面数据库作为一个桌面开发者,应对表格、记录和字段的概念有所了解,又能熟练地使用TTable 构件访问数据集中的每一条记录和每一个字段。还可以使用TTable 的范围和过滤功能在数据集中选择一部分记录,前者用于选择一块连续的记录,这些
11、记录的值在一个特定的范围内;后者用于选择非连续的记录,这些记录符合特定的条件。所谓查询,非常类似于过滤,不同的是,查询要用到TQuery 构件和 SQL 属性,有时候可能还要用到Params 属性。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -从功能上讲,查询要比过滤复杂和强大些,这主要体现在:.可以同时查询几个表格.可以让查询结果中只包含部分字段,而过滤将返回所有字段。查询也可以带参数,此时称为参数化查询。所谓参数,类似于变量,它的实际的值由BDE 在执行SQL 语句之前赋值。参数化查询的好处是,不需要修改SQL 语句,只要修改参数的值,就能执行不同的查询功能。大部
12、分情况下,使用TQuery 构件是为了在数据集中选择一部分字段和记录,但也可以使用SQL 语句实现更新、插入和删除记录的功能,这是与TTable 构件的一个区别。9.1.2 查询远程数据库要查询远程数据库,必须熟悉SQL 语句以及服务器对标准SQL 的限制和扩展。TQuery 构件的 SQL 属性用于指定要执行的SQL 语句,Params属性用于提供参数。TQuery 构件的功能并不只限于 SQL 语句和参数,它还是BDE 与应用程序之间的接口。应用程序可以通过TQuery 构件的属性和方法来操纵SQL 语句和参数。TQuery 构件最终还是通过SQL Links 与远程服务器进行通讯的,远程
13、服务器把查询结果返回给BDE,再由 BDE 返回给应用程序。9.2 可以查询哪些数据库使用 TQuery 构件可以查询下列数据库:一是 Paradox 或 dBASE,这是通过BDE 内置的 Local SQL 实现的。Local SQL 是 SQL-92 标准的一个子集,支持大部分 DML 和 DDL。二是 Local InterBase Server,这是通过InterBase 引擎实现的。三是远程数据库,如 Oracle、Sybase、MS-SQL Server、InFormix、DB2 和 InterBase,不过,必须安装了相应的SQL Links 驱动程序。不同的服务器对标准SQL
14、 都有不同的限制和扩展,要查询远程数据库之前,务必要查阅它的有关文档。Delphi 4 还支持异构查询,也就是说,可以同时查询几个不同类型的数据库。9.3 使用 TQuery 构件的一般步骤第一步是把一个TQuery 构件放到数据模块上,设置它的DatabaseName 属性指定要访问的数据库。对于Paradox和 dBASE 来说,DatabaseName 属性可以设为BDE 别名如 DBEMOS、DefaultDD、IBLOCAL等,也可以是自定义的别名或者表所在的路径。对于 SQL 表来说,DatabaseName 属性只能设为BDE 别名。如果应用程序使用TDatabase 构件来连接
15、数据库,DatabaseName属性也可以设为应用程序专用的别名。第二步是设置SQL 属性指定要执行的SQL 语句,有必要的话还可以设置Params属性为 SQL 语句设置参数。第三步是把TDataSource 构件放到数据模块上,设置它的DataSet 属性指定TQuery 构件。再把TDBGrid 构件放到窗体上,设置它的DataSource 属性指定TDataSource 构件。第四步是执行SQL 语句。要执行SQL 语句有两种方式,一是在设计期把Active 属性设为True,程序启动时将自动执行 SQL 语句。另一种方式是在运行期调用Open 或 ExecSQL 执行 SQL 语句。
16、如果希望返回查询结果,调用 Open,如果不需要返回查询结果,调用ExecSQL。在调用 Open 或 ExecSQL 之前,最好先调用Prepare 通知服务器作好准备。执行 SQL 语句所返回的查询结果实际上是数据集中满足特定条件的记录所组成的子集,数据库栅格中只显示符合特定条件的记录。9.4 指定要执行的SQL 语句可以设置SQL 属性以指定要执行的SQL 语句。在设计期,只要把 Active 属性设为True,就会自动执行SQL 语句。在运行期,首先要调用Prepare 通知服务器准备好,然后调用Open 或 ExecSQL 执行 SQL 函数语句。9.4.1 概述SQL 属性是一个典
17、型的TStrings 对象。SQL 属性一般只包含一条完整的SQL 语句,但可以分成几行写,TQuery构件会自动把几行字符串合并成一条SQL 语句。把 SQL 语句分成几行写的好处是,SQL 语句的逻辑结构比较清楚,有利于今后维护和调试。所以,SQL 语句的SELECT 部分和 WHERE 部分一般都不在同一行上。SQL 语句可以不带参数,把字段名称和值固定在SQL 语句中,例如,下面这个SQL 语句就是硬写(Hard-Coded)的:SELECT*FROM Customer WHERE CustNo=1231 注意:如果要查询的是本地数据库,如果SQL 语句中的字段名包含空格或其他特殊符号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年SQL多层查询 2022 SQL 多层 查询
限制150内