Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информационное обеспечение систем управления. Построение запросов пр.pdf
Скачиваний:
4
Добавлен:
15.11.2022
Размер:
3.76 Mб
Скачать

бится за один раз такое количество записей, поскольку просмотреть их вы просто физически не сможете, а во-вторых, выборка больших объемов данных на сервере приводит к увеличению сетевого тра­ фика и перегрузке сети.

Необязательное предложение GROUP BY <имя столбца> группирует найденные строки в соответствии со значением указан­ ного столбца.

Необязательное предложение HAVING <условия поиска> оп­ ределяет дополнительные условия поиска для использования в GROUP BY.

Необязательное предложение ORDER BY <список имен> по­ зволяет упорядочить найденные строки, указывая список имен столбцов (здесь опять же можно использовать уточненные имена в виде <имя таблицы>. <имя столбца>), а также направление сор­ тировки для каждого столбца — ключевые слова ASCENDING (по возрастанию) или DESCENDING (по убыванию).

Для разъяснения содержания запроса в любом месте может быть размещен комментарий - произвольный текст, ограниченный парой символов, спереди / *, сзади */ (так же как в языке С).

Синтаксис:

 

/ ♦ т е к с т

.*/

Текст комментария может занимать несколько строк.

Многие СУБД допускают удобный способ комментирования при помощи пары символов «—», текст от этой пары до конца стро­ ки будет считаться комментарием.

3. Простые варианты поиска данных

Рассмотрим вначале наиболее простые варианты использова­ ния оператора. Мы будем отыскивать данные каждый раз только в одной из таблиц базы данных.

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

В самом простом варианте оператора SELECT можно указать вместо списка отображаемых столбцов символ *, например:1

SELECT * FROM PERSON

Этот оператор возвращает все столбцы всех строк таблицы

PE R S O N .

 

 

 

 

Листинг 1

Выбор всех столбцов всех строк таблицы людей

PR_CODE

PRJNAME

PRJ4AME2

PRJNAME3

PR_BIRTHDAY

1

Зеленина

Надежда

Александровна

11.12.1965

2

Бычкопа

Марина

Валентиновна

01.04.1957

3

Мельчакова

Оксана

Владимировна

06.07.1978

4

Бычков

Максим

Владимирович

08.09.1970

5

Попутько

Павел

Павлович

05.05.1959

6

Лебедев

Александр

Анатольевич

03.04.1977

7

Баранкина

Елена

Алевтиновна

01.02.1952

8

Лядов

Олег

Владимирович

07.06.1964

9

Вашкарина

Лариса

Вилльевна

05.11.1980

10

Верхоланцева

Анна

Николаевна

06.10.1991

11

Алексеев

Юлий

Альбертович

19.09.1974

Следует исключить из списка коды личностей, которые обыч­ ному человеку ничего не говорят. Выполним оператор в следующем виде2:

SELECT PR_NAME, PR_NAME2, PR_NAME3, PR_BIRTHDAY FROM PERSON

Мы получим те же записи. Каждая будет содержать фамилию, имя, отчество и дату рождения человека.

Заголовки нам с вами, как проектировщикам таблиц нашей ба­ зы данных, понятны. Однако другим людям следует долго объяс­ нять, что это такое. Лучше сразу сформировать заголовки на рус­ ском языке. Выполните3:

SELECT PRJNAME2

AS "Имя",

PRJNAME3

AS "Отчество",

PR_NAME

AS "Фамилия",

PR_BIRTHDAYAS "Дата рождения"

FROM PERSON

Результат станет более понятным, заголовки содержат пра вильные тексты.

 

 

 

Листинг 1

 

Добавление осмысленных заголовков

Имя

Отчество

Фамилия

Дата роодения

11адежда

Александровна

Зеленина

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

Юлий

1Альбертович

Алексеев

19.09.1974

Замечание. Обратите, пожалуйста, внимание на вид, в кото­ ром представляются операторы SELECT в этой главе. Вместо то­ го чтобы даже короткие операторы размещать на одной строке, старайтесь отдельные группы переносить на новые строки. SQL позволяют для ввода любого оператора использовать произвольное количество строк.

В списке выбора могут присутствовать не только имена столб­

цов, но и константы или литералы (строки). Выполните следующий оператор4:

SELECT PR_NAME2

AS "Имя",

PR_NAME3

AS "Отчество",

'Фамилия:'

AS "Текст",

PR NAME

AS "Фамилия",

FROM PER7 ™ RTHMYAS "ДЗта Рожденм’

слх,кахРХ Х ь ^ Г „ ™ Г Г “ к Г - ’' T UбУДЭТ B° ВСеХ!

И присвоили заголовок «Текст».

«Фамилия». Ему мы

Добавление в результат выбора текстовой строки «Фамилия:»

Имя

Отчество

Текст

Фамилия

Дата рождения

Надежда

Александровна

Фамилия:

Зеленина

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

Как это будет использоваться, покажем позднее, при исследо­ вании ключевого слова UNION.

В вывод может попадать не только столбец, но и результат ка­ ких-либо действий над столбцами: для примера, вместо имени, от­ чества и фамилии мы можем вывести один столбец, содержащий результат объединения имени, отчества и фамилии из таблицы PERSON, добавив между ними пробелы (соединение нескольких строк осуществляем при помощи операции конкатенации —II)5:

SELECT PR_NAME2

|| " || PR NAME3 II "

II PR NAME

AS "ФИО",

~

-

PR_BIRTHDAYAS "Дата рождения"

FROM PERSON

В результате выполнения запроса получим

Список людей с использованием соединения имени, отчества и фамилии при помощи операции конкатенации

ФИО

Дата рождения

Надежда Александровна Зеленина

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

3.1. Упорядочение результата запроса. Предложение ORDER BY

По определению результат отображения никак не упорядочива­ ется. Мы можем видеть, что в нашем случае он соответствует по­ рядку помещения записей в базу данных (это видно по возрастанию значения первичного ключа, кода человека), однако никакого по­ рядка реляционные базы данных не гарантируют.

Чтобы явно задать нужный нам порядок, в оператор следует ввести предложение ORDER BY. В предложении перечисляются имена столбцов таблицы или порядковые номера столбцов, указан­ ных в списке выбора. По умолчанию сортировка выполняется порядке, как если бы вы задали ключевое слово ENDING* однако для различных столбцов в одном и том же

чевое °^ювс»И DESCF^nh^r^^n " убывающий порадок, задав клю-

ESCENDING. Для ключевого слова ASCENDING

допустимо сокращение ASC, для DESCENDING — DESC

OR^ER&nRYOI/ < ER BY ИМебТ следУющий синтаксис:

l<ASC[ENDINe]\DbUC[ENDM3]]}Ua> 1 <НОШР столб«а>;

Помимо имен столбцов в этом предложении мы можем указать и порядковые номера столбцов в списке выбора. Столбцы в списке нумеруются начиная с единицы. Чтобы можно было использовать номера столбцов, вы должны явно перечислить столбцы в списке выбора. Вариант * в этом случае недопустим.

Что интересно, столбцы, по которым выполняется сортировка данных, вовсе не обязательно должны быть включены в состав вы­ бираемых столбцов, хотя и не совсем понятно, кому это может по­ надобиться. Такую сортировку допускают делать далеко не все ре­ ляционные базы данных.

Рассмотрим примеры с нашей таблицей людей. Введите и вы­ полните6:

SELECT PR_NAME2

AS "Имя",

PR_NAME3

AS "Отчество",

'Фамилия:'

AS "Текст",

PR_NAME AS "Фамилия",

PR_BIRTHDAYAS "Дата рождения"

FROM PERSON

ORDER PRJNAME, PRJNAME2;

Вначале выполняется упорядочение списка по столбцу |PRJNAME (фамилия), а затем внутри списка - еще и по PR NAME2 (имя). Второй уровень сортировки называется вложенной (nested) сортировкой. Количество уровней вложенности не ограничивается.

В нашем примере мы получили список, отсортированный по фамилиям в возрастающем порядке. Если несколько человек имеют одну и ту же фамилию, то строки упорядочиваются и по именам.. Если нужно, мы можем добавить еще один уровень сортировки - по отчествам.

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

Зададим упорядочение не в виде имен столбцов, а указанием их номеров. Напомню, что столбцы в списке выбора нумеруются начиная с единицы, а в самом списке выбора нельзя указывать символ *7

SELECT PR_NAME2

AS "Имя",

PRJNAME3

AS "Отчество",

'Фамилия:'

AS "Текст",

PRJNAME

AS "Фамилия",

PRJBIRTHDA Y AS "Дата рождения"

FROM PERSON

ORDER BY PR_BIRTHDAY, PRJNAME

Получим следующий список, упорядоченный по датам рож­ дения.

 

 

 

Листинг 5

Список личностей, упорядоченный по дате рождения

Имя

Отчество

Фамилия

Дата рождения

Татьяна

Валерьевна

Веремчук

23.08.1948

Татьяна

Николаевна

Некрасова

04.12.1949

Елена

Алевтиновна

Варанкина

01.02.1952

Татьяна

Владимировна

Хемлих

25.10.1953

Татьяна

Сергеевна

Арсентьева

10.09.1954

Татьяна

Анатольевна

Баландина

11.01.1955

Кирил

Владимирович

Бешляга

07.01.1956

Марина

Валентиновна

Бычкова

01.04.1957

Людмила

Александровна

Блинова

28.08.1957

Елена

Александровна

Беляева

30.04.1958

Павел

Павлович

Попутько

05.05.1959

Татьяна

Викторовна

Владысик

19.10.1960

Светлана

Александровна

Ветошкина

23.12.1960

Татьяна

Александровна

Звездина

01.10.1961

Татьяна

Фёдоровна

Леушина

04.05.1963

Олег

Владимирович

Лядов

07.06.1964

Оксана

Васильевна

Власова

11.02.1965

Надежда

Александровна

Зеленина

11.12.1965

Татьяна

Евгеньевна

Беспалова

21.12.1965

Татьяна

Александровна

Соснина

05.12.1968

Татьяна

Александровна

Мазеина

06.04.1969

Татьяна

Геннадьевна

Зырянова

22.01.1970

Максим

Владимирович

Бычков

08.09.1970