반응형
수많은 테이블을 가지고 있는 데이터베이스에서 원하는 컬럼이 포함된 테이블들만 조회하고 싶을 때,
아래의 시스템 테이블들을 이용하여 조회할 수 있다.
1
2
3
4
|
SELECT a.name AS 테이블명, b.name AS 컬럼명
FROM sys.tables a
INNER JOIN sys.columns b ON a.object_id = b.object_id
WHERE b.name = '원하는컬럼명'
|
cs |
예를 들어 보자.
bank 라는 데이터베이스에서 gold 라는 컬럼을 가진 테이블을 모두 조회하고 싶다.
이럴 경우 아래와 같이 조회 할 수 있다.
1
2
3
4
5
6
7
8
|
-- bank 데이터베이스로 이동
USE bank
-- gold 라는 컬럼을 가진 모든 테이블 조회
SELECT a.name AS 테이블명, b.name AS 컬럼명
FROM sys.tables a
INNER JOIN sys.columns b ON a.object_id = b.object_id
WHERE b.name = 'gold'
|
cs |
[조회 결과]
테이블명 | 컬럼명 |
saving_tbl | gold |
deposit_tbl | gold |
만약 원하는 컬럼명을 정확히 모를 경우에는 like 를 사용해서 조회할 수도 있다.
1
2
3
4
|
SELECT a.name AS 테이블명, b.name AS 컬럼명
FROM sys.tables a
INNER JOIN sys.columns b ON a.object_id = b.object_id
WHERE b.name LIKE '%원하는컬럼명%'
|
cs |
LIKE 절의 % 는 아무 문자나 올 수 있다는 뜻이다.
즉, gold 라는 문구를 포함하고 앞 뒤로 아무 문자나 올 수 있다는 말이다.
예를 들어보자.
역시나 bank 라는 데이터베이스에서 특정컬럼을 가진 모든 테이블을 조회하고 싶다.
근데 컬럼명에 gold 라는 문구가 들어가는데 정확하지 않다.
이럴 경우 아래와 같이 조회할 수 있다.
1
2
3
4
5
6
7
8
|
-- bank 데이터베이스로 이동
USE bank
-- gold 라는 문자를 포함한 컬럼을 가진 모든 테이블 조회
SELECT a.name AS 테이블명, b.name AS 컬럼명
FROM sys.tables a
INNER JOIN sys.columns b ON a.object_id = b.object_id
WHERE b.name LIKE '%gold%'
|
cs |
[조회 결과]
테이블명 | 컬럼명 |
user_tbl | bank_gold |
saving_tbl | gold |
deposit_tbl | gold |
loan_tbl | gold_loan |
이렇게 gold 라는 문자를 포함하며 앞 뒤로 다른 문자가 있는 컬럼명을 가진 모든 테이블을 조회할 수 있다.
반응형