|
Программирование >> Sql: полное руководство
Тот же запрос можно сформулировать и другими способами. Например, можно написать одноуровневый запрос с операцией join, соединяющей таблицы customers и orders, и группировкой результатов. Как показывает этот пример, одним из преимуществ составных запросов в SQL2 является то, что у пользователя обычно есть несколько способов получения одного и того же результата. Разработчики стандарта стремились к тому, чтобы язык SQL позволял пользователю выразить свой запрос совершенно естественно, не ограничивая его жесткими рамками раз и навсегда определенных конструкций. СУБД должна уметь проанализировать запрос пользователя, разделить его на базовые блоки и определить наиболее эффективный способ его выполнения. Этот внутренний план выполнения запроса может сильно отличаться от той последовательности действий, которая соответствует форме запроса. Но в этом вся и прелесть: пользователю (или программисту) нужно только сообщить СУБД, что именно он хочет получить, а как это сделать, причем сделать наиболее эффективно, - это уже ее забота. SQL-запросы на выборку - заключительное резюме На этом мы заканчиваем изучение SQL-запросов на выборку и инструкции select, начатое в главе 6. Как показали четыре последние главы, предложения инструкции select предоставляют программисту мощный и в то же время гибкий набор средств для получения информации из базы данных. Кяждое предложение при выборке данных играет особую роль. В предложении from указываются исходные таблицы, из которых данные извлекаются в таблицу результатов запроса. Каждое имя столбца в инструкции select должно однозначно определять столбец одной из этих таблиц или представлять собой ссылку на столбец исходной таблицы внешнего запроса. Предложение where, если оно имеется, выбирает из исходных таблиц отдельные комбинации строк, которые включаются в таблицу результатов запроса. Подчиненные запросы в предложении where выполняются для каждой отдельной строки. Предложение group by, если оно имеется, группирует отдельные строки, отобранные предложением where, в группы строк. Предложение having, если оно имеется, отбирает группы строк, которые включаются в таблицу результатов запроса. Подчиненные запросы в предложении having выполняются для каждой группы строк. Предложение select определяет, какие именно столбцьг данных будет содержать окончательная таблица результатов запроса. Предикат distinct, если он имеется, исключает из таблицы результатов запроса повторяющиеся строки. Операция union, если она имеется, объединяет результаты, полученные отдельными инструкциями select, в одну таблицу результатов запроса. Предложение order by, если оно имеется, сортирует окончательную таблицу результатов запроса по одному или нескольким столбцам. в табл. 9.1 приведен окончательный вариант правил выполнения SQL-запроса на выборку с учетом подчиненных запросов. Эти правила полностью определяют результаты запроса на выборку, генерируемые инструкцией select. пнения SQL-3aiipoca на выборку (окснчс. Таблица результатов запроса на выборку генерируется следующим образом: 1 Если запрос представляет собой запрос на объединение (union) инструкций select, для каждой из этих инструкций выполнить действия 2-7 и получить отдельную таблицу результатов. 2 Сформировать произведение таблиц, перечисленных в предложении from. Если в предложении from указана только одна таблица, то произведением будет она сама, 3. Если имеется предложение where, применить заданное в нем условие отбора к кажцой строке таблицы произведения и оставить в ней только те строки, для которых это условие выполняется, т.е. имеет значение true; строки, для которых условие отбора имеет значение false или null, - отбросить. Если в предложении where содержится подчиненный запрос, то он вьшолняется для каждой проверяемой строки. 4. Если имеется предложение group by, разделить строки, оставшиеся в таблице произведения, на группы таким образом, чтобы в каждой группе строки имели одинаковые значения во всех столбцах группировки. 5. Если имеется предложение having, применить заданное в нем условие отбора к каждой группе строк и оставить в таблице произведения только те группы, для которых это условие выполняется, т.е. имеет значение true; группы, для которых условие отбора имеет значение false или null, - отбросить. Если в предложении having содержится подчиненный запрос, то он вьшолняется для каждой проверяемой группы строк. 6. Для каждой из оставшихся строк (или для каждой группы строк) вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса. При любой ссылке на столбец берется значение столбца для текущей строки (или группы строк). В качестве аргумента статистической функции используются значения столбца из всех строк, входящих в группу, если указано предложение group by; в противном случае используются значения столбца из всех строк таблицы результатов 7. Если указан предикат distinct, удалить из таблицы результатов запроса все повторяющиеся строки. 8. Если запрос является запросом на объединение (union) инструкций select, объединить результаты выполнения отдельных инструкций в одну таблицу результатов запроса. Удалить из нее повторяющиеся строки, если не указан предикат all 9. Если имеется предложение order by, отсортировать результаты запроса. Изменение данных SQL позволяет не только извлекать данные, находящиеся в базе данных, но и изменять их. Следующие три главы посвящены вопросам, связанным с внесением изменений в базу данных. В главе 10 рассматриваются инструкции SQL, с помощью которых можно добавлять и удалять данные, а также обновлять данные, уже находящиеся в базе. В главе 11 рассказывается о том, как сохранять целостность данных при их изменении. В главе 12 описываются средства обработки транзакций в SQL, позволяющие нескольким пользователям одновременно изменять содержимое одной базы данных.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |