Язык SQL разрешает использовать в других операторах языка SELECT.
, , )
Условно
INSERT ;CREATE VIEW ; UPDATE ;WHERE и HAVING оператора SELECT ;FROM таблицу как результат выполнения Hекоторые СУБД (например, СУБД Oracle) позволяют на основе .
Простым примером использования
SELECT * from tbl1
WHERE f2=(SELECT f2 FROM tbl2
WHERE f1=1);
В данном операторе
В случае если UNKNOWN, что большинством СУБД интерпретируется как FALSE.
Стандарт определяет запись предиката в форме "значение оператор
Например:
SELECT * from tbl1 WHERE
(SELECT f2 FROM tbl2 WHERE f1=1) = f2;
Очень часто с
Например:
SELECT f1,f2,f3 FROM tbl1
WHERE f2> (SELECT AVG(f2) FROM tbl1);
Если результатом IN, осуществляющий выбор одного значения из указываемого множества.
Например:
SELECT * from tbl1 WHERE
f2 IN (SELECT f2 FROM tbl2 WHERE f1=1);
В этом случае предикат принимает значение TRUE, если хотя бы одно из значений, возвращаемых
Однако применение оператора IN имеет и некоторые смысловые недостатки: в запросе четко не определяется, сколько строк должны быть результатом выполнения запроса. При построении отношений для реальной модели данных это может приводить к некоторой неоднозначности и зависимости от самих данных. В противном случае, если модель данных предполагает в качестве постоянного результата =, а структура данных позволяет ввод значений, когда в результате
Если в запросе участвуют более двух таблиц, то для большей наглядности имена полей иногда квалифицируют именами таблиц, указывая их через точку. Стандарт позволяет не квалифицировать имя поля именем таблицы в том случае, если не возникает неоднозначности (поле сначала ищется в таблице, указанной фразой FROM текущего запроса, затем внешнего запроса и т.д.).
Очень часто вместо записи оператора SELECT с использованием
Наиболее продвинутые СУБД, такие как Oracle, предоставляют ряд SQL-операторов, позволяющих оценить производительность выполнения конкретного оператора языка SQL, а также определить уровень оптимизации, применяемый для данного оператора.
WHERE, так и в предикате по группам, определяемом фразой HAVING.
Например:
SELECT avg_f1, COUNT (f2) from tbl1
GROUP BY avg_f1
HAVING avg_f1 >(SELECT f1 FROM tbl1
WHERE f3='a1');
В операторе SELECT из внутреннего SELECT. Такой
Например:
SELECT * from tbl1 t1
WHERE f2 IN (SELECT f2 FROM tbl2 t2
WHERE t1.f3=t2.f3);
В данном случае для каждой строки таблицы tbl1 будет проверяться условие, что значение поля f2 совпадает со значением строки таблицы tbl2, где значение поля f3 равно значению поля f3 внешней таблицы ( tbl1 ). Это простейший пример
Очень часто требуется, чтобы
Например:
SELECT * from tbl1 t_out
WHERE f2< (SELECT AVG(f2) FROM tbl1 t_in
WHERE t_out.f1= t_in.f1);
В случае HAVING можно использовать только агрегирующие функции, так как каждый раз на момент выполнения
Например:
SELECT f1, COUNT(*), SUM(f2) from tbl1 t1
GROUP BY f1
HAVING SUM(f2)> (SELECT MIN(f2)*4
FROM tbl1 t1_in
WHERE t1.f1=t1_in.f1);
Если в предикате надо сравнить значение с некоторым множеством, то, как было показано выше, можно использовать оператор IN.
Для того чтобы проверить, существуют ли строки, удовлетворяющие конкретному условию EXISTS.
Например:
SELECT f1,f2,f3 from tbl1
WHERE EXISTS (SELECT * FROM tbl1
WHERE f4='10/11/2003');
Этот запрос будет формировать не пустой результирующий набор только в том случае, если в какое-либо значение столбца f4 таблицы была занесена дата, например: '10/11/2003'.
Преимущество применения оператора EXISTS с результатами
При EXISTS будет вычисляться каждый раз для каждой строки внешнего запроса.
В EXISTS агрегирующих функций. Однако некоторые СУБД позволяют такой вид
Для использования результата ANY и ALL, которые были подробно рассмотрены в предыдущих лекциях.
Приведем пример использования оператора ANY:
SELECT f1,f2,f3 from tbl1
WHERE f3 = ANY (SELECT f3 FROM tbl2);
Данный оператор определяет, что в результирующий набор будут включены все строки, значение столбца f3 которых присутствует в таблице tbl2.
К операторам языка SELECT, относятся операторы, позволяющие изменять данные в таблицах. Это оператор , выполняющий добавление одной или нескольких строк в таблицу, оператор , удаляющий из таблицы одну или несколько строк, и оператор , изменяющий значения столбцов таблицы.
Оператор в
INSERT INTO table_name
[ (field .,:) ]
{ VALUES (value .,:) }
| subquery
| {DEFAULT VALUES};
Оператор может добавлять в таблицу как одну, так и несколько строк. Список полей (field .,:) указывает имена полей и порядок занесения в них значений из VALUES, или как результат выполнения
Список, определяемый фразой VALUES, называется конструктором значений таблицы и указывается в круглых скобках через запятую.
Если список полей (field .,:) опущен, то порядок занесения значений будет соответствовать порядку столбцов, указанному в операторе при создании данной таблицы.
Если для столбцов, на которые установлено ограничение NOT NULL, не указано добавляемых данных, то СУБД инициирует ошибку выполнения SQL-оператора.
Следующий оператор демонстрирует копирование строк таблицы tbl2, выполняемое на основе
INSERT INTO tbl1(f1,f2,f3)
(SELECT f1,f2,f3 FROM tbl2);
Очевидно, что количество полей, указываемое списком полей, и типы данных этих полей должны совпадать с количеством полей и их типами данных в конструкторе значений таблицы или в результирующем наборе, формируемом
Оператор в
DELETE FROM table_name
[ { WHERE condition }
| { WHERE CURRENT OF cursor_name } ];
Оператор используется для удаления из таблицы строк, указанных условием во фразе WHERE (поисковое удаление, searched deletion) или WHERE CURRENT OF (позиционное удаление, positioned deletion).
Позиционное удаление, определяемое фразой WHERE CURRENT OF, удаляя строки из курсора, соответственно удаляет их и из той таблицы базы данных, на базе которой был построен этот курсор.
Если оператор применяется к какому-либо представлению, то данные удаляются также из созданной на основе последнего таблицы базы данных.
Никогда нельзя забывать, что если фраза WHERE будет отсутствовать или предикат во фразе WHERE будет всегда принимать значение TRUE, то оператор удалит из таблицы все строки.
Оператор в
UPDATE table_name
SET { field =
{ expr | NULL | DEFAULT }} .,
[ { WHERE condition }
| { WHERE CURRENT OF cursor_name } ];
Оператор применяется для внесения изменений в данные таблиц.
Выражение expr, используемое для вычисления значения столбца, может быть как простым выражением, так и
При вычислении значений столбцов можно применять условное выражение и выражение CAST для приведения типов.
Например:
SELECT f1, CAST (f2 AS CHAR),
CAST (f3 AS CHAR) from tbl1;
UPDATE tbl2 SET f2 = (SELECT CAST (f2 AS CHAR)
from tbl1 WHERE f1=1);
UPDATE tbl2 SET f5 = (SELECT CAST (f5 AS DATE)
from tbl1 WHERE f1=1),
f6= CAST ('10/12/2003' AS DATE);
Условное выражение позволяет выбрать одно из нескольких значений на основании указываемого условия.
Условное выражение имеет следующее формальное описание:
{ CASE
{ expr WHEN expr THEN { expr | NULL }}
| { WHEN expr THEN { expr | NULL }}
[ ELSE { expr | NULL } ]
END}
| { NULLIF {expr1,expr2) }
| {COALESCE (expr .,:) }
Условное выражение может быть записано, соответственно, в четырех формах:
CASE с выражениями. Например:SELECT f1, CASE f3
WHEN 'abc' THEN '1_abc' END FROM tbl1;
CASE с предикатами. Например:SELECT f1, CASE
WHEN f3= 'abc' THEN '1_abc'
ELSE f3 END FROM tbl1;
NULLIF - если выражения, указанные в скобках, не совпадают, то выбирается первое из этих значений, в противном случае устанавливается значение NULL.
Например:UPDATE tbl2 SET f3 = (SELECT NULLIF (f3,'aaa')
FROM tbl1 WHERE f1=1);
COALESCE - выбирается первое значение в списке, не равное NULL. Например:INSERT INTO tbl1(f1,f2)
VALUES (1+ COALESCE(SELECT MAX(f1)
FROM tbl1, 0 ), 100);
Для успешного выполнения оператора требуется ряд условий, включающий следующие:
WITH CHECK OPTION или WITH CASCADED CHECK OPTION, установленные при создании этого представления;FOR UPDATE, каждый изменяемый столбец также должен быть определен как FOR UPDATE ;ORDER BY нельзя выполнять изменение столбцов, указанных в этой фразе.Язык SQL разрешает использовать в других операторах языка SELECT.
, , )
Условно
INSERT ;CREATE VIEW ; UPDATE ;WHERE и HAVING оператора SELECT ;FROM таблицу как результат выполнения Hекоторые СУБД (например, СУБД Oracle) позволяют на основе .
Простым примером использования
SELECT * from tbl1
WHERE f2=(SELECT f2 FROM tbl2
WHERE f1=1);
В данном операторе
В случае если UNKNOWN, что большинством СУБД интерпретируется как FALSE.
Стандарт определяет запись предиката в форме "значение оператор
Например:
SELECT * from tbl1 WHERE
(SELECT f2 FROM tbl2 WHERE f1=1) = f2;
Очень часто с
Например:
SELECT f1,f2,f3 FROM tbl1
WHERE f2> (SELECT AVG(f2) FROM tbl1);
Если результатом IN, осуществляющий выбор одного значения из указываемого множества.
Например:
SELECT * from tbl1 WHERE
f2 IN (SELECT f2 FROM tbl2 WHERE f1=1);
В этом случае предикат принимает значение TRUE, если хотя бы одно из значений, возвращаемых
Однако применение оператора IN имеет и некоторые смысловые недостатки: в запросе четко не определяется, сколько строк должны быть результатом выполнения запроса. При построении отношений для реальной модели данных это может приводить к некоторой неоднозначности и зависимости от самих данных. В противном случае, если модель данных предполагает в качестве постоянного результата =, а структура данных позволяет ввод значений, когда в результате
Если в запросе участвуют более двух таблиц, то для большей наглядности имена полей иногда квалифицируют именами таблиц, указывая их через точку. Стандарт позволяет не квалифицировать имя поля именем таблицы в том случае, если не возникает неоднозначности (поле сначала ищется в таблице, указанной фразой FROM текущего запроса, затем внешнего запроса и т.д.).
Очень часто вместо записи оператора SELECT с использованием
Наиболее продвинутые СУБД, такие как Oracle, предоставляют ряд SQL-операторов, позволяющих оценить производительность выполнения конкретного оператора языка SQL, а также определить уровень оптимизации, применяемый для данного оператора.
WHERE, так и в предикате по группам, определяемом фразой HAVING.
Например:
SELECT avg_f1, COUNT (f2) from tbl1
GROUP BY avg_f1
HAVING avg_f1 >(SELECT f1 FROM tbl1
WHERE f3='a1');
В операторе SELECT из внутреннего SELECT. Такой
Например:
SELECT * from tbl1 t1
WHERE f2 IN (SELECT f2 FROM tbl2 t2
WHERE t1.f3=t2.f3);
В данном случае для каждой строки таблицы tbl1 будет проверяться условие, что значение поля f2 совпадает со значением строки таблицы tbl2, где значение поля f3 равно значению поля f3 внешней таблицы ( tbl1 ). Это простейший пример
Очень часто требуется, чтобы
Например:
SELECT * from tbl1 t_out
WHERE f2< (SELECT AVG(f2) FROM tbl1 t_in
WHERE t_out.f1= t_in.f1);
В случае HAVING можно использовать только агрегирующие функции, так как каждый раз на момент выполнения
Например:
SELECT f1, COUNT(*), SUM(f2) from tbl1 t1
GROUP BY f1
HAVING SUM(f2)> (SELECT MIN(f2)*4
FROM tbl1 t1_in
WHERE t1.f1=t1_in.f1);
Если в предикате надо сравнить значение с некоторым множеством, то, как было показано выше, можно использовать оператор IN.
Для того чтобы проверить, существуют ли строки, удовлетворяющие конкретному условию EXISTS.
Например:
SELECT f1,f2,f3 from tbl1
WHERE EXISTS (SELECT * FROM tbl1
WHERE f4='10/11/2003');
Этот запрос будет формировать не пустой результирующий набор только в том случае, если в какое-либо значение столбца f4 таблицы была занесена дата, например: '10/11/2003'.
Преимущество применения оператора EXISTS с результатами
При EXISTS будет вычисляться каждый раз для каждой строки внешнего запроса.
В EXISTS агрегирующих функций. Однако некоторые СУБД позволяют такой вид
Для использования результата ANY и ALL, которые были подробно рассмотрены в предыдущих лекциях.
Приведем пример использования оператора ANY:
SELECT f1,f2,f3 from tbl1
WHERE f3 = ANY (SELECT f3 FROM tbl2);
Данный оператор определяет, что в результирующий набор будут включены все строки, значение столбца f3 которых присутствует в таблице tbl2.
К операторам языка SELECT, относятся операторы, позволяющие изменять данные в таблицах. Это оператор , выполняющий добавление одной или нескольких строк в таблицу, оператор , удаляющий из таблицы одну или несколько строк, и оператор , изменяющий значения столбцов таблицы.
Оператор в
INSERT INTO table_name
[ (field .,:) ]
{ VALUES (value .,:) }
| subquery
| {DEFAULT VALUES};
Оператор может добавлять в таблицу как одну, так и несколько строк. Список полей (field .,:) указывает имена полей и порядок занесения в них значений из VALUES, или как результат выполнения
Список, определяемый фразой VALUES, называется конструктором значений таблицы и указывается в круглых скобках через запятую.
Если список полей (field .,:) опущен, то порядок занесения значений будет соответствовать порядку столбцов, указанному в операторе при создании данной таблицы.
Если для столбцов, на которые установлено ограничение NOT NULL, не указано добавляемых данных, то СУБД инициирует ошибку выполнения SQL-оператора.
Следующий оператор демонстрирует копирование строк таблицы tbl2, выполняемое на основе
INSERT INTO tbl1(f1,f2,f3)
(SELECT f1,f2,f3 FROM tbl2);
Очевидно, что количество полей, указываемое списком полей, и типы данных этих полей должны совпадать с количеством полей и их типами данных в конструкторе значений таблицы или в результирующем наборе, формируемом
Оператор в
DELETE FROM table_name
[ { WHERE condition }
| { WHERE CURRENT OF cursor_name } ];
Оператор используется для удаления из таблицы строк, указанных условием во фразе WHERE (поисковое удаление, searched deletion) или WHERE CURRENT OF (позиционное удаление, positioned deletion).
Позиционное удаление, определяемое фразой WHERE CURRENT OF, удаляя строки из курсора, соответственно удаляет их и из той таблицы базы данных, на базе которой был построен этот курсор.
Если оператор применяется к какому-либо представлению, то данные удаляются также из созданной на основе последнего таблицы базы данных.
Никогда нельзя забывать, что если фраза WHERE будет отсутствовать или предикат во фразе WHERE будет всегда принимать значение TRUE, то оператор удалит из таблицы все строки.
Оператор в
UPDATE table_name
SET { field =
{ expr | NULL | DEFAULT }} .,
[ { WHERE condition }
| { WHERE CURRENT OF cursor_name } ];
Оператор применяется для внесения изменений в данные таблиц.
Выражение expr, используемое для вычисления значения столбца, может быть как простым выражением, так и
При вычислении значений столбцов можно применять условное выражение и выражение CAST для приведения типов.
Например:
SELECT f1, CAST (f2 AS CHAR),
CAST (f3 AS CHAR) from tbl1;
UPDATE tbl2 SET f2 = (SELECT CAST (f2 AS CHAR)
from tbl1 WHERE f1=1);
UPDATE tbl2 SET f5 = (SELECT CAST (f5 AS DATE)
from tbl1 WHERE f1=1),
f6= CAST ('10/12/2003' AS DATE);
Условное выражение позволяет выбрать одно из нескольких значений на основании указываемого условия.
Условное выражение имеет следующее формальное описание:
{ CASE
{ expr WHEN expr THEN { expr | NULL }}
| { WHEN expr THEN { expr | NULL }}
[ ELSE { expr | NULL } ]
END}
| { NULLIF {expr1,expr2) }
| {COALESCE (expr .,:) }
Условное выражение может быть записано, соответственно, в четырех формах:
CASE с выражениями. Например:SELECT f1, CASE f3
WHEN 'abc' THEN '1_abc' END FROM tbl1;
CASE с предикатами. Например:SELECT f1, CASE
WHEN f3= 'abc' THEN '1_abc'
ELSE f3 END FROM tbl1;
NULLIF - если выражения, указанные в скобках, не совпадают, то выбирается первое из этих значений, в противном случае устанавливается значение NULL.
Например:UPDATE tbl2 SET f3 = (SELECT NULLIF (f3,'aaa')
FROM tbl1 WHERE f1=1);
COALESCE - выбирается первое значение в списке, не равное NULL. Например:INSERT INTO tbl1(f1,f2)
VALUES (1+ COALESCE(SELECT MAX(f1)
FROM tbl1, 0 ), 100);
Для успешного выполнения оператора требуется ряд условий, включающий следующие:
WITH CHECK OPTION или WITH CASCADED CHECK OPTION, установленные при создании этого представления;FOR UPDATE, каждый изменяемый столбец также должен быть определен как FOR UPDATE ;ORDER BY нельзя выполнять изменение столбцов, указанных в этой фразе.Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.