Сделай Сам Свою Работу на 5

Оператор SELECT. Выбор данных из двух и более таблиц. Подзапросы. Пример.





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

Она состоит из следующих предложений:

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

FROM {таблица | (подзапрос)}

[WHERE условия выборки для отдельных строк] [GROUP BY столбцы]

[HAVING критерий выборки для групп] [ORDER BY {столбец [ASC | DESC], …} ]

Фраза FROM определяет одну или несколько таблиц или подзапросов, используемых для извлечения данных.

В простейшем случае оператор SELECT состоит из:

- предложения SELECT с указанием столбцов, которые должны быть в таблице результатов

- предложения FROM, задающие имена таблиц, к которым делается запрос.

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



Оператор SELECT определяет поля (столбцы), которые будут входить в результат выполнения запроса. В списке они разделяются запятыми и приводятся в такой очередности, в какой должны быть представлены в результате запроса. Если используется имя поля, содержащее пробелы или разделители, его следует заключить в квадратные скобки. Символом * можно выбрать все поля, а вместо имени поля применить выражение его заменяющее.

Выборка данных из двух и более таблиц

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

Декартово произведение таблиц

Соединение таблиц – частный случай декартового произведения. Декартово произведение таблиц – таблица, состоящая из всех возможных пар строк таблиц.



Все столбцы:

SELECT * FROM faculty, department

Выбор отдельных столбцов:

SELECT faculty.name, faculty.facPK, department.facFK, department.name

FROM faculty, department;

Соединение таблиц по равенству

Соединение по равенству, в отличие от декартового произведения, позволяет соединить только те пары строк, которые действительно взаимосвязаны друг с другом.

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

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

Вывод столбцов с условием отбора

Вариант, когда отбираются строки одной таблицы, а условие задается с участием другой

Запрос: вывести названия кафедр факультета информатики

SELECT department.name as “кафедры факультета информатики”

FROM faculty, department

WHERE faculty.facPK=department.facFK AND lower(faculty.name)=’информатика’;

Запросы по трем и более таблицам

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

Запрос: вывести названия тех кафедр факультета информатики, на которых работают профессора

SELECT DISTINCT department.name

FROM faculty, department, teacher

WHERE faculty.facPK=department.facFK AND

department.depPK=teacher.depFK AND

lower(faculty.name)=”информатика” AND

lower(teacher.post)=”профессор”;

Соединение таблиц по неравенству

Запрос: вывести названия кафедр, которые не расположены в одном корпусе с деканатом факультета информатики

SELECT DISTINCT d.name as “названия кафедр”

FROM faculty f, department d

WHERE d.building <> f.building AND lower(f.name)=”информатика”;

Самосоединение таблицы

Чтобы произвести соединение таблицы со своей копией, необходимо указать во фразе FROM имя одной и той же таблицы два или большее количество раз, а во фразе WHERE - условие их соединения.



Различным вхождениям одной и той же таблицы приписываются различные синонимы, и именно по этим синонимам производится обращение к столбцам.

Внешние соединения таблиц

Внешние соединения возвращают строки, которые удовлетворяют условию соединения, а также те строки одной из таблиц, для которых в другой не нашлось удовлетворяющих условию соединения строк. В oracle синтаксис внешнего соединения имеет следующие два вида:

таблица.столбец оператор_сравнения таблица.столбец(+)

таблица.столбец(+) оператор_сравнения таблица.столбец

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

Запрос: вывести фамилии всех преподавателей с указанием их кафедры, если она есть

SELECT d.name as “кафедра”, t.name as “преподаватель”

FROM department d, teacher t

WHERE d.depPK(+)=t.depFK;

Соединения с использованием фразы FROM

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

Уточненное соединение – явное задание условия соединения.

Таблица [INNER | {FULL | LEFT | RIGHT} [OUTER]] JOIN

таблица {ON условие | USING (список_столбцов)}

Естественное соединение выполняется по равенству значений всех пар одноименных столбцов таблиц и не требует задания каких-либо условий.

Таблица NATURAL [INNER | {FULL | LEFT | RIGHT} [OUTER]]

JOIN таблица

Перекрестное соединение эквивалентно декартовому произведению таблиц

Таблица CROSS JOIN таблица

Внутреннее соединение

В операторе JOIN внутреннее соединение указывается ключевым словом INNER (когда две таблицы, можно не писать). Если не совпадают имена столбцов, участвующих во внутреннем соединении, или соединение производится не по равенству значений, следует использовать уточненное соединение с фразой ON.

Запрос: вывести названия факультетов и их кафедр, если они имеют одинаковый фонд финансирования.

SELECT faculty.name, department.name

FROM faculty JOIN department ON faculty.facPK=department.facFK AND faculty.fund=department.fund;

Внешнее соединение

Запрос: вывести все факультеты и кафедры с указанием пар факультет/кафедра, имеющих одинаковые фонды финансирования и расположенные в одном корпусе

SELECT faculty.name, department.name

FROM faculty FULL JOIN department ON facuty.fund=department.fund AND faculty.building=department.building;

SELECT faculty.name, department.name

FROM faculty FULL JOIN department USING (fund, building);

Соединение трех и более таблиц

Порядок соединений уточняется круглыми скобками.

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

Подзапросы

Вложенный запрос – это заключенный в круглые скобки запрос, присутствующий во фразах WHERE, HAVING, FROM и т.д. Вложенный запрос еще называют подзапросом или дочерним запросом, а запрос, внешний к вложенному, наз. родительским или внешним.

Подзапросы разделяются на два вида – простые и связанные (коррелированные)

Простые подзапросы

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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.