기록이 힘이다.

[SQL 쿡북] 5. 메타 데이터 쿼리(8) p133 본문

SQL

[SQL 쿡북] 5. 메타 데이터 쿼리(8) p133

dev22 2023. 3. 7. 11:34
728x90

특정 스키마에 대한 정보를 찾을 수 있는 레시피를 제공합니다. 예를 들어 어떤 테이블을 생성했는지 또는 어떤 외래 키가 인덱싱되지 않았는지를 알고자 할 수 있습니다. 이 책의 모든 RDBMS는 그러한 데이터를 얻기 위한 테이블과 뷰를 제공합니다. 5장의 레시피를 활용하면 해당 테이블 및 뷰에서 필요한 정보를 얻을 수 있습니다.

 

5.1 스키마의 테이블 목록 보기

Oracle의 시스템 뷰와 DB2의 시스템 테이블은 벤더에 특화되어 있습니다. 반면에 PostgreSQL, MySQL 및 SQL Server는 ISO SQL 표준에 의해 정의된 뷰 집합인 정보 스키마(information schema)를 지원합니다. 따라서 세 데이터베이스 모두에 대해 같은 쿼리를 수행할 수 있습니다. 

 

5.2 테이블의 열 나열하기

5.3 테이블의 인덱싱된 열 나열하기

쿼리에서는 인덱스가 생성되는 열이나 인덱싱되지 않는 열이 무엇인지 알아야 합니다. 인덱스는 필터에서 자주 쓰이며 특정 열에 대한 쿼리에 대해 상당히 좋은 성능을 제공할 수 있습니다.

 

5.4 테이블의 제약조건 나열하기

제약조건은 관계형 데이터베이스의 매우 중요한 부분인 만큼, 테이블에 어떤 제약조건이 있는지 반드시 알아야 합니다. 테이블에 대한 제약조건을 나열하는 작업은 여러 이유로 유용합니다.

 

5.5 관련 인덱스가 없는 외래 키 나열하기

 

5.6 SQL로 SQL 생성하기

유지 관리 작업을 자동화하고자 동적 SQL 문을 생성하려 합니다. 특히 1) 테이블의 행수를 계산한 다음, 2) 테이블에 정의된 외래 키 제약조건을 비활성화하고, 3) 테이블의 데이터에서 삽입 스크립트를 생성하는 세 가지 작업을 수행하려고 합니다. 

 

다음 예제는 Oracle 시스템에서 작동하는 쿼리 

/* 여러분 스키마의 모든 테이블에서 모든 행의 수를 세는 SQL 생성 */
select 'select count(*) from '||table_name||';' cnts
  from user_tables;
--------------------------------------------------------------------
/* 모든 테이블의 외래 키를 비활성화하기 */
select 'alter table '||table_name||
       ' disable constraint '||constraint_name||';' cons
  from user_constraints
 where constraint_type = 'R';
--------------------------------------------------------------------
/* EMP 테이블의 일부 열에 삽입하는 스크립트 생성하기 */
select 'insert into emp(empno,ename,hiredate) '||chr(10)||
       'values( '||empno||','||''''||ename
       ||''',to_date('||''''||hiredate||''') );' inserts
  from emp
 where deptno = 10;

5.7  Oracle에서 데이터 딕셔너리 뷰 확인하기

5.8 마치며

메타 데이터에 대한 쿼리는 SQL을 통해 사용자가 더 많은 작업을 수행할 수 있도록 해주고, 데이터 베이스를 알아야 할 필요성을 조금 덜어줍니다. 이것은 유사한 구조를 가진 더 복잡한 데이터베이스를 다룰 때 특히 유용합니다.

 

https://github.com/devcys22/SQLCookbook/blob/main/ch5%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%BF%BC%EB%A6%AC.sql

 

GitHub - devcys22/SQLCookbook: SQL쿡북을 학습합니다.

SQL쿡북을 학습합니다. Contribute to devcys22/SQLCookbook development by creating an account on GitHub.

github.com