Структура запросов с подзапросами. Коррелированные подзапросы. Использование с подзапросами операторов EXISTS, ANY, ALL.



Структура: SELECT * from tbl1 WHERE f2=(SELECT f2 FROM tbl2 WHERE f1=1);

Стандарт определяет запись предиката в форме "значение оператор подзапрос".

Подзапрос называется коррелированным, если запрос, содержащийся в предикате, имеет ссылку на значение из таблицы (внешней к данному запросу), которая проверяется посредством данного предиката. В операторе SELECT из внутреннего подзапроса можно ссылаться на столбцы внешнего запроса, указанного во фразе SELECT.

Для того чтобы проверить, существуют ли строки, удовлетворяющие конкретному условию подзапроса, применяется оператор EXISTS. Оператор Exists принимает значение истина, когда результирующее множество не пусто.

SELECT f1,f2,f3 from tbl1 WHERE EXISTS (SELECT * FROM tbl1 WHERE f4='10/11/2003');

Этот запрос будет формировать не пустой результирующий набор только в том случае, если в какое-либо значение столбца f4 таблицы была занесена дата, например: '10/11/2003'.

При коррелированном подзапросе оператор EXISTS будет вычисляться каждый раз для каждой строки внешнего запроса. Выполняет проверку на существование.

Найти продавцов, которые имеют несколько покупателей.

SELECT DISTINCT snum

FROM CUSTOMERS a

WHERE EXISTS

(SELECT *

FROM CUSTOMERS b

WHERE a.snum=b.snum and a.snum<>b.snum); — написать запрос с группировкой по коду покупателя.

Операторы ANY, ALL обязательно используются с операторами сравнения.

ANY (синоним SOME) -условие сравнения считается выполненным только в том случае, если оно выполняется хотя бы для одного из значений результирующей таблицы.

Пример:

SELECT f1,f2,f3 from tbl1 WHERE f3 = ANY (SELECT f3 FROM tbl2);

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

Пример:

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

SELECT *

FROM SALESPEOPLE

WHERE city=ANY

(SELECT city

FROM CUSTOMERS)

 


49)Язык SQL. Операторы языка манипулирования данными: DELETE, UPDATE, INSERT.

SQL относится к классу непроцедурных языков программирования. SQL ориентирован не на записи, а на множества. Это означает следующее: в качестве входной информации для запроса к базе данных используется множество кортежей-записей одной или нескольких таблиц-отношений. В результате выполнения запроса также образуется множество кортежей результирующей таблицы-отношения. Запрос SQL задает не процедуру, то есть последовательность действий, необходимых для получения результата, а условия.

Оператор INSERT -добавление одной или нескольких строк в таблицу. Данные можно брать из любой таблицы.

(INSERT)

INTO <Имя таблицы>

[ (field.,:)] <имена столбцов>

Values (<значения>)

Пример: INSERT

INTO Salesperson

(snum, sname) – перечисляем поля для ввода

Values (‘1022’, ‘дддд’,); - вводим информацию в эти поля

Команду INSERT можно применять для формирования таблицы. Данные при этом можно брать из любой таблицы.

Создать таблицу ORDERTOTAL в которую занести общее количество заказов по каждому продавцу. (Snum, total)

INSERT

INTO ORDERTOTAL

SELECT snum, count(*)

FROM ORDERS

GROUP BY snum

Оператор DELETE -Удаление строк из таблицы

DELETE FROM <имя таблицы>

[Where <условие отбора строк>];

Никогда нельзя забывать, что если фраза WHERE будет отсутствовать, то оператор удалит из таблицы все строки.

DELETE FROM ORDERS

Where odate= #10.03.2000#; - удалить строки с датой

Оператор UPDATE -применяется для внесения изменений в данные таблиц.

UPDATE <имя таблицы>

SET <aтрибут> =<Значение>

[Where <условие>];

Пример:

UPDATE Salesperson

SET comm =comm=+0.05 – коммисионные увеличить на 0,05

 

 


Дата добавления: 2015-12-16; просмотров: 21; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!