Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Язык структурированных запросов SQL. Соотнесенные подзапросы




Язык структурированных запросов SQL. Объединение таблиц.

Упорядочивание с помощью оператора Null

Упорядочивание агрегатных групп

ORDER BY может кроме того, использоваться с GROUP BY для упорядочения групп. Если это так, то ORDER BY всегда приходит последним. Перед сгруппированием вывода, порядок групп был произвольным; и мы, теперь, заставим группы размещаться в последовательности:

SELECT snum, odate, MAX (amt) FROM Orders GROUP BY snum, odate GROUP BY snum; Упорядочивание вывода по номеру столбца

Вместо имен столбца, вы можете использовать их порядковые номера для указания поля используемого в упорядочении вывода. Эти номера могут ссылаться не на порядок столбцов в таблице, а на их порядок в выводе. Другими словами, поле упомянутое в предложении SELECT первым, для ORDER BY - это поле 1, независимо от того каким по порядку оно стоит в таблице:

SELECT sname, comm FROM Salespeople GROUP BY 2 DESC;

Если имеются пустые значения (NULL) в поле которое вы используете для упорядочивания вашего вывода, они могут или следовать или предшествовать каждому другому значению в поле.


 

SELECT * FROM Customers, Salespeople // декартово произведение таблиц

WHERE Customers.city = Salespeople.city

 

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

 

Объединения таблиц через ссылочную целостность.

 

SELECT Customers.cname, Salespeople.sname

FROM Customers, Salespeople

WHERE Salespeople.snum = Customers.snum

 

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

 

Объединения, которые используют условия, основанные на равенствах – объединения по равенству. Наиболее общий вид объединений.

 

SELECT onum, cname, Orders.cnum, Orders.snum

FROM Salespeople, Customers, Orders

WHERE Customers.city <> Salespeople.city

AND Orders.cnum = Customers.cnum

AND Orders.snum = Salespeople.snum

 

Результат вывода – заказчик и продавец в разных городах. Объединения трех таблиц.

 

1) Объединения с использованием WHERE

2) Объединения с использованием оператора JOIN

 

INNER JOIN

LEFT OUTER JOIN

RIGHT OUTER JOIN

FULL OUTER JOIN

 

SELECT * FROM Orders

INNER JOIN Customers

ON Orders.cnum = Customers.cnum

 

3) Объединение таблицы с собой – объединение двух копий одной и той же таблицы

 

SELECT first.cname, second.cname, first.rating

FROM Customers first, Customers second

WHERE first.rating = second.rating // пары покупателей с одним рейтингом

AND first.cnum < second.cnum

 

В этом примере используются псевдонимы.

ПРОПУЩЕНО


 

SELECT * FROM Orders

WHERE snum =

(SELECT snum FROM Salespeople

WHERE sname ‘Иванов’)

ПРОПУЩЕНО

 

Можно использовать ключевое слово.

 

SELECT * FROM Orders

WHERE amt > (SELECT AVG(amt) FROM Orders) // все продажи, имеющие значения больше среднего

 

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

 

SELECT * FROM Orders

WHERE snum IN

(SELECT snum FROM Salespeople

WHERE city = ‘Брянск’)

 

Подобно можно использовать подзапросы в предложении…

ПРОПУЩЕНО

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

ПРОПУЩЕНО

 

В соотнесенном подзапросе происходит обращение

ПРОПУЩЕНО

 

SELECT * FROM Customers out

WHERE 20.10.07 IN

(SELECT odate FROM Orders into

WHERE out.cnum = into.cnum)

 

Внутренний запрос должен выполняться отдельно для каждого

ПРОПУЩЕНО

Строка внешнего запроса, для которого выполняется внутренний запрос, называется текущей строкой кандидата.

С помощью соотнесенных подзапросов можно выполнять сложные операции.

 

SELECT snum, sname

FROM Salespeople

WHERE 1 < (SELECT count(*)

FROM Customers

WHERE Customers.snum = Salespeople.snum)

 

Список продавцов, у которых больше одного покупателя.


 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 846; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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