Главная Программы Учебное пособие Практикум Дополнительно
    Введение
  Глава 1
  Глава 2
  Глава 3
  Глава 4
  Глава 5
  Глава 6
  Глава 7
  Глава 8
  Задания
  Литература
  Приложение 1
  Приложение 2
  Приложение 3

Практикум

Глава 4. Выборка данных из базы данных

 

4.1. Команда запроса данных

Команда SELECT выбирает информацию из базы данных. Основной блок запроса:

SELECT             [DISTINCT] {*, столбец [псевдоним], групповая_функция}

FROM                таблица

[WHERE            условие]

[GROUP BY                выражение_группирования]

[HAVING           условие_группы]

[ORDER BY                {столбец, выражение} [ASC|DESC]];

где

SELECT Список, включающий, по крайней мере, один столбец.
DISTINCT Подавляет выборку дубликатов.
* Выбирает все столбцы.
столбец Выбирает заданный столбец.
псевдоним Дает выбранным столбцам другие заголовки.
таблица Указывает таблицу, содержащую столбцы.
   
WHERE Ограничивает запрос строками, удовлетворяющими заданному условию.
условие Состоит из имен столбцов, выражений, констант и операторов сравнения.
   
GROUP BY Разбивает строки на группы.
   
выражение_ руппирования Определяет столбец, по значениям которого группируются строки.
   
HAVING Вывод конкретных групп.
   
условие_группы Задает условие отбора групп для вывода.
   
ORDER BY Задает порядок вывода строк.
   
ASC Сортирует строки в порядке возрастания; используется по умолчанию.
   
DESC Сортирует строки в порядке убывания.

 

4.2. Простой запрос

В простейшей форме команда SELECT должна включать следующее:

SELECT     [DISTINCT] {*, столбец [псевдоним]}

FROM                 таблица;

 

Предложение SELECT – задает нужные столбцы. Звездочка (*) означает выбор всех столбцов таблицы.  Предложение FROM указывает, в какой таблице находятся столбцы, заданные в предложении SELECT.

Пример: Вывод содержимого всех столбцов и строк таблицы S_DEPT:

 

Результат:

ID

NAME

REGION_ID

10

Finance

1

31

Sales

1

32

Sales

2

33

Sales

3

34

Sales

4

35

Sales

5

41

Operations

1

42

Operations

2

43

Operations

3

44

Operations

4

45

Operations

5

50

Administration

1

 

Выборка заданных столбцов

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

Пример: Вывод всех номеров отделов, фамилий служащих и идентификационных номеров их менеджеров из таблицы S_EMP.

 

 

DEPT_ID LAST_NAME MANAGER_ID
50 Velasquez  
41 Ngao 1
31 Nagayama 1
10 Quick-To-See 1
50 Ropeburn 1
41 Urguhart 2
42 Menchu 2
43 Biri 2
44 catchpole 2
   

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

 

Формат заголовков столбцов, используемый по умолчанию

Заголовки столбцов и данные, состоящие из символов и даты, выравниваются в столбце по левому краю, а числа – по правому.  В заголовках столбцов, содержащих символы и даты, лишние символы могут быть отброшены, но числовые заголовки отображаются полностью.  По умолчанию заголовки столбцов выводятся в символах верхнего регистра. На выводе можно заменить заголовок столбца псевдонимом.

 

Псевдонимы столбцов

При выводе результатов запроса в среде SQL*Plus в качестве заголовков столбцов обычно используются их имена. Такие заголовки часто трудны для понимания и даже бессмысленны. Изменить заголовок столбца можно с помощью его псевдонима. Псевдоним указывается в списке команды SELECT сразу за именем столбца и отделяется от него пробелом. По умолчанию такие альтернативные заголовки выводятся в символах верхнего регистра и не могут содержать пробелов, если псевдоним не заключен в кавычки (" ").

Пример.  Вывод фамилии, заработной платы и суммы компенсационных выплат за год для каждого служащего. Объем выплат за год вычисляется путем прибавления к заработной плате ежемесячной премии в размере 100 долларов и умножения суммы на 12. Назвать столбец ANNUAL_SALARY.

 

 

Замечание. Для соответствия стандарту ANSI SQL-92 перед псевдонимом может находиться ключевое слово AS.

 

Псевдонимы столбцов в кавычках

Псевдоним, который содержит пробелы или специальные символы (например, # или _) или в котором различаются символы верхнего и нижнего регистров, должен быть заключен в кавычки (" ").

 

 

Пример. Вывод фамилии, заработной платы, должности и вычисленных комиссионных.

 

 

Предотвращение выборки дубликатов строк

При отсутствии указаний с вашей стороны SQL*Plus включает в результаты запросов все строки, не изымая дубликаты.  Ключевое слово DISTINCT, следующее сразу за словом SELECT, исключает дублирование строк.

Пример. Вывод всех названий отделов из таблицы S_DEPT.

 

 

NAME

Finance

Sales

Sales

Sales

Sales

Sales

Operations

12 rows selected

 

Пример.  Вывод всех неповторяющихся названий отделов из таблицы S_DEPT.

 

 

NAME

Administration

Finance

Sales

Operations

 

После квалификатора DISTINCT можно указать несколько столбцов.  В этом случае он будет относиться ко всем выбранным столбцам.

Пример.  Вывод всех возможных комбинаций должностей и номеров отделов.

 

Для закрепления материала рекомендуется выполнить  Практическое задание 1.

 

4.3. Сортировка строк, возвращаемых запросом

Порядок строк, возвращаемых в результате запроса, не определен.  Отсортировать строки можно с помощью предложения ORDER BY.  Для сортировки можно задать выражение или позицию столбца в списке предложения SELECT.

Пример. Вывод из таблицы S_EMP фамилии, номера отдела и даты начала работы каждого служащего. Результат сортируется по фамилиям.

 

 

LAST_NAME DEPT_ID START_DATE
biri 43 07-APR-90
Catchpole 44 09-FEB-92
Chang 44 30-NOV-90
Dancs 45 17-MAR-91
Dumas 35 09-OCT-91
Giljum 32 18-JAN-92
Havel 45 27-FEB-91

 

По умолчанию строки сортируются в порядке возрастания:

  • Вывод числовых значений производится от меньших к большим – например, 1 – 999.
  • Вывод дат начинается с более ранних – например, 01-ЯНВ-92 предшествует 01-ЯНВ-95.
  • Вывод символьных значений производится в алфавитном порядке –например, от А до Z.
  • Неопределенные значения при сортировке по возрастанию выводятся последними, а при сортировке по убыванию – первыми.

Порядок сортировки, принятый по умолчанию, меняется на противоположный с помощью слова DESC после имени столбца в предложении ORDER BY.

Пример. Вывод из таблицы s_emp фамилии, номера отдела и даты найма каждого служащего. Результат сортируется таким образом, чтобы служащие, нанятые последними, возглавляли список.

 

 

LAST_NAME

DEPT_ID

START_DATE

 

 

Urquhart

41

18-JAN-91

Chang

44

30-NOV-90

Patel

34

17-OCT-90

Menchu

42

14-MAY-90

 

 

В предложении ORDER BY можно указать псевдоним столбца.

Еще один способ сортировки результатов запроса – это сортировка по позиции. Он особенно полезен при сортировке по длинному выражению.  Вместо повторного ввода выражения можно указать его позицию в списке SELECT.

 

 

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

Пример. Вывод фамилии, номера отдела и заработной платы всех служащих. Результат сортируется по номерам отделов, а внутри отделов – в порядке убывания заработной платы.

 

 

LAST_NAME

DEPT_ID

SALARY

Quick-To-See

10

1450

Nagayama

31

1400

Magee

31

1400

Giljum

32

1490

Sedeghi

33

1515

Nguyen

34

1525

Patel

34

795

 

 

 

4.4. Ограничение количества выбираемых строк

Ограничить набор строк, возвращаемых в результате запроса, можно с помощью предложения WHERE. Предложение WHERE следует сразу за предложением FROM и задает условие, которое должно быть выполнено.  Условие состоит из имен столбцов, выражений, констант и операторов сравнения.

Пример. Запрос для вывода имен, фамилий и должностей, служащих с фамилией «Magee».

 

 

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

 

Оператор BETWEEN

Оператор BETWEEN используется для проверки вхождения значения в интервал значений (включая границы интервала). Нижняя граница должна быть указана первой.

Пример. Вывод имени, фамилии и даты найма служащих, нанятых между 9 мая и 17 июня 1991 года включительно.

 

 

Оператор IN

Для проверки принадлежности значений к заданному списку используется оператор IN.

Пример. Вывод номера, названия отдела и номера региона для отделов в регионах 1 и 3.

 

 

Оператор LIKE

Используется для поиска строковых значений с помощью метасимволов (wildcards). Условия для поиска могут содержать символьные литералы или числа:

  • ‘%’ означает отсутствие или некоторое количество символов;
  • ‘_’ означает один символ.

Пример. Вывод фамилий служащих, начинающихся на букву “М”.

 

 

Оператор LIKE может использоваться в качестве быстрого эквивалента некоторых операций BETWEEN.

Пример. Вывод фамилий и дат найма для служащих, принятых на работу в 1991 году.

 

 

В критерии поиска символы ‘%’ и ‘_’ можно сочетать с литералами в любой комбинации.

Пример. Вывод фамилий, второй буквой которых является “а”

 

 

Параметр ESCAPE

Поиск символов ‘%’ и ‘_’ требует использования идентификатора ESCAPE (отменяющего специальное значение метасимволов).

Пример. Вывод названий фирм, содержащих сочетание “X_Y”.

 

 

Оператор IS NULL

Неопределенные значения проверяются с помощью оператора IS NULL.  Пользоваться оператором “=“ для сравнения с неопределенными значениями не следует, так как неопределенное значение не может быть равно или не равно какому-то другому.

Пример. Вывод номера, наименования и кредитного рейтинга всех клиентов, не имеющих торгового представителя.

 

 

Для закрепления материала рекомендуется выполнить Практическое занятие 2.

 

4.5. Выборка по нескольким условиям

Использование сложных критериев для выборки возможно при сочетании условий с помощью операторов AND и OR.

Примечание.  Оператор AND требует выполнения обоих условий.

Пример. Вывод фамилии, заработной платы, номера отдела и должности сотрудников, работающих в отделе с номером 41 и имеющих должность «Stock Clerk».

 

 

Примечание.  Оператор OR требует выполнения хотя бы одного из условий.

 

Пример. Вывод фамилии, заработной платы и номера отдела для всех служащих, имеющих должность «Stock Clerk» или являющихся сотрудниками отдела 41.

 

 

Пример. Вывод информации о служащих отдела 44 с зарплатой 1000 и более, а также о всех служащих отдела 42.

 

 

Пример.  Вывод фамилии, заработной платы и номера отдела для всех служащих отделов 44 и 42, зарплата которых составляет 1000 и более.

 

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

 

 

Пример. Вывод имени и фамилии всех служащих с фамилией PATEL.  Фамилия выводится в том виде, как она хранится в базе данных.

 

 

Пример. Вывод наименования и страны всех клиентов с хорошим кредитным рейтингом.  Наименование и страна должны быть соединены.

 

 

Пример. Вывод всех наименований товаров, три первых символа которых равны “Ace”, и длины этих наименований.

 

 

Примечание. Функция SYSDATE возвращает текущую дату и время.  DUAL - это фиктивная таблица, используемая для просмотра SYSDATE.

Пример. Вывод фамилии и количества отработанных недель для служащих отдела 43.

 

 

Пример. Вывод номера служащего, даты начала работы, количества отработанных месяцев и даты полугодовой аттестации для всех служащих, работающих менее 48 месяцев.

 

 

Пример. Вывод номера и даты каждого заказа, принятого торговым представителем номера 11. Вывод дат должен производиться в виде 08/92.

 

 

Пример. Вывод сообщения о выполнении заказа с указанным номером для каждого заказа, сделанного 21 сентября 1992 года. Сообщение должно содержать сумму заказа.

 

 

Пример. Вывод фамилии руководителя фирмы, у которого нет менеджера. Выходная строка должна указывать, что для этой фамилии номера менеджера нет.

 

 

Пример. Вывод даты следующей пятницы, отстоящей на шесть месяцев от даты заказа. Выходная дата должна иметь следующий вид: Friday, March 12 th, 1993

 

Для закрепления материала рекомендуется выполнить Практическое занятие 3.

 

Далее