Учебное пособие Для студентов университетов Специальностей «Информатика», «Прикладная математика»


Выбор  информации  из  нескольких  таблиц  (соединение)



Pdf көрінісі
бет131/177
Дата15.02.2022
өлшемі2,58 Mb.
#25567
түріУчебное пособие
1   ...   127   128   129   130   131   132   133   134   ...   177
Выбор  информации  из  нескольких  таблиц  (соединение). 
Соединение – это SELECT-запрос, который выбирает строки из двух или 
более  таблиц.  При  этом  запрос  может  извлекать  любые  столбцы  из 
любой  таблицы.  Если  хотя  бы  две  из  этих  таблиц  имеют  одинаково 
названные  столбцы,  то  имена  таких  столбцов  должны  уточняться 
именами  таблиц,  записываемых  перед  именами  столбцов  через  точку. 
Большинство SELECT-запросов  с  соединениями  содержат  условия,  в 
которых  сравниваются  значения  столбцов  из  разных  таблиц.  Такие 
условия называются условиями соединения.  
Эквисоединение – это  соединение  с  использованием  в  условии 
соединения  операции  равенства.  Таким  образом,  эквисоединение 
извлекает строки с эквивалентными значениями в указанных столбцах.  
Декартово  произведение  таблиц  строится  при  отсутствии  в  запросе 
условия  соединения.  В  этом  случае  к  каждой  строке  первой  таблицы 
приписывается каждая строка второй таблицы. 
Самосоединение  соединяет  таблицу  саму  с  собой.  При  этом  таблица 
появляется в списке FROM дважды и должна иметь дополнительное имя 
(псевдоним), чтобы можно было однозначно идентифицировать столбцы 
в условии соединения.  
Внешнее  соединение  выдает  все  строки,  которые  удовлетворяют 
условию  соединения,  а  также  строки  одной  из  таблиц,  которые  не 
удовлетворяют  условию  соединения.  Чтобы  записать  запрос,  который 
выполняет  внешнее  соединение  таблиц A и B и  выдает  все  строки  из 
таблицы A, применим  операцию  внешнего  соединения (+) ко  всем 
столбцам из таблицы B в условиях соединения. Тогда для всех строк из 
 
148


 
таблицы A, для  которых  нет  соответствующих  строк  в  таблице B, 
система  предоставит  строку,  содержащую NULL во  всех  выражениях  в 
списке столбцов, которые содержат столбцы из таблицы B.  
П р и м е р ы 
1.
  Выбрать  из  таблиц BOOKS и BOOKS_DELIVERY информацию  о 
книгах,  поставленных  продавцам  за  период  с 24.01.2006 по 12.02.2006, 
указав для выводимого значения даты специальный формат вывода: 
SELECT  SALESMAN, AUTHOR, TITLE, 
TO_CHAR(DATE_DELIVERY, ‘DD MONTH YYYY’)   
FROM  BOOKS, BOOKS_DELIVERY  WHERE   
BOOKS.CODE_BOOK = BOOKS_DELIVERY.CODE_BOOK  AND   
DATE_DELIVERY  BETWEEN  '24-01-06'  AND  '12-02-06' 
ORDER  BY  SALESMAN, AUTHOR; 
2.
  Выбрать  из  таблиц BOOKS и BOOKS_DELIVERY по  указанному 
продавцу перечень издательств и жанров имеющихся у него книг без по-
вторения;  чтобы  задать  фамилию  продавца,  использовать  переменную 
подстановки: 
SELECT  DISTINCT  SALESMAN, PUBLISH_HOUSE, GENRE   
FROM BOOKS, BOOKS_DELIVERY 
WHERE  BOOKS_DELIVERY.CODE_BOOK = BOOKS.CODE_BOOK 
AND  SALESMAN = '&SALESMAN' 
ORDER  BY  PUBLISH_HOUSE, GENRE;  
3.
 Выбрать из таблиц BOOKS и BOOKS_DELIVERY список продав-
цов, у которых в наличии не менее 10 книг, указав данные об общем ко-
личестве и суммарной стоимости имеющихся у них книг: 
SELECT  SALESMAN, SUM(QUANTITY), SUM(PRICE*QUANTITY)  
FROM  BOOKS, BOOKS_DELIVERY 
WHERE  BOOKS_DELIVERY.CODE_BOOK = BOOKS.CODE_BOOK 
GROUP  BY  SALESMAN  HAVING  SUM(QUANTITY) >= 10;  
4.
 Выбрать из таблиц BOOKS и BOOKS_DELIVERY по каждому из-
дательству  информацию  об  общем  количестве  и  суммарной  стоимости 
поставленных ими книг каждому продавцу:  
SELECT  PUBLISH_HOUSE, SALESMAN, COUNT(QUANTITY), 
SUM(PRICE*QUANTITY)  FROM  BOOKS, BOOKS_DELIVERY   
WHERE  BOOKS.CODE_BOOK = BOOKS_DELIVERY.CODE_BOOK 
GROUP  BY  PUBLISH_HOUSE, SALESMAN; 
 
149


 
5. 
Выбрать из таблиц BOOKS и BOOKS_DELIVERY по каждой кни-
ге, сведения о которой имеются в таблице BOOKS, информацию о коли-
честве продавцов, которым она была поставлена: 
SELECT  TITLE, AUTHOR, COUNT(SALESMAN)  FROM BOOKS
BOOKS_DELIVERY  WHERE BOOKS_DELIVERY.CODE_BOOK 
(+)= BOOKS.CODE_BOOK  GROUP  BY  TITLE, AUTHOR; 
6. 
Выбрать  из  таблиц BOOKS и BOOKS_DELIVERY по  каждому 
продавцу информацию об отсутствующих у них книгах, общий перечень 
которых находится в таблице BOOKS: 
SELECT  SALESMAN, TITLE, PRICE  FROM  BOOKS
BOOKS_DELIVERY  
MINUS 
SELECT  SALESMAN, TITLE, PRICE  FROM  BOOKS, 
BOOKS_DELIVERY  WHERE  BOOKS_DELIVERY.CODE_BOOK = 
BOOKS.CODE_BOOK; 
7. 
Выбрать из таблицы BOOKS информацию (название, цена) о трех 
самых дешевых книгах; предполагается, что в перечне книг не более трех 
различных книг с минимальной ценой: 
SELECT  А.TITLE, А.PRICE  FROM  BOOKS  А, BOOKS  В WHERE  
А.PRICE >= В.PRICE 
GROUP  BY  А.TITLE, А.PRICE  HAVING COUNT(В.TITLE) <= 3  
ORDER  BY  А.TITLE; 
8. 
Выбрать  из  таблиц BOOKS и BOOKS_DELIVERY информацию 
(название, фамилия автора) о книгах, которые не были поставлены в ма-
газин для продажи: 
SELECT  TITLE, AUTHOR  FROM  BOOKS  WHERE   
NOT  EXISTS 
(SELECT  *  FROM  BOOKS_DELIVERY  WHERE  
BOOKS_DELIVERY.CODE_BOOK = BOOKS.CODE_BOOK); 


Достарыңызбен бөлісу:
1   ...   127   128   129   130   131   132   133   134   ...   177




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет