본문 바로가기
직장생활/Tips - 업무관련

[Tips] 테이블 상위 n개 행, 컬럼명, 전체 행수 확인

by 바른 호랑이 2022. 7. 7.
728x90
반응형

※ MSSQL 및 SSMS 설치

 

[환경설정 / MSSQL] MSSQL 및 SSMS 설치

※ MSSQL이란? [SQL / MSSQL] MSSQL이란? 안녕하세요. 바른호랑이입니다. 이번 게시물에서는 MSSQL에 대해서 설명드릴 예정입니다. MSSQL은 Microsoft SQL Server의 약어로 관계형 데이터베이스 관리시스템(RDBMS)

data-is-power.tistory.com

안녕하세요. 바른 호랑이입니다.

이번 게시글에서는 MSSQL을 활용하여 데이터 분석작업을 진행할 때 유용하게 쓸 수 있는 몇가지 쿼리문을 소개해드리려고 합니다. MSSQL 및 SSMS를 사용하였으며, 해당 프로그램에 대한 설치방법이 궁금하신 분들은 위의 게시글을 참조해주시기 바랍니다.
데이터의 규모가 억단위가 넘어가는 테이블을 다루는 거대한 조직에서는 테이블 전체를 조회하거나 전체 행의 수를 확인하기 위해 select * from 테이블명 처럼 쿼리를 작성하면 시간도 오래걸리고, 과부하 위험이 있습니다. 하지만 데이터 분석을 시작하기 위해서는 테이블에 대한 기본적인 정보들을 확인을 해야하기에 대략적인 테이블의 구조와 전체 행의 수는 확인을 해야합니다. 이때 사용할 수 있는 것들이 TOP 함수와 sysindexs 및 sysobjects이며, 해당 내용들에 대해 다뤄보려합니다. 이와 더불어 INFORMATION_SCHEMA를 활용하여 특정 테이블의 컬럼명을 확인하는 쿼리또한 소개해드리겠습니다.

1. TOP 함수
: 해당 쿼리는 소개해드릴 것이 없을 정도로 간단하며 TOP 숫자 * from 테이블명 형태로 작성가능하며, 따로 설명할만한 부분이 없으므로 자세한 사용법은 아래의 쿼리문과 사진을 참조해주시기 바랍니다.

select TOP 10 * from dbo.test01
select TOP 10 * from dbo.test02

 

2. 테이블의 전체 행 수 확인(sysindexes와 sysobjects를 이용 / count 지양)
: 테이블의 전체 행수를 구하는 가장 간단한 방법은 count 함수를 사용하는 것입니다. 하지만 억단위 데이터로 넘어가면 시간이 굉장히 오래걸리기 때문에 좋은 쿼리문은 아니라고 할 수 있습니다. 이때 사용할 수 있는 것이 sysindexes와 sysobjects이며,  자세한 쿼리문들과 내용은 사진을 참고해주시기 바랍니다.

-- 가장 쉬운 방법 / COUNT : 오래걸리고 비효율적

select count(*) from dbo.test01

-- sysindexes와 sysobjects를 이용하는 방법_1
    /* sysobject type컬럼의 의미
    AF = Aggregate function (CLR)    집계함수
    C = CHECK constraint    체크제약조건
    D = DEFAULT (constraint or stand-alone)    디폴트 제약조건
    F = FOREIGN KEY constraint    참조 제약조건
    FN = SQL scalar function    함수
    FS = Assembly (CLR) scalar-function    어셈블(CLR) SQL 스칼라함수
    FT = Assembly (CLR) table-valued function    어셈블(CLR) SQL 테이블반환함수
    IF = SQL inline table-valued function    인라인 테이블 반환함수
    IT = Internal table    내부 테이블
    P = SQL Stored Procedure    프로시져
    PC = Assembly (CLR) stored-procedure    어셈블(CLR) 프로시져
    PG = Plan guide    계획 지침
    PK = PRIMARY KEY constraint    기본 키 제약조건
    R = Rule (old-style, stand-alone)    룰 규칙
    RF = Replication-filter-procedure    복제 필터 프로시저
    S = System base table    시스템 기본테이블
    SN = Synonym    동의어
    SO = Sequence object    시퀀스 객체
    U = Table (user-defined)    사용자 테이블
    V = View    뷰 
    EC = Edge constraint 엣지 제약(그래프)
    */

select MAX(A.rows) from 
( select * from sysindexes ) AS A
inner join 
( select * from sysobjects ) AS B
on A.id = B.id 
where B.type = N'U' and B.name = N'test01'

-- sysindexes와 sysobjects를 이용하는 방법_2
-- OBJECT_ID는 sysobjects의 name과 일치하는 테이블의 id값을 가져옴

select rows
from sysindexes
where indid < 2 -- indexid = 0 : 힙, indexid = 1 : 클러스터 
and id = OBJECT_ID('dbo.test01');


 3.  테이블의 컬럼 이름 확인(INFORMATION_SCHEMA.COLUMNS 이용)
: 특정 테이블의 컬럼 이름이 무엇인지 알아야 할 때도 있고 2개의 테이블의 컬럼 이름의 일치여부를 확인해야할 상황이 있을 수도 있습니다. 이럴 때는 INFORMATION_SCHEMA.COLUMNS과 JOIN기능을 통해 손쉽게 해결할 수 있으며, 자세한 쿼리문과 내용은 사진을 참고해주시기 바랍니다.

-- 속성(컬럼)명 확인용 쿼리
select COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = N'test01'

-- 2개의 테이블간 컬럼명 일치여부 확인
select * from
(
	select COLUMN_NAME
	from INFORMATION_SCHEMA.COLUMNS
	where TABLE_NAME = N'test01'
) as T_001
full outer join
(
	select COLUMN_NAME
	from INFORMATION_SCHEMA.COLUMNS
	where TABLE_NAME = N'test01'
) as T_002
on T_001.COLUMN_NAME = T_002.COLUMN_NAME

이상으로 데이터 분석시 유용한 쿼리문 몇가지에 대해 알아봤습니다.

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글