Make your own free website on Tripod.com

SELECT clause


Variants



1. SELECT [SINGLE [FOR UPDATE] | DISTINCT] *
2. SELECT [SINGLE [FOR UPDATE] | DISTINCT] s1 ... sn
3. SELECT [SINGLE [FOR UPDATE] | DISTINCT] (itab)

Effect

The result of a SELECT statement is itself a table . The SELECT clause describes which columns this table is supposed to have.

In addition, you can use the optional addition SINGLE or DISTINCT if you want only certain lines of the solution set to be visible for the calling program:
SINGLE The result of the selection is a single record . If this record cannot be uniquely identified, the first line of the solution set is selected. The addition FOR UPDATE protects the selected record against parallel changes by other transactions until the next database commit occurs (see LUW and Database locking ). If the database system detects a deadlock, the result is a runtime error.
DISTINCT Any lines which occur more than once are automatically removed from the selected dataset.

Note

To ensure that a record is uniquely determined, you can fully qualify all fields of the primary key by linking them together with AND in the WHERE condition.

Note

Performance
The additions SINGLE FOR UPDATE and DISTINCT exclude the use of SAP buffering .
The addition DISTINCT requires sorting on the database server and should therefore only be specified if duplicates are likely to occur.

Variant 1

SELECT [SINGLE [FOR UPDATE] | DISTINCT] *

Effect

In the result set, the columns correspond exactly in terms of order, ABAP/4 Dictionary type and length to the fields of the database table (or view ) specified in the FROM clause .

Example

Output all flight connections from Frankfurt to New York:
TABLES SPFLI. SELECT * FROM SPFLI WHERE CITYFROM = 'FRANKFURT' AND CITYTO = 'NEW YORK'. WRITE: / SPFLI-CARRID, SPFLI-CONNID. ENDSELECT.


Example

Output all free seats on the Lufthansa flight 0400 on 28.02.1995:
TABLES SFLIGHT. DATA SEATSFREE TYPE I. SELECT SINGLE * FROM SFLIGHT WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228'. SEATSFREE = SFLIGHT-SEATSMAX - SFLIGHT-SEATSOCC. WRITE: / SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SEATSFREE.

Variant 2

SELECT [SINGLE [FOR UPDATE] | DISTINCT] s1 ... sn

Effect

The order, ABAP/4 Dictionary type and length of the columns of the result set are explicitly defined by the list s1 ... sn . Each si has the form
ai or ai AS bi .
Here, ai stands either for
bi is an alternative name for the i-th column of the result set.
When using INTO CORRESPONDING FIELDS OF wa in the INTO clause , you can specify an alternative column name to assign a column of the result set uniquely to a column of the target area.
An aggregate print uses an aggregate function to group together data from one or all columns of the database table. Aggregate prints consist of three or four components:
An aggregate function immediately followed by an opening parenthesis DISTINCT (optional) The database field f A closing parenthesis
All components of a print must be separated by at least one blank.

The following aggregate functions are available:
MAX Returns the greatest value in the column determined by the database field f for the selected lines. Specifying DISTINCT does not change the result. NULL values are ignored unless all values in a column are NULL values. In this case, the result is NULL .
MIN Returns the smallest value in the column determined by the database field f for the selected lines. Specifying DISTINCT does not change the result. NULL values are ignored unless all values in a column are NULL values. In this case, the result is NULL .
AVG Returns the average value in the column determined by the database field f for the selected lines. AVG can only apply to a numeric field. NULL values are ignored unless all values in a column are NULL values. In this case, the result is NULL .
SUM Returns the sum of all values in the column determined by the database field f for the selected lines. SUM can only apply to a numeric field. NULL values are ignored unless all values in a column are NULL values. In this case, the result is NULL .
COUNT Returns the number of different values in the column determined by the database field f for the selected lines. Specifying DISTINCT is obligatory here. NULL values are ignored unless all values in a column are NULL values. In this case, the result is 0
COUNT( * ) Returns the number of selected lines. If the SELECT command contains a GROUP BY clause , it returns the number of lines for each group. The form COUNT(*) is also allowed.
If ai is a field f , MAX( f ) , MIN( f ) or SUM( f ) , the corresponding column of the result set has the same ABAP/4 Dictionary format as f . With COUNT( f ) or COUNT( * ) , the column has the type INT4 , with AVG( f ) the type FLTP .
If you specify aggregate functions together with one or more database fields in a SELECT clause, all database fields not used in one of the aggregate functions must be listed in the GROUP-BY clause . Here, the result of the selection is a table.
If only aggregate functions occur in the SELECT clause, the result of the selection is a single record. Here, the SELECT command is not followed later by an ENDSELECT .

Notes

This variant is not available for pooled tables and cluster tables .
If the SELECT clause contains a database field of type LCHAR or LRAW , you must specify the appropriate length field immediately before.

Notes

Performance
Specifying aggregate functions excludes the use of SAP buffering .
Since many database systems do not manage the number of table lines and therefore have to retrieve this at some cost, the function COUNT( * ) is not suitable for checking whether a table contains a line or not. To do this, it is best to use SELECT SINGLE f ... for any table field f .
If you only want to select certain columns of a database table, you are recommended to specify a list of fields in the SELECT clause or to use a View .

Examples

Output all flight destinations for Lufthansa flights from Frankfurt:
TABLES SPFLI. DATA TARGET LIKE SPFLI-CITYTO. SELECT DISTINCT CITYTO INTO TARGET FROM SPFLI WHERE CARRID = 'LH ' AND CITYFROM = 'FRANKFURT'. WRITE: / TARGET. ENDSELECT.

Output the number of airline carriers which fly to New York:
TABLES SPFLI. DATA COUNT TYPE I. SELECT COUNT( DISTINCT CARRID ) INTO COUNT FROM SPFLI WHERE CITYTO = 'NEW YORK'. WRITE: / COUNT.

Output the number of passengers, the total weight and the average weight of luggage for all Lufthansa flights on 28.02.1995:
TABLES SBOOK. DATA: COUNT TYPE I, SUM TYPE P DECIMALS 2, AVG TYPE F. DATA: CONNID LIKE SBOOK-CONNID. SELECT CONNID COUNT( * ) SUM( LUGGWEIGHT ) AVG( LUGGWEIGHT ) INTO (CONNID, COUNT, SUM, AVG) FROM SBOOK WHERE CARRID = 'LH ' AND FLDATE = '19950228' GROUP BY CONNID. WRITE: / CONNID, COUNT, SUM, AVG. ENDSELECT.

Variant 3

SELECT [SINGLE [FOR UPDATE] | DISTINCT] (itab)

Effect

Works like SELECT [SINGLE [FOR UPDATE] | DISTINCT] s1 ... sn if the internal table itab contains the list s1 ... sn as ABAP/4 source code, and like SELECT [SINGLE [FOR UPDATE] | DISTINCT] * , if itab is empty. The internal table itab can only have one field which must be of type C and cannot be more than 72 characters long. itab must appear in parentheses and there should be no blanks between the parentheses and the table name.

Note

With this variant, the same restrictions apply as for SELECT [SINGLE [FOR UPDATE] | DISTINCT] s1 ... sn .

Example

Output all Lufthansa flight routes:
TABLES: SPFLI. DATA: FTAB(72) OCCURS 5 WITH HEADER LINE. REFRESH FTAB. FTAB = 'CITYFROM'. APPEND FTAB. FTAB = 'CITYTO'. APPEND FTAB. SELECT DISTINCT (FTAB) INTO CORRESPONDING FIELDS OF SPFLI FROM SPFLI WHERE CARRID = 'LH'. WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO. ENDSELECT.


Index
SAP AG 1996