|
Программирование >> Преобразование значений null
Обсуждение Подзапрос определит, в каких отделах произошло три или более несчастных случая: select deptno from dept accidents group by deptno having count(*) >= 3 DEPTNO DELETE удалит записи о всех служащих отделов, возвращенных подзапросом (в данном случае только 20-го отдела). insert into dept accidents values (20,FIRE) insert into dept accidents values (20,FLOOD) insert into dept accidents values (30,BRUISED GLUTE) select * from dept accidents DEPTNO ACCIDENT NAME 10 BROKEN FOOT 10 FLESH WOUND 20 FIRE 20 FIRE 20 FLOOD 30 BRUISED GLUTE Стоит задача удалить из таблицы EMP записи служащих, работающих в отделе, в котором произошло три или более несчастных случаев. Решение Чтобы найти отделы с тремя или более несчастными случаями, используйте подзапрос и агрегатную функцию COUNT. Затем удалите записи всех служащих, работающих в этих отделах: 1 delete from emp 2 where deptno in ( select deptno 3 from dept accidents 4 group by deptno 5 having count(*) >= 3 ) Запросы на получение метаданных В этой главе представлены рецепты, позволяющие находить информацию о конкретной схеме. Например, может потребоваться узнать, какие таблицы были созданы или какие внешние ключи непроиндекси-рованы. Все обсуждаемые здесь СУБД предоставляют таблицы и представления для получения подобных данных. Предложенные рецепты помогут научиться извлекать информацию из этих таблиц и представлений. Однако рассматриваемый вопрос намного шире, чем может охватить данная книга. Полный список таблиц/представлений каталога или словаря данных можно найти в документации СУБД. Для простоты демонстрации все рецепты данной главы работают со схемой SMEAGOL. Как получить список таблиц схемы Задача Требуется получить список всех таблиц, созданных в данной схеме. Решение Во всех решениях предполагается, что мы работаем со схемой SMEA-GOL. Базовый подход к решению данной задачи одинаков для всех СУБД: делается запрос к системной таблице (или представлению), в которой содержатся записи для каждой таблицы базы данных. Делаем запрос к SYSCAT.TABLES: 1 select tabname 1 СУБД MySQL и SQL Server также имеют собственные системные представления, таблицы или команды для предоставления более детальной информации об объектах схемы. Например, SQL Server 2005 имеет системное представление sys.tables с информацией о таблицах. - Примеч. науч.ред. 2 from syscat.tables 3 where tabschema = SMEAGOL Oracle Делаем запрос к SYS.ALL TABLES: select table name from all tables where owner = SMEAGOL PostgreSQL, MySQL и SQL Server Делаем запрос к INFORMATION SCHEMA.TABLES: 1 select table name 2 from information schema.tables 3 where table schema = SMEAGOL Обсуждение Базы данных предоставляют информацию о себе посредством тех же механизмов, которые вы используете в своих приложениях: таблиц и представлений. Oracle, например, содержит обширный набор системных представлений, ALL TABLES, в которых предоставляется информация о таблицах, индексах, правах доступа и любых других объектах базы данных. Системные представления Oracle - это именно представления. В их основе лежит базовый набор таблиц, содержащих информацию в очень неудобной для пользователей форме. Эти представления приводят данные каталога Oracle в вид, с которым можно работать. В Oracle используются системные представления, а в DB2 - системные таблицы. PostgreSQL, MySQL и SQL Server1, с другой стороны, поддерживают информационную схему, которая является набором представлений, определенных стандартом ISO SQL. Поэтому для всех трех баз данных может использоваться один и тот же запрос. Как получить список столбцов таблицы Задача Требуется получить список столбцов таблицы, их типы и позиции втаблице.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |