SELECT

Синтаксис

Синтаксис

    SELECT * | { [ DISTINCT | ALL ] { Поле данных } [,...] }
    FROM { таблица [ псевдоним ] } [,...]
    [ WHERE условие ]
    [ GROUP BY { поле | Integer } [,...] ]
    [ HAVING условие ]
    [ { UNION [ALL] | INTERSECT | EXCEPT SELECT-команда } ] [...]
    [ ORDER BY { поле | Integer [ ASC|DESC ] } [,...] ]
    [ INTO { TEMP | SCRATCH } таблица ] ;

Описание:

    SELECT возвращает как результат строки данных, которые создаются из данных, содержащихся в указанных исходных таблицах данных. С помощью SELECT можно, например, выбирать определенные строки из одной таблицы данных, или суммировать элементы этой таблицы, или же создавать новую таблицу-результат из многих исходных.

DISTINCT

    DISTINCT указывает базе данных исключать дупликаты из результата команды SELECT.

    Пример:

    SELECT DISTINCT vnum
    
    FROM torder;

    Здесь выбираются все различные (без дупликатов) элементы столбца vnum таблицы torder.

FROM { таблица [ псевдоним ] } [,...]

    С помощью FROM сообщают базе данных из каких таблиц выбирать данные.

    Пример:

    SELECT vnum
    
    FROM torder;

    Здесь выбираются все элементы поля vnum таблицы torder.

WHERE условие

    С помощью WHERE ограничивают выбор данных из указанных таблиц.

    Пример:

    SELECT tkunden.knum, tverkauf.vnum, tverkauf.prov
    
    FROM tkunden, tverkauf
    
    WHERE tkunden.vnum=tverkauf.vnum; 

    Результатом является здесь таблица из строк, состоющих из поля knum таблицы tkunden и полей vnum и prov таблицы tverkauf, где с помощью WHERE указывается как находить строки таблицы tverkauf соответствующие строкам из таблицы tkunden.

GROUP BY { поле | Integer } [,...]

    GROUP BY используется вместе с функциями агрегирования данных для того, чтобы последние действовали на определенные группы строк результирующей таблицы данных. На месте имен полей могут быть использованы их порядковые номера в списке полей результирующей таблицы.

    Пример:

    SELECT vnum, MAX(preis)
    
    FROM torder
    
    GROUP BY vnum;

    Здесь выбираются в качестве результата все максимальные значения поля preis про найденную группу строк с идентичным значением поля vnum.

HAVING условие

    HAVING используется вместе с GROUP для того чтобы выбирать только определенные группы строк данных, которые удовлетворяют указанному условию.

    Пример:

    SELECT vnum, MAX(preis)
    
    FROM torder
    
    GROUP BY vnum
    
    HAVING AVG(preis) > 10

    Здесь выбираются все максимальные значения поля preis про найденную группу строк данных с идентичным vnum, удовлетворяющию дополнительному условию, что средняя величина preis больше 10.

ORDER BY { поле | Integer [ ASC|DESC ] } [,...]

    ORDER BY сортирует строки результирующей таблицы данных. Если ORDER BY используется внутри GROUP BY, то строки сортируются внутри каждой группы результирующих строк. Вместо имен полей могут быть использованы их порядковые номера в списке полей результирующей таблицы. ASC сортирует данные в восходящем порядке, DESC - в обратном.

    Пример:

    SELECT tkunden.knum, tverkauf.vnum, tverkauf.prov
    
    FROM tkunden, tverkauf
    
    WHERE tkunden.vnum=tverkauf.vnum order by tkunden.knum asc; 

UNION [ALL] SELECT-команда

    UNION используется для того, чтобы объединять результаты двух или более команд SELECT. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов.

    Пример:

    SELECT vnum, vname
    
    FROM tverkauf
    
    WHERE stadt='Berlin'
    
    UNION
    
    SELECT knum, kname
    
    FROM tkunden
    
    WHERE stadt='Berlin'
    
    ORDER BY 1;

    Здесь результатом является таблица, содержащая все vnum и knum таблицы tverkauf так же, как и всеv num и kname таблицы tkunden, где поле stadt имеет значение 'Berlin'. Результат сортируется по первому столбцу и дупликаты исключаются.

INTERSECT [ALL] SELECT-команда

    INTERSECT используется для того, чтобы объединять результаты двух или более команд SELECT, при этом в резултат включаются только строки содержащиеся в первой команде SELECT, как и во второй. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов.

    Пример:

    SELECT vnum, vname
    
    FROM tverkauf
    
    WHERE stadt='Berlin'
    
    INTERSECT
    
    SELECT knum, kname
    
    FROM tkunden
    
    WHERE stadt='Berlin'
    
    ORDER BY 1; 

    Здесь интересуют все строки первой результирующей таблицы, которые так же содержатся и во второй. Дупликаты исключаются из результата.

EXCEPT [ALL] SELECT-команда

    Важно: в некоторых диалектах SQL используется вместо EXCEPT MINUS или DIFFERENCE, синтаксис же от этого не меняется

    EXCEPT используется для того, чтобы объединять результаты двух или более команд SELECT, при этом в результат включаются только строки, содержащиеся в первой команде SELECT и не содержащиеся во второй. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов.

    Пример:

    SELECT vnum, vname
    
    FROM tverkauf
    
    WHERE stadt='Berlin'
    
    EXCEPT
    
    SELECT knum, kname
    
    FROM tkunden
    
    WHERE stadt='Berlin'
    
    ORDER BY 1; 

    Здесь интересуют все строки первой результирующей таблицы, которые не имеют дупликатов во второй.

INTO { TEMP | SCRATCH } таблица

    INTO TEMP используется для создания вспомогательных таблиц в активной базе данных, которые автоматически удаляются из последней после окончания связи с ней. Часто используется для оптимизации команд SQL. INTO SCRATCH отличается от INTO TEMP тем, что временная таблица фрагментируется по всем дискам.