Добавить в избранное   Сделать стартовой   Главная   E-mail   Форум   Мой блог 
   
Cертификации

Errors

ETL

FAQ (по темам)

GIS

Web

wiki

Администрирование

Безопасность

Книги
Oracle, ...

Новости

ОС

Программирование

Проектирование БД

Производительность

Скачать

Советы

Тестирование

Установка

FAQ - по базам данных
FAQ - по базам данных
Установка СУБД
Oracle
Sybase
MySQL
PostgreSQL
MS SQL Server
Interbase, Firebird
Другие DB
Администрирование
Oracle
MySQL
Sybase
PostgreSQL
MS SQL Server
Interbase, Firebird
IBM DB2
Другие DB
Проектирование БД
Статьи
ETL
Теория БД
ErWin
Designer 2000
PowerDesigner
Хранилища данных
CASE средства
OLAP
Бизнес - анализ (BI)
Производительность
Oracle
MSSQL
Interbase, Firebird
IBM DB2
MySQL
PostgreSQL
SYBASE
Безопасность БД
Oracle
MS SQL Server
Инъекция SQL
Программирование
Transact-SQL
PL/SQL
C++
XML
SQL
PostgreSQL
MDX
Java
VBA Excel
Книги по базам
Oracle
Заказ книг
ОС
Установка и настройка
UBUNTU
ОС
Установка и настройка
UBUNTU
FAQ
FAQ - по базам данных
Главная arrow Теория БД arrow ANSI-стандарт SQL-соединений

ANSI-стандарт SQL-соединений

Печать E-mail
Оглавление
ANSI-стандарт SQL-соединений
Страница 2
Страница 3
Страница 4
Страница 5
 
ANSI-стандарт SQL-соединений
 
  Новые возможности SQL-соединений в Oracle9i упрощают обычные соединения и позволяют создавать полные внешние соединения.

Поддержка стандарта SQL/92 для синтаксиса соединений - это одна из множества новых возможностей, которые можно найти в Oracle9i. Эта возможность позволяет легче, чем раньше, создавать переносимые приложения и дает возможность использования полных внешних соединений.


 

Синтаксис соединений до Oracle9i

Исторически база данных Oracle поддерживала синтаксис соединений по стандарту SQL/86. На Листинге 1 показан пример такого соединения.

До Oracle9i внешние соединения поддерживались с помощью соответствующего синтаксиса. На Листинге 2 показано внешнее соединение таблиц COURSE и ENROLLMENT.

Заметьте, что использование "(+)" в операторе WHERE следует за именами столбцов таблицы ENROLLMENT, для того чтобы сделать эту таблицу дополняющей соединение.

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

 

ANSI-стандарт синтаксиса соединений

В ANSI-стандарт синтаксиса SQL-соединений Oracle9i входит несколько новых ключевых слов и операторов, которые позволяют полностью описать соединение только во фразе FROM SELECT-предложения. Рассмотрим задачу соединения таблиц COURSE и ENROLLMENT. При использовании традиционного метода запрос начинается с перечисления двух таблиц во фразе FROM, как показано ниже:

FROM courses c, enrollment e

А при использовании синтаксиса ANSI можно обойтись без запятых и вместо этого явно указать тип требуемого соединения. Для создания внутреннего соединения между таблицами COURSE и ENROLLMENT следует написать:

FROM courses c

INNER JOIN enrollment e

Другие рекомендации Джонатан Генник предоставляет на сайте http://gennick.com

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

SELECT c.course_name, c.period,

e.student_name

FROM course c INNER JOIN enrollment e

ON c.course_name = e.course_name

AND c.period = e.period;

Хотя вы и привыкли к старому синтаксису, в новом синтаксисе есть свои особенности. И его стоит попытаться изучить, так как у него есть некоторые свои достоинства:

* Вся информация о соединении располагается в одном месте. Чтобы отделить условия соединения от ограничений результатов запроса, больше не нужно формировать сложную фразу WHERE.

* Вы не сможете "забыть" описать условия соединения. Если, например, указано, что соединение внешнее, то Oracle9i затребует, чтобы использовался оператор ON - или другой оператор - для явного описания условия соединения. Если требуется полное декартово произведение, то его необходимо задать явно.

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

* Не нужно беспокоиться о пропуске "(+)," невнимание к которому преобразовывает внешнее соединение во внутреннее.

Описание условий соединения

Итак, оператор ON используется для описания условий соединения:

SELECT c.course_name, c.period,

e.student_name

FROM course c INNER JOIN enrollment e

ON c.course_name = e.course_name

AND c.period = e.period;

Приобрести документацию по ANSI-стандарту для SQL можно в webstore.ansi.org

Оператор ON позволяет описать любое булево выражение как условие соединения. Однако большинство соединений связываются по равенству. В соединении по равенству соответствующие столбцы двух таблиц сравниваются на эквивалентность. Поэтому если столбцы, описывающие соединение, названы в двух таблицах одинаково, то можно воспользоваться преимуществом некоторого упрощенного синтаксиса, который также улучшает понимание запроса. Вместо оператора ON для описания выражения можно перечислить столбцы соединения в операторе USING. Вместо того чтобы написать:

ON c.course_name = e.course_name

AND c.period = e.period;

Можно просто использовать оператор USING:

USING (course_name, period);

Оператор USING в этом примере описывает, какие строки двух таблиц должны соединяться, когда в соответствующих столбцах этих таблиц COURSE_NAME и PERIOD появляются одинаковые значения. На Листинге 3 показан пример соединения по равенству с использованием оператора USING. Из этого примера видно, что предложение SELECT короче и проще для понимания. Однако в операторе USING слегка затрагивается семантика запроса. При написании соединения с помощью оператора ON все столбцы обоих таблиц доступны. Таким образом, столбец COURSE_NAME можно выбирать из обоих таблиц:

SELECT C.COURSE_NAME, E.COURSE_NAME



 
 
« Пред.   След. »
Взаимосвязанные статьи
     

Последние добавленные статьи
Поиск
Ссылки
Главная
Скачать
Курсы
Роль АБД (SYSDBA)
Карта сайта
Автостекла
Контакты
Войти на сайт
Популярные статьи
Online - тесты
1Z0-042
Rambler's Top100 МЕТА - Украина. Рейтинг сайтов хостинг от freehost.com.ua

Все права защищены.SYSDBA 2010 | Если у Вас есть хороший материал пришлите его нам.