FROM <ссылка на таблицу> [, <ссылка на таблицу>]...
[WHERE <условия поиска>]
[GROUP BY <список столбцов> [HAVING <условия поиска>]]
[ORDER BY <список упорядочения>];
Разберем предложения оператора.
SELECT [ALL | DISTINCT]
<список выбора> — список выбираемых столбцов, констант, функций или выражений, разделенных запятыми.
Необязательное ключевое слово ALL означает, что выбираются все строки, соответствующие условию поиска. Это значение по умолчанию, и обычно в операторе не указывается. Ключевое слово DISTINCT указывает, что в выходной набор данных попадут лишь отличающиеся строки, дубликаты будут отбрасываться.
Сам список выбираемых столбцов (или список выбора) может содержать имена требуемых столбцов, константы, выражения или символ *, который означает, что выбираются все столбцы таблицы.
Столбцы могут быть представлены или просто своими именами или перед именем столбца может присутствовать имя таблицы (или псевдоним таблицы — см. далее), после которого стоит точка. Никаких пробелов в таких конструкциях использовать нельзя. Синтаксис такой уточненной конструкции выглядит следующим образом:
<имя таблицы>.<имя столбца>
или
<псевдоним таблицы>.<имя столбца>
Уточненные имена столбцов обязательно должны присутствовать в операторах SELECT, где присутствует несколько таблиц, это позволит избежать двусмысленности при обращении к столбцам с одинаковым именем из разных таблиц. Такая ситуация может возникнуть при выполнении соединений таблиц.
При задании имени столбца из таблицы, константы или любого выражения можно после ключевого слова AS указать текст, который будет помещаться в заголовок отображаемой таблицы. Такой текст называется псевдонимом или алиасом столбца. Если псевдоним содержит пробелы, специальные символы или буквы кириллицы, то этот текст нужно заключить в двойные кавычки. Например:
SELECT CITY.CT_NAME AS "Город", AIRPORT.AP_NAME AS "Аэропорт"
FROM AIRPORT INNER JOIN CITY
ON AIRPORT.AP_CT_CODE = CITY.CT_CODE
WHERE CITY.CT_NAME = 'Москва'
Русские тексты здесь заключены в кавычки, потому что содержат символы, недопустимые в именах, а например CT_NAME, являясь правильным именем в SQL, может обойтись без кавычек. Строковые константы должны заключатся в одинарные кавычки.
ВНИМАНИЕ!
Не путайте описанные таким образом псевдонимы столбцов с псевдонимами таблиц (см. дальше). Если псевдонимы таблиц можно использовать в операторе, где они определены, для уточнения ссылок на столбцы, то с псевдонимами столбцов дело обстоит несколько сложнее. В разных версиях разных серверов баз данных их можно использовать по-разному.
Чуть позже мы рассмотрим некоторые варианты.
FROM <ссылка на таблицу> задает список имен таблиц, в которых осуществляется поиск. Здесь же можно указывать соединения (JOIN) таблиц, представления (см. в конце этой главы).
Необязательное предложение WHERE <условия поиска> определяет условия поиска строк в таблицах. На самом деле это предложение не является таким уж необязательным. Если таблица в базе данных содержит тысячи строк, то, во-первых, вам вряд ли понадобится за один раз такое количество записей, поскольку просмотреть их вы просто физически не сможете, а во-вторых, выборка больших объемов данных на сервере приводит к увеличению сетевого трафика и перегрузке сети.
Необязательное предложение GROUP BY <имя столбца> группирует найденные строки в соответствии со значением указанного столбца.
Необязательное предложение HAVING <условия поиска> определяет дополнительные условия поиска для использования в GROUP BY.
Необязательное предложение ORDER BY <список имен> позволяет упорядочить найденные строки, указывая список имен столбцов (здесь опять же можно использовать уточненные имена в виде <имя таблицы>.<имя столбца>), а также направление сортировки для каждого столбца — ключевые слова ASCENDING (по возрастанию) или DESCENDING (по убыванию).
Для разъяснения содержания запроса в любом месте может быть размещен комментарий - произвольный текст ограниченный парой символов, спереди / *, сзади */ (так же как в языке С).
Синтаксис:
/ * т е к с т . . .*/
Текст комментария может занимать несколько строк.
Многие СУБД допускают удобный способ комментирования при помощи пары символов ‘--’, текст от этой пары до конца строки будет считаться комментарием.
Простые варианты поиска данных
Рассмотрим вначале наиболее простые варианты использования оператора. Мы будем отыскивать данные каждый раз только в одной из таблиц базы данных.
Сразу после ключевого слова SELECT указывается список выбора — список столбцов таблицы, литералов, констант или выражений, которые попадут в результирующий набор данных.
В самом простом варианте оператора SELECT можно указать вместо списка отображаемых столбцов символ *, например:[1]
SELECT * FROM PERSON
Этот оператор возвращает все столбцы всех строк таблицы PERSON
Листинг 1. Выбор всех столбцов всех строк таблицы людей
PR_CODE
PR_NAME
PR_NAME2
PR_NAME3
PR_BIRTHDAY
Зеленина
Надежда
Александровна
11.12.1965
Бычкова
Марина
Валентиновна
01.04.1957
Мельчакова
Оксана
Владимировна
06.07.1978
Бычков
Максим
Владимирович
08.09.1970
Попутько
Павел
Павлович
05.05.1959
Лебедев
Александр
Анатольевич
03.04.1977
Варанкина
Елена
Алевтиновна
01.02.1952
Лядов
Олег
Владимирович
07.06.1964
Вашкарина
Лариса
Вилльевна
05.11.1980
Верхоланцева
Анна
Николаевна
06.10.1991
Алексеев
Юлий
Альбертович
19.09.1974
Следует исключить из списка коды личностей, которые обычному человеку ничего не говорят. Выполним оператор в следующем виде:[2]
SELECT PR_NAME, PR_NAME2,PR_NAME3,PR_BIRTHDAY
FROM PERSON
Мы получим те же записи. Каждая будет содержать фамилию, имя, отчество и дату рождения человека.
Заголовки нам с вами, как проектировщикам таблиц нашей базы данных, понятны. Однако другим людям следует долго объяснять, что это такое. Лучше сразу сформировать заголовки на русском языке. Выполните:[3]
SELECT PR_NAME2 AS"Имя",
PR_NAME3 AS"Отчество",
PR_NAMEAS"Фамилия",
PR_BIRTHDAYAS"Дата рождения"
FROM PERSON
Результат станет более понятным, заголовки содержат правильные тексты.