이 장에서는 특정 스키마에 대한 정보를 찾는 레시피를 제공한다.
예) 어떤 테이블이 생성되어 있는가
예) 어떤 왜래 키가 인덱싱되지 않았는지 등

이 주제에 대한 표준화 수준은 높지 않은 편이다. 따라서 RDBMS에 따라 각기 다른 해법을 적용한다.

각 RDBMS의 가장 일반적인 스키마 쿼리 중심으로 서술된다.
극히 일부분의 내용이 제공된다.


제5. 1장: 스키마 테이블의 목록 보기

Q. 특정 스키마에서 생성한 모든 테이블 목록을 보고자 한다

  • MySQL
select table_name
	from information_schema.tables
    where table_schema = 'sqlcook';
>> 실행 결과
+------------+
| table_name |
+------------+
| v          |
| emp_bonus  |
| emp        |
| new_sal    |
| T10        |
| dept       |
| T100       |
| new_dept   |
| T1         |
+------------+
9 rows in set (0.005 sec)

  • Oracle
select table_name 
	from all_tables 
    where owner = 'SCOTT';
>> 실행 결과
TABLE_NAME
DEPT
EMP
2 rows selected.

Oracle Live SQL에서 스키마명은 'SCOTT'이다

Oracle의 시스템 뷰는 벤더에 특화되어 있다. 지들만 쓴다는 뜻이다.
반면, MySQL은 SQL 표준에 의해 정의된 정보 스키마를 지원한다.
따라서 다른 데이터베이스에 대해서도 해당 쿼리를 사용할 수 있다.


제5. 2장: 테이블 열 나열하기

Q. 데이터 유형과 함께 테이블의 열 및 해당 열이 있는 테이블의 위치를 나열하려고 한다

  • MySQL
    INFORMATION_SCHEMA.COLUMNS를 쿼리한다
select column_name, data_type, ordinal_position
	from information_schema.columns
    where table_schema = 'sqlcook'
    	and table_name = 'emp';

>> 실행결과
+-------------+-----------+------------------+
| column_name | data_type | ordinal_position |
+-------------+-----------+------------------+
| empno       | int       |                1 |
| ename       | varchar   |                2 |
| job         | varchar   |                3 |
| mgr         | int       |                4 |
| hiredate    | date      |                5 |
| sal         | int       |                6 |
| comm        | int       |                7 |
| deptno      | int       |                8 |
+-------------+-----------+------------------+
8 rows in set (0.004 sec)

  • Oralce
    ALL_TAB_COLUMNS를 쿼리한다
select column_name, data_type, data_length, column_id
from all_tab_columns
where owner = 'SCOTT'
and table_name = 'EMP'

>> 실행결과
COLUMN_NAME	DATA_TYPE	DATA_LENGTH	COLUMN_ID
EMPNO		NUMBER		22			1
ENAME		VARCHAR2	10			2
JOB			VARCHAR2	9			3
MGR			NUMBER		22			4
HIREDATE	DATE		7			5
SAL			NUMBER		22			6
COMM		NUMBER		22			7
DEPTNO		NUMBER		22			8
8 rows selected.

각 벤더는 열 데이터의 자세한 정보를 얻는 방법을 제공한다.
위 예제에서는 열 이름, 데이터 유형, 위치, 길이 등을 반환했으나 NULL 허용 여부 등 기본값들이 존재한다.


정리

스키마에 대한 정보를 얻는 방법이 소개되고 있다.
이는 실무적 측면에서 데이터베이스 또는 스키마의 동기화 작업이나 이전 작업에서 유사하게 사용했던 쿼리다.
수동으로(ㅠㅠ) 한땀한땀 비교했던 때가 생각이 난다.
나름대로 굉장히 유용한 쿼리가 될 수 있다.

0개의 댓글