Лекции и практики (1). Курс лекций и материалы для практических занятий
Скачать 1.01 Mb.
|
Извлечение данных из таблицИзвлечение данных из таблиц БД выполняется с помощью команды SELECT (селекция). Эта команда не изменяет данные в БД. Результатом вы- полнения команды SELECT является временная таблица, которая помещается в курсор(специальную область памяти СУБД) и обычно выводится на экран. Синтаксис команды SELECT Упрощённый синтаксис этой команды: SELECT [ ALL | DISTINCT ] { * | <список выбора> } FROM {<имя таблицы> [<алиас>] }.,.. [ WHERE <условие>] [ GROUP BY {<имя поля> | <выражение>}.,.. ] [ HAVING <условие> ] [ UNION [ALL] SELECT …] [ ORDER BY {<имя поля> | <целое> [ ASC| DESC ] }.,..] ; Расшифровка элементов описания приведена в табл. 3.2. Порядок кон- струкций в команде SELECT не может быть изменён. Таблица 3.2. Элементы команды SELECT
Список выбора (вывода) определяет схему результата (временной табли- цы). Список выбора может быть модифицирован одним из двух ключевых слов: DISTINCT – предикат удаления из результирующей таблицы повторов строк. ALL – предикат, обратный к DISTINCT. Это значение используется по умолча- нию, его можно не указывать. Рассмотрим основные предложения (фразы) команды SELECT: SELECT – после этого ключевого слова указывается список выбора – список выражений, которые будут образовывать результирующую таблицу. Вы- ражению можно сопоставить временный синоним (алиас), который будет названием поля результирующей таблицы, например: (sal*0.87+bonus) AS salary Если надо вывести все поля из тех таблиц, к которым обращается данный запрос, можно указать символ *. В этом случае сначала будут выведены поля таблицы, стоящей первой в предложении FROM, затем – второй и т.д. Поля, относящиеся к одной таблице, будут выводиться в том порядке, в каком они были указаны при создании таблицы. FROM – в этой части указывается имя таблицы (имена таблиц), из которой бу- дут извлекаться данные. WHERE – эта часть содержит условия выбора отдельных записей. GROUP BY – объединяет в одну группу все записи с одинаковым значением указанного поля (комбинации полей). Каждой такой группе в результи- рующей таблице соответствует одна запись. HAVING – позволяет указать условия выбора для групп записей. Порядок выполнения операции SELECT такой: Выбор из указанной во фразе FROM таблицы тех записей, которые удовле- творяют условию отбора (WHERE). Группировка полученных записей (GROUP BY). Выбор тех групп, которые удовлетворяют условию отбора групп (HAVING). Сортировка записей в указанном порядке (ORDER BY). Извлечение из записей полей, заданных в списке выбора, и формирование результирующей таблицы. Если во фразе FROM указаны две и более таблицы, то эта последовательность действий выполняется для декартова произведения указанных таблиц. ORDER BY – упорядочивает результирующие строки по значению одного или нескольких полей: ASC – по возрастанию, DESC – по убыванию. Отношения для примеров приведены в таблицах 3.3-3.5. Таблица 3.3. Отношение "Сотрудники" (Emp)
Таблица 3.4. Отношение "Отделы" (Depart) Таблица 3.5.Отношение "Дети"(Children) Примеры: Вывести все записи (строки) из таблицы "Отделы": SELECT * FROM depart;
Вывести список сотрудников с указанием должности и зарплаты за вычетом подоходного налога, упорядочить по отделам и фамилиям: SELECT depno, name, post, salary*0.87 AS sal FROM emp ORDER BY depno, name;
Вывести список должностей с окладом в порядке убывания оклада: SELECT DISTINCT post, salary FROM emp ORDER BY salary DESC;
Операторы и предикаты Расширение возможностей команд языка SQL достигается за счёт приме- нения различных операторов, предикатов и функций. Операторы: символьные: || – конкатенация строк; арифметические: +, –, *, /; сравнения: =, >, <, >=, <=, <>; логические: AND, OR, NOT. Примеры: Составить список сотрудников второго и третьего отдела, имеющих зарпла- ту выше 40000 рублей после уплаты подоходного налога 13%: SELECT depno, name, salary*0.87 AS sal FROM emp WHERE salary*0.87>40000 AND (depno=2 OR depno=3) ORDER BY name;
Составить список сотрудников первого отдела с указанием должности: SELECT post || ' ' || name AS ename FROM emp WHERE depno=1 ORDER BY 1 DESC;
Обратите внимание на добавление пробела между полями: || ' ' ||. Предикаты,используемыевкомандах: |