SQL, Анализ данных

Исследуем данные в незнакомых базах

Время прочтения: 3 мин.

Получив доступ к неизвестной базе, мы первым делом знакомимся с ее структурой и наполнением с помощью панели объектов. Это хороший способ, если объектов не так много.

Данный материал поможет вам ознакомиться с тем, как осуществлять поиск данных и объектов в базе данных с помощью встроенных средств самих СУБД.

СУБД ORACLE:

Если нужно найти пользователей, которые существуют в БД, используем системное представление all_users:

SELECT username 
  FROM all_users;

С помощью системного представления all_tables можем вывести все табличные пространства, принадлежащие конкретному владельцу AUDIT:

SELECT DISTINCT tablespace_name 
  FROM all_tables
 WHERE owner = 'AUDIT';

Выбираем табличное пространстве EXAMPLE (владельца AUDIT) и смотрим названия всех имеющихся там и доступных нам таблиц:

SELECT table_name 
  FROM all_tables
 WHERE owner = 'AUDIT'
   AND tablespace_name = 'EXAMPLE' 
 ORDER BY table_name;

Ищем все таблицы в пространстве EXAMPLE (владельца AUDIT), имена которых начинаются с ‘CLIENT’:

SELECT table_name
  FROM all_tables
 WHERE owner = 'AUDIT'
   AND tablespace_name = 'EXAMPLE' 
   AND table_name LIKE 'CLIENT%';

Пробуем найти поля в таблицах пространства EXAMPLE (владельца AUDIT), имена которых предполагаемо содержат дату рождения ‘BIRTH’:

SELECT * 
  FROM all_tab_columns
 WHERE owner = 'AUDIT'
   AND tablespace_name = 'EXAMPLE' 
   AND upper(column_name) like upper('%BIRTH%')

Так же, при исследовании БД полезно пользоваться комментариями, если таковые имеются. В этом нам поможет системное представление all_col_comments.

Для примера, найдем поля, в которых указан комментарий с пояснением о содержании в поле данных о днях рождения:

 SELECT *
   FROM all_col_comments
  WHERE upper(comments) like '%BIRTH%'

Или выведем комментарии ко всем полям таблиц, содержащих в названии ‘BIRTH’:

SELECT *
  FROM all_col_comments
 WHERE table_name like '%BIRTH%'

СУБД MSSQLServer

MS SQL Server для аналогичных задач использует иные представления.

Например, для поиска пользователей, которые существуют в БД или поиска иной дополнительной информация о пользователе, воспользуемся представлением sys.sysusers:

SELECT *
  FROM sys.sysusers;

С помощью представления sys.schemas можно узнать информацию обо всех схемах БД:

SELECT *
  FROM sys.schemas;

С помощью представления sys.databases можно получить информацию о существующих базах :

SELECT *
  FROM sys.databases;

Наиболее удобным способом поиска объектов SQL Server, является запрос к системной таблице sys.all_objects, являющейся одной из ключевых для сбора информации об объектах, составляющих БД.

Попробуем найти объекты БД, содержащие в названии ‘%BIRTH%’:

SELECT object_id as [идентификатор_объекта], 
       schema_id as [идентификатор_схемы],
 schema_name as [название_схемы], 
 name as [название_объекта], 
 type as [тип_объекта], 
 type_desc as [расшифровка_типа_объекта], 
 create_date as [дата_создания_объекта], 
 modify_date as [дата_последней_модификации_объекта]
  FROM sys.all_objects 
 WHERE upper(name) like '%BIRTH%';

Выведем все поля-первичные ключи таблиц базы USERS:

USE USERS
SELECT A.name as [Наименование_таблицы],
        B.name as [Наименование_столбца],
        A.type_desc as [Тип_объекта]
  FROM sys.objects A
 Inner Join sys.all_columns B
    On A.object_id = B.object_id
 WHERE A.type='U'
    And is_identity=1

Таким образом мы разобрали как найти объекты в базе данных с помощью встроенных средств самих СУБД. Данные подходы весьма упрощают поиск нужной информации в неизвестных нам базах.

Желаем удачи в исследованиях!

Советуем почитать