|
Программирование >> Преобразование значений null
В противном случае перенести значения столбцов EMPNO, ENAME и DEPTNO из таблицы EMP в таблицу EMP COMMISSION. По сути, стоит задача обновления (UPDATE) или вставки (INSERT) в зависимости от того, имеет ли данная строка EMP соответствие в EMP COMMISSION. Причем, если в результате выполнения UPDATE комиссионные оказываются слишком велики, требуется удалить эту строку (выполнить операцию DELETE). В настоящий момент в таблицах EMP и EMP COMMISSION имеются следующие строки соответственно: select deptno,empno,ename,comm from emp order by 1
select deptno,empno,ename,comm from emp commission order by 1 DEPTNO EMPNO ENAME COMM 10 10 10 7782 CLARK 7839 KING 7934 MILLER Решение В настоящее время Oracle является единственной СУБД1, имеющей выражение для решения этой задачи. Это выражение - MERGE (слия- На момент выпуска книги в предварительных версиях Microsoft SQL Server 2008 данная возможность также доступна; синтаксис схож с тем, что используется для Oracle. Для более детального изучения обратитесь к документации по Microsoft SQL Server 2008. - Примеч. науч.ред. ние), которое может по необходимости осуществлять обновление (UPDATE) или вставку (INSERT). Например: 1 merge into emp commission ec 2 using (select * from emp) emp 3 on (ec.empno=emp.empno) 4 when matched then 5 update set ec.comm = 1000 6 delete where (sal < 2000) 7 when not matched then 8 insert (ec.empno,ec.ename,ec.deptno,ec.comm) 9 values (emp.empno,emp.ename,emp.deptno,emp.comm) Обсуждение Объединение в строке 3 решения определяет, какие строки уже существуют и будут обновлены. Объединяются таблица EMP COMMISSION (под псевдонимом EC) и результат подзапроса (под псевдонимом EMP). Если объединение успешно, две строки считаются совпавшими , и выполняется UPDATE в выражении WHEN MATCHED. В противном случае соответствие не обнаружено, и выполняется INSERT в выражении WHEN NOT MATCHED. Таким образом, строки таблицы EMP, значения столбца EMPNO которых не совпадают со значениями этого столбца ни в одной строке таблицы EMP COMMISSION, будут вставлены в EMP COMMISSION. Значения COMM в таблице EMP COMMIS-SION будут обновлены только в тех записях служащих, для которых в таблице EMP столбец DEPTNO имеет значение 10. Записи всех остальных служащих будут просто вставлены. Кроме того, поскольку служащий MILLER имеет DEPTNO 10, он является кандидатом на обновление COMM, но в связи с тем, что его SAL меньше 2000, его запись удаляется из таблицы EMP COMMISSION. Удаление всех записей из таблицы Задача Требуется удалить все записи из таблицы. Решение Чтобы удалить записи из таблицы, используйте команду DELETE. Например, чтобы уничтожить все записи из таблицы EMP: delete from emp Обсуждение При использовании команды DELETE без предиката WHERE удаляются все записи из заданной таблицы. Удаление определенных записей Задача Требуется удалить из таблицы записи, отвечающие определенному критерию. Решение Используйте команду DELETE с предикатом WHERE, определяющим, какие строки подлежат удалению. Например, удалим всех служащих 10-го отдела: delete from emp where deptno = 10 Обсуждение Применяя команду DELETE в сочетании с блоком WHERE, можно удалять не все строки из таблицы, а только некоторые из них. Удаление одной записи Задача Требуется удалить одну запись из таблицы. Решение Это особый случай удаления определенных записей. Суть в том, что критерий отбора должен быть настолько узок, чтобы он обеспечивал выбор только одной строки. Часто в качестве критерия для удаления используется первичный ключ. Например, удалим запись о служащем CLARK (EMPNO 7782): delete from emp where empno = 7782 Обсуждение Суть удаления - в определении строк, которые должны быть удалены; воздействие DELETE всегда определяется его предикатом WHERE. Опустите WHERE, и областью действия DELETE станет вся таблица. Задавая предикат WHERE, мы можем сузить эту область до определенной группы строк или до одной строки. При удалении одной строки она обычно идентифицируется с помощью первичного ключа или одного из ее уникальных ключей. Если критерий удаления определен первичным или уникальным ключом, можно с уверенностью ожидать, что будет удалена только одна строка. (Потому что СУБД не допустит, чтобы две строки имели одинаковый первичный или уникальный ключ.) В противном случае может потребоваться проверка, удостоверяющая, что случайно не будут удалены лишние строки.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |