Программирование >>  Преобразование значений null 

1 ... 34 35 36 [ 37 ] 38 39 40 ... 219


Обсуждение

Подзапрос определит, в каких отделах произошло три или более несчастных случая:

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. Поэтому для всех трех баз данных может использоваться один и тот же запрос.

Как получить список столбцов таблицы Задача

Требуется получить список столбцов таблицы, их типы и позиции втаблице.



1 ... 34 35 36 [ 37 ] 38 39 40 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика