Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 8. Использование имен корреляции (алиасов, псевдонимов)

Использование имен корреляции (алиасов, псевдонимов)

Отбор данных из нескольких таблиц

Отбор данных из одной таблицы

Примеры использования оператора SELECT

Примеры использования операторов манипулирования данными

INSERT - вставка строк в таблицу

Пример 1. Вставка одной строки в таблицу:

INSERT INTO P (PNUM, PNAME)

VALUES (4, "Иванов");

Пример 2. Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE вставляются данные о поставщиках из таблицы P, имеющие номера, большие 2):

INSERT INTO TMP_TABLE (PNUM, PNAME)

SELECT PNUM, PNAME FROM P

WHERE P.PNUM>2;

UPDATE - обновление строк в таблице

Пример 3. Обновление нескольких строк в таблице:

UPDATE P SET PNAME = "Пушников"

WHERE P.PNUM = 1;

DELETE - удаление строк в таблице

Пример 4. Удаление нескольких строк в таблице:

DELETE FROM P

WHERE P.PNUM = 1;

Пример 5. Удаление всех строк в таблице:

DELETE FROM P;

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

Замечание. На самом деле в базах данных могут быть не только постоянно хранимые таблицы, а также временные таблицы и так называемые представления. Представления – это хранящиеся в базе данные SELECT-выражения. С точки зрения пользователей представления – это таблица, которая не хранится постоянно в базе данных, а «возникает» в момент обращения к ней. С точки зрения оператора SELECT и постоянно хранимые таблицы, и временные таблицы и представления выглядят совершенно одинаково. Конечно, при реальном выполнении оператора SELECT системой учитываются различия между хранимыми таблицами и представлениями, но эти различия скрыты от пользователя.

Результатом выполнения оператора SELECT всегда является таблица. Таким образом, по результатам действий оператор SELECT похож на операторы реляционной алгебры. Любой оператор реляционной алгебры может быть выражен оператором SELECT. Сложность оператора SELECT определяется тем, что он содержит в себе все возможности реляционной алгебры, а также дополнительные возможности, которых в реляционной алгебре нет.

Пример 6. Выбрать все данные из таблицы поставщиков (ключевые слова SELECTFROM …):

SELECT * FROM P;

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

Пример 7. Выбрать все строки из таблицы поставщиков, удовлетворяющих некоторому условию (ключевое слово WHERE …):

SELECT * FROM P

WHERE P.PNUM > 2;

В качестве условия в разделе WHERE можно использовать сложные логические выражения, использующие поля таблиц, константы, сравнения (>, <, = и т.д.), скобки, союзы AND и OR, отрицание NOT.

Пример 8. Выбрать некоторые колонки из исходной таблицы (указание списка отбираемых колонок):

SELECT P.NAME FROM P;

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

Пример 9. Выбрать некоторые колонки из исходной таблицы, удалив из результата повторяющиеся строки (ключевое слово DISTINCT):

SELECT DISTINCT P.NAME FROM P;

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

Пример 10. Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS …):

SELECT TOVAR.TNAME, TOVAR.KOL, TOVAR.PRICE, "=" AS EQU,

TOVAR.KOL*TOVAR.PRICE AS SUMMA

FROM TOVAR;

В результате получим таблицу с колонками, которых не было в исходной таблице TOVAR:

TNAME KOL PRICE EQU SUMMA
Болт     =  
Гайка     =  
Винт     =  

Пример 11. Упорядочение результатов запроса (ключевое слово ORDER BY …):

SELECT PD.PNUM, PD.DNUM, PD.VOLUME FROM PD

ORDER BY DNUM;

В результате получим следующую таблицу, упорядоченную по полю DNUM:

PNUM DNUM VOLUME
     
     
     
     
     
     

Пример 12. Упорядочение результатов запроса по нескольким полям с возрастанием или убыванием (ключевые слова ASC, DESC):

SELECT PD.PNUM, PD.DNUM, PD.VOLUME FROM PD

ORDER BY DNUM ASC, VOLUME DESC;

В результате получим таблицу, в которой строки идут в порядке возрастания значения поля DNUM, а строки, с одинаковым значением DNUM идут в порядке убывания значения поля VOLUME:

PNUM DNUM VOLUME
     
     
     
     
     
     

Если явно не указаны ключевые слова ASC или DESC, то по умолчанию принимается упорядочение по возрастанию (ASC).

Пример 13. Естественное соединение таблиц (способ 1 – явное указание условий соединения):

SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P, PD

WHERE P.PNUM = PD.PNUM;

В результате получим новую таблицу, в которой строки с данными о поставщиках соединены со строками с данными о поставках деталей:

PNUM PNAME DNUM VOLUME
  Иванов    
  Иванов    
  Иванов    
  Петров    
  Петров    
  Сидоров    

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

Пример 14. Естественное соединение таблиц (способ 2 – ключевые слова JOIN… USING…):

SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME

FROM P JOIN PD USING PNUM;

Ключевое слово USING позволяет явно указать, по каким из общих колонок таблиц будет производиться соединение.

Пример 15. Естественное соединение таблиц (способ 3 – ключевое слово NATURAL JOIN):

SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME

FROM P NATURAL JOIN PD;

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

Пример 16. Естественное соединение трех таблиц:

SELECT P.PNAME, D.DNAME, PD.VOLUME

FROM P NATURAL JOIN PD NATURAL JOIN D;

В результате получим следующую таблицу:

PNAME DNAME VOLUME
Иванов Болт  
Иванов Гайка  
Иванов Винт  
Петров Болт  
Петров Гайка  
Сидоров Болт  

Пример 17. Прямое произведение таблиц:

SELECT P.PNUM, P.PNAME, D.DNUM, D.DNAME FROM P, D;

В результате получим следующую таблицу:

PNUM PNAME DNUM DNAME
  Иванов   Болт
  Иванов   Гайка
  Иванов   Винт
  Петров   Болт
  Петров   Гайка
  Петров   Винт
  Сидоров   Болт
  Сидоров   Гайка
  Сидоров   Винт

Т.к. не указано условие соединения таблиц, то каждая строка первой таблицы соединится с каждой строкой второй таблицы.

Пример 18. Соединение таблиц по произвольному условию. Рассмотрим таблицы поставщиков и деталей, которыми присвоен некоторый статус (тэта-соединение):

Вставка /*

Определение. Пусть отношение содержит атрибут , отношение содержит атрибут , а – один из операторов сравнения (и т.д.). Тогда – соединением отношения по атрибуту с отношением по атрибуту называют отношение

Это частный случай операции общего соединения.

Иногда, для операции – соединения применяют следующий, более короткий синтаксис:

*/

Таблица 1 – Отношение P (Поставщики)

PNUM PNAME PSTATUS
  Иванов  
  Петров  
  Сидоров  

Таблица 2 – Отношение D (Детали)

DNUM DNAME DSTATUS
  Болт  
  Гайка  
  Винт  

Отобразить поставщиков, поставляющих детали так, чтобы статус поставщика был выше статуса поставляемой детали:

SELECT P.PNUM, P.PNAME, P.PSTATUS, D.DNUM, D.DNAME, D.DSTATUS

FROM P, D

WHERE P.PSTATUS >= D.DSTATUS;

В результате получим следующую таблицу:

 

PNUM PNAME PSTATUS DNUM DNAME DSTATUS
  Иванов     Болт  
  Иванов     Гайка  
  Иванов     Винт  
  Петров     Винт  
  Сидоров     Гайка  
  Сидоров     Винт  

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

Пример 19. Отобрать все пары поставщиков таким образом, чтобы первый поставщик в паре имел статус, больший статуса второго поставщика:

SELECT P1.PNAME AS PNAME1,

P1.PSTATUS AS PSTATUS1,

P2.PNAME AS PNAME2,

P2.PSTATUS AS PSTATUS2

FROM P P1, P P2

WHERE P1.PSTATUS1 > P2.PSTATUS2;

В результате получим следующую таблицу:

PNAME1 PSTATUS1 PNAME2 PSTATUS2
Иванов   Петров  
Иванов   Сидоров  
Сидоров   Петров  

Пример 20. Рассмотрим ситуацию, когда некоторые поставщики (назовем их контрагенты) могут выступать как в качестве поставщиков деталей, так и в качестве получателей. Таблицы, хранящие данные могут иметь следующий вид:

Таблица 3 – Отношение CONTRAGENTS

Номер контрагента NUM Название контрагента NAME
  Иванов
  Петров
  Сидоров

Таблица 4 – Отношение DETAILS (Детали)

Номер детали DNUM Название детали DNAME
  Болт
  Гайка
  Винт

Таблица 5 – Отношение CD (Поставки)

Номер поставщика PNUM Номер получателя CNUM Номер детали DNUM Поставляемое количество VOLUME
       
       
       
       
       
       

В таблице CD (Поставки) поля PNUM и CNUM являются внешними ключами, ссылающимися на потенциальный ключ NUM в таблице CONTRAGENTS.

Ответ на вопрос «кто кому что в каком количестве поставляется» дается следующим запросом:

SELECT

P.NAME AS PNAME,

C.NAME AS CNAME,

DETAILS.DNAME,

CD.VOLUME

FROM CONTRAGENTS P, CONTRAGENTS C, DETAILS, CD

WHERE

P.NUM = CD.PNUM AND

C.NUM = CD.CNUM AND

D.DNUM = CD.DNUM;

В результате получим следующую таблицу:

 

 

Название поставщика PNAME Название получателя CNAME Название детали DNAME Поставляемое количество VOLUME
Иванов Петров Болт  
Иванов Сидоров Гайка  
Иванов Сидоров Винт  
Петров Сидоров Болт  
Петров Сидоров Гайка  
Сидоров Иванов Болт  

Этот же запрос может быть выражен очень большим количеством способов, например, так:

SELECT

P.NAME AS PNAME,

C.NAME AS CNAME,

DETAILS.DNAME,

CD.VOLUME

FROM

CONTRAGENTS P,

CONTRAGENTS C,

DETAILS NATURAL JOIN CD

WHERE

P.NUM = CD.PNUM AND

C.NUM = CD.CNUM;

 

 

<== предыдущая лекция | следующая лекция ==>
Операторы SQL | Характеристики усилителей
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 1053; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.044 сек.