227 次浏览
问题:解释 DB2 优化器使用的多重索引访问和仅索引访问路径之间的差别。针对两者分别提供一个示例。解决方法:仅索引访问和多重索引访问是 DB2 优化器为获取查询结果而选择的访问路径类型。当 SELECT 查询中给定的所有列都存在于索引中时,将使用仅索引访问路径。在这种情况下,优化器无需转到数据页来获取结果,所有数据都存在于索引页中。例如,ORDERS 表以 ORDER_ID 作为主键 ... 阅读更多
2000+ 次浏览
DB2 中的 UNION 用于合并两个或更多 SELECT 语句。SELECT 语句可以针对单个表或多个表。每个 SELECT 语句分别处理,其结果被合并为最终结果行。UNION 语句将消除因 SELECT 语句而出现的重复行。如果希望保留重复行,则可以使用 UNION ALL 语句。例如,如果希望在 ORDERS 和 ORDERS_HIST 表中提取所有 ORDER_ID,其中 ORDER_TOTAL 大于 1000,则可以使用以下带有 ... 阅读更多
151 次浏览
不能对 SELECT 查询使用 EXECUTE IMMEDIATE 和带 PREPARE 的 EXECUTE。对于 SELECT 查询,我们有固定列表 SELECT 其中要获取的列保持固定,且无法更改。例如,如果希望选择 14-08-2020 下达的订单。那么,可以使用如下所示的动态 SQL:示例将 “SELECT ORDER_ID FROM ORDERS WHERE ORDER_DATE=?” 移动到 WS-SQL-QUERY EXEC SQL 为 SELQUERY 声明 ORDER-CUR 游标 END-EXEC EXEC SQL 从 :WS-SQL-QUERY 准备 SELQUERY END-EXEC 将 “14-08-2020” 移动到 WS-ORDER-DATE EXEC SQL 使用 :WS-ORDER-DATE 打开 ORDER-CUR END-EXEC 执行直到 SQLCODE = +100 ... 阅读更多
671 次浏览
EXECUTE IMMEDIATE 和 EXECUTE PREPARE 是动态 SQL 形式。在 EXECUTE immediate 情况下,我们可以在主机变量中给出 SQL 语句,并在此 EXECUTE IMMEDIATE 中传递此主机变量。以下示例演示了这些形式。示例 01 WS-SQL-DECLARE 05 WS-SQL-LEN PIC S9(04) COMP. 05 WS-SQL-QUERY PIC X(70)。将 +80 移动到 WS-SQL-LEN 将 “UPDATE ORDERS SET ORDER_PAID = ‘YES’ WHERE ORDER_DATE = ‘14-08-2020’” 移动到 WS-SQL-QUERY EXEC SQL 立即执行 :WS-SQL-DECLARE END-EXEC 在 EXECUTE PREPARE 情况下,SQL 语句首先被准备,然后执行。我们可以使用这种形式的动态 SQL ... 阅读更多
1K+ 次浏览
静态 SQL 硬编码在 COBOL-DB2 程序中,且在程序执行期间无法更改 SQL 查询。我们只能更改主机变量的值。对于动态 SQL,可以在运行时更改 COBOL-DB2 程序中的列、表和谓词。例如,基于当前日期,我们可以更新 ORDERS 或 ORDERS_HIST 表。可以使用包括 ORDERS 表或 ORDER_HIST 表的动态 SQL 构建此查询。动态 SQL 的主要优点是其灵活性。我们可以根据我们的业务逻辑添加列或更改表/谓词。在其他 ... 阅读更多
122 次浏览
PLAN_TABLE 的 QBLOCK_TYPE 列主要提供了有关查询类型的的信息。它的值可能为 CORSUB,表明该查询为相关子查询,而 NCOSUB 表明该查询为非相关子查询。JOIN_TYPE 列表明在查询中使用的连接类型。此列可根据下表采用值。列值解释空白内部连接/无连接FFULL 外部连接L左外部连接RRIGHT 外部连接
485 次浏览
DB2 中的 PLAN_TABLE 包含优化器从 EXPLAIN 语句中使用的访问路径的详细信息。此表提供了有关具有 DB2 SQL 语句的 PLAN 的大量信息。ACCESSTYPE 是 PLAN_TABLE 的列之一,它提供了有关访问类型的信息。此列中可能出现的值及其解释如下。列值解释I索引访问RT表空间扫描MMultiple 索引扫描N谓词中存在的索引访问INDEXONLY 列可以采用“Y”作为值,表示优化器只需要读取索引空间即可获取查询数据。
284 次浏览
序列用于自动生成唯一 ID。我们可以将 DB2 表中的一列定义为 SEQUENCE 类型。这将使用户程序能够为表中插入的每一新行自动生成唯一 ID。DB2 生成的自动 ID 会在整个数据库中保持唯一性。例如,SEQUENCE 的实际应用发生在为每个区域(北、东、西和南)分配单独的 ORDERS 表中,然后我们可以将 ORDER_ID 声明为 SEQUENCE。它将始终为 ORDER_ID 生成一个唯一值,与为北方、东方分配的 ORDER 表无关, ... 阅读更多
3K+ 次浏览
子查询是嵌套查询。当此子查询仅执行一次,并且此子查询的结果用于提取主查询中的数据时,则此类子查询称为非相关子查询。另一方面,当子查询为每次执行引用主查询时,则该子查询称为相关子查询。例如,如果我们要从 ORDERS 表中提取所有 ORDER_TOTAL 大于总体平均值的订单,那么可以使用下面的非相关子查询。示例SELECT ORDER_ID FROM ORDERS WHERE ORDER_TOTAL > (SELECT AVG(ORDER_TOTAL) FROM ORDERS)那里 ... 阅读更多
5K+ 次浏览
问题:如何在 ORDERS 和 TRANSACTION DB2 表的帮助下解释 INNER JOIN 和 OUTER JOIN。解决方案JOIN 用于结合 DB2 中一个或多个表中的数据。有两种主要类型的 JOIN —— INNER JOIN 和 OUTER JOIN。它们之间的基本区别在于,INNER JOIN 是两个或多个表的交集,而外连接是两个或多个表的并集。基本上,INNER JOIN 用于使用相等列值组合来自多个表的数据,并且另一方面,在 OUTER JOIN 的情况下,如果 ... 阅读更多