IBM DB2에서 컬럼명으로 컬럼이 속한 테이블 전체 조회하는 쿼리

IT/데이터베이스|2020. 8. 16. 08:45

 

저희 회사에서는 IBM사의 DBSM제품군인 DB2를 사용하고 있습니다. 차세대 이전부터 사용하던 DBMS라 섣불리 다른 DBMS로 바꿀 생각을 못하죠.

 

저희 회사는 금융권이라 시스템 복잡도와 의존도가 상당합니다. 사용중인 DB 인스턴스만 수십개이고 수십개의 스키마에 테이블만 스키마 별로 수천개가 있는 규모죠.


[IBM DB2]

IBM DB2는 IBM에서 1983년에 발표된 상업용 관계 데이터베이스 관리 시스템이다. MVS/XA와 MVS/370 운영체제에서 사용되며 SQL을 데이터 언어로 사용하여 다수의 사용자들이 여러 개의 관계 데이터베이스를 동시에 접근할 수 있는 대형 데이터베이스를 위한 시스템이다.[출처 : 위키백과 DB2]

 

 

 

 

이번에는 제가 업무적으로 사용하고 있는 몇개의 DB2 쿼리를 정리하려 합니다. SQL은 DB를 다루는 사용자에게는 쿼리라는 용어로 친숙한데 일반적인 사용자들은 Select절만 사용합니다(DML).

 

하지만 시스템을 관리하는 DBA(Database Administrator)나 DA(Data Architecure) 직군은 기타 SQL(Grant, Revoke, Create, Truncate, Delete, Update, Insert, Declare 등)의 명령어를 업무에 다양하게 사용합니다. 

 

 

 

 

 

Select Syntax.

 


FROM table_name;

 

Select의 기본적인 사용 구문은 위와 같습니다. 실제 사례는 아래와 같습니다.

 

SELECT * FROM Customers;

- Cutomers 테이블에서 포함되어 있는 전체 컬럼의 데이터를 추출하는 Select문.

 

 

 

 

SQL의 Select문은 기본적이로 이와 같이 사용되며 DB2에서 특정 컬럼의 명을 가지는 테이블을 조회하는 특수한 Select문은 아래와 같습니다.

 

SELECT *
FROM SYSCAT.COLUMNS
WHERE 1=1
AND REMARKS LIKE '%비밀번호%'
OR REMARKS LIKE '%패스워드%'
WITH UR;

 

여기서 WITH UR절은 query 를 보다 보면 with UR 이 붙은 쿼리를 많이 볼 수 있을 것입니다. UR 이란 Isolation level 중 하나로서 Uncommitted Read 의 약어 입니다. 기본적으로 내가 조회하고자 하는 table 의 다른 트랜잭션이 진행중일때 대기하다가 커밋,롤백이 되는 경우에 조회할 수 있지요.

 

 

 


그러나 WITH UR 이 옵션을 붙이면 대기하지 않고 실시간으로 변경중인 데이터를 가져올 수 있습니다. 하지만 커밋이 안된 데이터를 가져오므로 신뢰성 보장을 못한다는 단점이 있습니다. 그러므로, 단순조회일 경우엔 넣고 꼭 신뢰성보장이 되어야 하는 경우 WITH UR 구문을 쿼리에 넣지 않는 것이 좋습니다.

위 구문 외에 사용되는 특수한 쿼리는 굉장히 많습니다. 중복된 값을 제거하고 1개의 값만 추출하는 DISTINCT, 두개 이상의 테이블을 연결하여 조회하는 JOIN 구문 등 SELECT절에서 사용되는 특수 구문은 다양하니 공부하면 좋을 듯 합니다.

댓글()