русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вложенные запросы


Дата добавления: 2013-12-23; просмотров: 1539; Нарушение авторских прав


 

Оператор SELECT помещается внутрь операторов

SELECT,

INSERT,

UPDATE

или DELETE.

 

Синтаксис вложенного оператора SELECT:

(SELECT [ALL │ DISTINCT]

список_столбцов_вложенного_запроса

[FROM список-таблиц]

[WHERE директива]

[GROUP ВУ директива]

[HAVING директива])

Типы вложенных запросов.

· Вложенный запрос возвращает один столбец или одно значение везде, где сравни­вает значение в выражении с помощью следующих операторов: =, <, >, <=, >=, <>, !>, или! <.

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

· Вложенный запрос возвра­щает много строк, которые проверяются на существование с помощью оператора EXISTS в директиве WHERE.

 

· ВСТАВКА ОДНОГО ЗАПРОСА ВНУТРЬ ДРУГОГО

 

SELECT *

FROM Orders

WHERE snum =

(SELECT snum

FROM Salespeople

WHERE sname = 'Motika');

====================================

onum amt odate cnum snum

----- ------- ---------- ----- -----

3002 1900.10 10/03/1990 2007 1004

=====================================

 

Правильное использование выражений:

 

<скалярная форма><оператор><подзапрос>

 

Неправильно:

 

<подзапрос><оператор><скалярная форма>

 

или

 

<подзапрос> <оператор> <подзапрос>

 

 

SELECT *

FROM Orders

WHERE ( SELECT DISTINCT snum

FROM Orders

WHERE cnum = 2001 ) = snum;

 

 

ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ, КОТОРЫЕ ВЫДАЮТ МНОГО СТРОК С ПОМОЩЬЮ ОПЕРАТОРА IN

 

SELECT *

FROM Orders

WHERE snum IN

( SELECT snum

FROM Salespeople

WHERE city = "LONDON" );

 

ИСПОЛЬЗОВАНИЕ ВЫРАЖЕНИЙ В ПОДЗАПРОСАХ



 

SELECT *

FROM Customers

WHERE cnum =

( SELECT snum + 1000

FROM Salespeople

WHERE sname = Serres );

 

 

ПОДЗАПРОСЫ В ПРЕДЛОЖЕНИИ HAVING

 

SELECT rating, COUNT ( DISTINCT cnum )

FROM Customers

GROUP BY rating

HAVING rating >

( SELECT AVG (rating)

FROM Customers

WHERE city = " San Jose';

 


  • ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ

EXISTS И NOT EXISTS

 

SELECT cnum, cname, city

FROM Customers

WHERE EXISTS

( SELECT *

FROM Customers

WHERE city = ‘London’ );

 

 

· ИСПОЛЬЗОВАНИЕ ОПЕРАТОРОВ

ANY, ALL, SOME

 

SELECT *

FROM Salespeople

WHERE city = ANY

(SELECT city

FROM Customers );

 

SELECT *

FROM Customers

WHERE rating > ALL

(SELECT rating

FROM Customers

WHERE city = Rome ):

 

 

· ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЯ SELECT INTO

SELECT <список столбцов >

INTO <имя новой таблицы >

FROM <список таблиц>

[WHERE <условие поиска>]

 


 

· ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЯ UNION

 

SELECT список_столбцов [INТО директива]

FROM директива

[WHERE директива]

[GROUP ВУ директива]

[HAVING директива]

UNION [ALL]

SELECT список_столбцов

FROM директива

[WHERE директива]

[GROUP ВУ директива]

[HAVING директива]

[ORDER ВУ директива]

[COMPUTE директива]

Правила использования UNION:

- Количество столбцов, последовательность столбцов и их типы данных в обоих списках столбцов должны совпадать.

- Если в одном из запросов используется директива INTO, то она должна зада­ваться в первом запросе.

- Директивы GROUP ВУ и HAVING используются только в одном запросе.

- Директивы ORDER ВУ И СОМРИТЕ используются только в конце оператора UNION.

- Имена столбцов результата определяются списком столбцов первого оператора SELECT.

 

 

Формирование объединения из двух запросов

 

SELECT snum, sname

FROM Salespeople

WHERE city = 'London'

 

UNION

 

SELECT cnum, cname

FROM Customers

WHERE city = 'London';

 

=================

snum sname

----- --------

1001 Peel

1004 Motika

2001 Hoffman

2006 Climens

 

==================

 

 

КОГДА МОЖНО ДЕЛАТЬ ОБЪЕДИНЕНИЕ МЕЖДУ ЗАПРОСАМИ?

 

· столбцы вывода должны быть совместимы для объединения;

· пустые значения (NULL) запрещены в любом столбце объединения;

· нельзя использовать UNION в подзапросах;

· нельзя использовать функции в предложении SELECT запроса в объединении;


ИСПОЛЬЗОВАНИЕ СТРОК И ВЫРАЖЕНИЙ

С UNION

 

SELECT a.snum, sname, onum, 'Highest on', odate

FROM Salespeople a, Orders b

WHERE a.snum = b.snum

AND b.amt =

(SELECT MAX (amt)

FROM Orders c

WHERE c.odate = b.odate )

 

UNION

 

SELECT a.snum, (sname, (onum ' Lowest on', odate

FROM ( Salespeople a, Orders b

WHERE a.snum = b.snum

AND b.amt =

(SELECT MIN (amt)

FROM Orders c

WHERE c.odate = b.odate );

 

===================================

snum sname onum odate

----- ------- ------ ---------- -----------

1001 Peel 3008 Highest on 10/05/1990

1001 Peel 3008 Lowest on 10/05/1990

1001 Peel 3011 Highest on 10/06/1990

1002 Serres 3005 Highest on 10/03/1990

1002 Serres 3007 Lowest on 10/04/1990

1002 Serres 3010 Lowest on 10/06/1990

1003 Axelrod 3009 Highest on 10/04/1990

1007 Rifkin 3001 Lowest on 10/03/1990

===================================

 


 

ИСПОЛЬЗОВАНИЕ UNION С ORDER BY

SELECT a.snum, sname, onum, 'Highest on',

odate

FROM Salespeople a, Orders b

WHERE a.snum = b.snum

AND b.amt =

(SELECT MAX (amt)

FROM Orders c

WHERE c.odate = b.odate )

UNION

SELECT a.snum, sname, onum, 'Lowest on',

odat

FROM Salespeople a, Orders b

WHERE a.snum = b.snum

AND b.amt =

(SELECT MIN (amt)

FROM Orders c

WHERE c.odate = b.odate )

ORDER BY 3;

===================================

snum sname onum odate

----- ------- ------ ---------- -----------

1007 Rifkin 3001 Lowest on 10/03/1990

1002 Serres 3005 Highest on 10/03/1990

1002 Serres 3007 Lowest on 10/04/1990

1001 Peel 3008 Highest on 10/05/1990

1001 Peel 3008 Lowest on 10/05/1990

1003 Axelrod 3009 Highest on 10/04/1990

1002 Serres 3010 Lowest on 10/06/1990

1001 Peel 3011 Highest on 10/06/1990

===================================




<== предыдущая лекция | следующая лекция ==>
Объединение данных в синтаксисе SQL'99 | ИЗМЕНЕНИЕ ДАННЫХ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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