Скачиваний:
60
Добавлен:
01.04.2014
Размер:
627.71 Кб
Скачать

8.3.3. Получить полную информацию обо всех поставщиках

SELECT * — или "SELECT S.*" (т.е. "*" можно уточнить)

FROM S ;

Результатом будет копия всей таблицы S; звездочка— это сокращение для списка всех имен столбцов в таблице (или таблицах), на которую делается ссылка в инструк­ции from, в порядке слева направо, как эти столбцы определены в таблице (таблицах). Обратите внимание на комментарий в этом примере (комментарии в SQL начинают­ся с двойного дефиса и заканчиваются символом новой строки).

Отметим, что звездочку очень удобно использовать в интерактивных запросах, так как вводится меньше символов. Однако использование звездочки во встроенном SQL (т.е. SQL в прикладных программах) потенциально опасно, так как смысл звездочки (*) может измениться (например, в случае, если из таблицы был убран или в таблицу был добавлен столбец с помощью оператора alter table).

Замечание. Согласно стандарту SQL/92 выражение select * from T (где Т— назва­ние таблицы) можно упростить до table T.

8.3.4. Получить информацию обо всех парах поставщиков и деталей, совмещенных в одном городе

В SQL существует несколько способов выразить этот запрос. Приведем три самых простых:

1. SELECT S.S#, S.SNAME, S.STATUS, S.CITY,

P.P#, P.PNAME, P.COLOR, P.WEIGHT

FROM S, P

WHERE S.CITY = P.CITY ;

2. S JOIN P USING CITY ;

3. S NATURAL JOIN P ;

Результатом в каждом случае будет естественное соединение таблиц S и Р (по городам). Первая формулировка заслуживает более подробного обсуждения; она единствен­ная из трех допустима в SQL, который был первоначально определен (явная операция JOIN была добавлена в SQL/92). Концептуально можно рассматривать реализацию этой версии запроса следующим образом:

• Во-первых, после выполнения инструкции from мы получаем декартово произве­дение S TIMES P.

• Далее, после выполнения where мы получаем выборку из этого произведения, в которой два значения CITY в каждой строке равны (иначе говоря, построено со­единение поставщиков и деталей по эквивалентности городов).

• И, наконец, после выполнения оператора select мы получаем проекцию выборки по столбцам, указанным в инструкции select. Конечным результатом будет есте­ственное соединение.

Следовательно, нестрого говоря, инструкция from в SQL соответствует декартову про­изведению, инструкция where— выборке, а совместная инструкция select -from-where представляет проекцию выборки произведения.

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

SELECT DISTINCT S.CITY AS SCITY, P.CITY AS PCITY FROM S JOIN SP USING S# JOIN P USING P# ;

Обратите внимание, что приведенная ниже инструкция уже будет некорректной, посколь­ку она включает столбец CITY как присоединяемый столбец во втором соединении:

SELECT DISTINCT S.CITY AS SCITY, P.CITY AS PCITY FROM S NATURAL JOIN SP NATURAL JOIN P ;

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

Сравните с аналогичными примерами в главах 6 и 7.

SELECT FIRST.S# AS SA, SECOND.S# AS SB

FROM S AS FIRST, S AS SECOND

WHERE FIRST.CITY = SECOND.CITY

AND FIRST.S# < SECOND.S# ;

Обратите внимание в этом примере на явные переменные области значений FIRST и SECOND. В наших предыдущих примерах все переменные области значений бы­ли неявными. Также следует отметить, что вводимые имена столбцов SA и SB от­носятся к столбцам результирующей таблицы и потому не могут быть использова­ны в инструкции WHERE.

Соседние файлы в папке Дейтл Введ в БД