SQL views provide alternative ways of accessing the data in a table.
Editor's Note: This article is excerpted from chapter 3 of Programming in ILE RPG, Fifth Edition.
Although a program can retrieve and process virtual rows from a view, the view does not actually contain data. Instead, it stores an access path, a sequence of pointers to the actual data in one or more tables. When SQL creates a new view, the database constructs an unkeyed logical file based on a physical file. An RPG program does not make a distinction between a table and a view when it is processing the file—the program can read and generally update the file whether it is a table or a view.
The most common uses for a view are to select certain rows (a subset) from a table, select a subset of columns from a table, or select a combination of both functions. The SQL Create View statement produces a view. The access path is built from an SQL Select statement integrated within the Create View statement:
These Create View statements contain three major clauses: 1) the name of the view, 2) a Select statement—more accurately called a fullselect—to designate the rows and columns to be in the view, and 3) the name of the view’s record format.
A fullselect is a component of the Create View statement. It specifies the rows and columns from one or more tables that make up the view. The fullselect names the columns to retrieve, the table from which to retrieve them, and optionally a Where clause to specify criteria for row selection.
In the following fullselect,
the view includes only those rows from the Customers table that represent male (Cgender = 'M') customers. The view has all the same columns as the original table (Select *). Although the Customers table contains all the possible rows, if a program processes this view instead, the view will have access only to male customers.
When the view is to have only certain columns from the table, the fullselect names those columns to use:
In this example, the fullselect specifies only four columns from the table to include in the view. Every row from the table is also in the view because the fullselect has no Where clause to filter out rows. You can, however, combine a column list and a Where clause in the same fullselect:
Note that you cannot sort a view, nor can the fullselect contain an SQL Order By clause.
Creating Indexes with SQL
An SQL index is a database object whose primary purpose is to improve the performance of SQL statements. An index does not contain data, and SQL cannot retrieve rows from an index. The IBM i database implements an index as a keyed logical file. As you might expect, the SQL Create Index statement creates an index:
This Create Index statement contains four major clauses: 1) the name of the index, 2) the name of the table on which to create the index, 3) a list of the key fields in the index, and 4) an optional record format name. The statement might also include a Where clause to cause the index to select only those rows that fulfill specific criteria:
Although SQL does not retrieve data from an index, an ILE RPG program can declare the index in its file declarations, enabling it to read and write records in the Custidx logical file.