MSSQL 테이블 출력 - MSSQL teibeul chullyeog


[개발 환경 설정]

개발 툴 : SSMS

개발 언어 : MSSQL

MSSQL 테이블 출력 - MSSQL teibeul chullyeog

[소스 코드]

/*
[테이블 변수 선언 및 while 반복문 구문을 사용해 테이블 조회 결과 출력 실시]
1. declare begin end - PL/SQL 기본으로 쿼리, 문법을 실행할 수 있습니다
2. declare [선언부] - 변수, 상수를 선언할 수 있습니다
3. begin [실행부] - 제어, 반복문, 함수 등 다양한 로직 기술을 실행합니다
4. end [종료부] - 실행된 로직의 종료를 선언합니다
5. set [할당] - 선언한 변수에 값을 할당할 수 있습니다
6. print [출력] - 결과물을 출력할 때 사용합니다
7. while - 지정한 단계 만큼 반복문을 수행할 수 있습니다
*/


DECLARE 

-- [임시 테이블 변수 부분]
@V_TABLE TABLE 
(
    V_ROW INT IDENTITY(1,1) NOT NULL, -- 자동 인덱스 증가
    V_NAME VARCHAR(100),
    V_DEPT VARCHAR(100)
);


-- [임시 테이블에 실제 테이블 데이터 저장 실시]
INSERT INTO @V_TABLE(V_NAME, V_DEPT)
    SELECT T_NAME, T_DEPT 
       FROM TEST_USER
    WHERE T_DEPT IN ('백제', '후백제')
    ORDER BY T_DEPT DESC;


DECLARE 
    -- [초기 변수 선언 부분]
    @M_ROW_NOW AS INT,
    @M_ROW_MAX AS INT,

    @M_NAME AS VARCHAR(100),
    @M_DEPT AS VARCHAR(100);


    -- [반복문 수행 행 변수에 값 삽입 실시]
    SELECT @M_ROW_NOW = MIN(V_ROW), @M_ROW_MAX = MAX(V_ROW) FROM @V_TABLE;


-- [WHILE 반복 구문 선언]    
WHILE(@M_ROW_NOW <= @M_ROW_MAX)
BEGIN

	-- [SELECT 결과 매핑 실시]
	SELECT @M_NAME = V_NAME, @M_DEPT = V_DEPT
	    FROM @V_TABLE
	WHERE @M_ROW_NOW = V_ROW;

	-- [Print 결과 출력 실시]
	PRINT '행 번호 : ' + CONVERT(VARCHAR, @M_ROW_NOW);
	PRINT '이름 : ' + CONVERT(VARCHAR, @M_NAME);
	PRINT '부서 : ' + CONVERT(VARCHAR, @M_DEPT);
	PRINT '';
	
	-- [카운트 증가 실시]
	SET @M_ROW_NOW = @M_ROW_NOW + 1;
END;

[결과 출력]

MSSQL 테이블 출력 - MSSQL teibeul chullyeog

[요약 설명]

/*

[테이블 변수 선언 및 while 반복문 구문을 사용해 테이블 조회 결과 출력 실시]

1. declare begin end - PL/SQL 기본으로 쿼리, 문법을 실행할 수 있습니다

2. declare [선언부] - 변수, 상수를 선언할 수 있습니다

3. begin [실행부] - 제어, 반복문, 함수 등 다양한 로직 기술을 실행합니다

4. end [종료부] - 실행된 로직의 종료를 선언합니다

5. set [할당] - 선언한 변수에 값을 할당할 수 있습니다

6. print [출력] - 결과물을 출력할 때 사용합니다

7. while - 지정한 단계 만큼 반복문을 수행할 수 있습니다

*/​


[SQL] 한 테이블에만 있는 값 출력하기 (테이블 빼기, left outer join) 본문

seulhee030 2021. 4. 23. 18:25

MSSQL 테이블 출력 - MSSQL teibeul chullyeog

위 그림처럼, 한 테이블에만 있는 값들을 출력하고 싶을 때 사용하는 SQL 쿼리를 소개하려고 한다. 

쿼리는 크게 minus를 사용, LEFT JOIN를 사용, 서브쿼리를 사용 하는 방법으로 나눠보았다.

참고로 minus이 가장 쉽다고 생각하는데 oracle DB에서만 사용이 가능하다!


기본 세팅

table은 student, student2 테이블을 예시로 들어주었다.

MSSQL 테이블 출력 - MSSQL teibeul chullyeog
student table
MSSQL 테이블 출력 - MSSQL teibeul chullyeog
student2 table

우리가 도출하고 싶은 테이블은 student에는 있지만, student2 테이블엔 없는 아래와 같은 join 결과값이다.

MSSQL 테이블 출력 - MSSQL teibeul chullyeog

SQL 쿼리

1. minus 사용

select name, id
from student
minus
select name, id
from student2;

위에서 고른 테이블에서, 아래서 고른 테이블을 빼주는 연산이다. 딱 테이블 빼기 테이블을 적용시킨 오라클 DB 연산.

2. LEFT JOIN 사용

select s.name, s.id
from student s left join student2 s2 on s.name = s2.name and s.id=s2.id 
where s2.name is null;

student에 대해 left join을 해준 뒤, 그 중 student2에서 null값인 부분을 제외시켜주면 된다.

left join만 하고, is not null 조건을 달아주지않으면 나오는 결과는 아래와 같다.

MSSQL 테이블 출력 - MSSQL teibeul chullyeog

3. 서브쿼리 사용

select name, id
from student 
where (name, id) not in (select * from student2);

student2 테이블에서,

student의 name과 id를 포함하지 않는

name과 id를 포함한 컬럼을 출력하라!  라는 의미.

SQL/MS-SQL & SQL Server Management Studio

[ms sql] print() 함수/ print()함수 결과로 아무것도 출력이 안됨 / (동적쿼리 사용시 유용)

코더마더 2019. 12. 9.

mssql 에서 동적쿼리를 작성 할 때, print 함수가 유용하게 쓰인다.

 

PRINT(@SQL_QUERY)

DECLARE @TEST_PARAM VARCHAR(50) = 'TEST'
DECLARE @SQL_QUERY VARCHAR(MAX) =' SELECT * FROM TB_TEST WHERE COLUMN ='''+@TEST_PARAM+''''

EXEC(@SQL_QUERY)
-- PRINT 함수
PRINT(@SQL_QUERY)

보통 변수 @SQL_QUERY 에 쿼리를 작성한후, EXEC 함수로 실행하게 되는데,

문제는 이 쿼리가 잘실행되었는지 확인할 수 가 없다.

EXEC(@SQL_QUERY)

 

그래서 PRINT() 함수를 사용하여 실행하게 되면 메세지에 내가 작성했던 쿼리가 출력된다.

PRINT(@SQL_QUERY)

 

TIP. 하지만 메세지가 나오지 않을 경우가 있다. 에러가 난게 아니라 @SQL_QUERY를 mssql 에서 동적쿼리를 작성 할 때, print 함수가 유용하게 쓰인다.

 

 

 

PRINT(@SQL_QUERY)

 

DECLARE @TEST_PARAM VARCHAR(50) = 'TEST'

DECLARE @SQL_QUERY VARCHAR(MAX) =' SELECT * FROM TB_TEST WHERE COLUMN ='''+@TEST_PARAM+''''

 

EXEC(@SQL_QUERY)

-- PRINT 함수

PRINT(@SQL_QUERY)

보통 변수 @SQL_QUERY 에 쿼리를 작성한후, EXEC 함수로 실행하게 되는데,

 

문제는 이 쿼리가 잘실행되었는지 확인할 수 가 없다.

 

EXEC(@SQL_QUERY)

 

 

 

그래서 PRINT() 함수를 사용하여 실행하게 되면 메세지에 내가 작성했던 쿼리가 출력된다.

 

PRINT(@SQL_QUERY)

 

 

 

TIP. 하지만 메세지가 나오지 않을 경우가 있다. 에러가 난게 아니라 쿼리를 작성할때 여러 변수들을 이거 붙여서 @SQL_QUERY를 만들것이다.

여러 변수들중 NULL인 값이 있다면 @SQL_QUERY변수가 통째로 NULL이 되어 아무것도 출력되지 않는것이다.

공유하기

게시글 관리

구독하기개발천국

'SQL > MS-SQL & SQL Server Management Studio' 카테고리의 다른 글

[MS SQL] INSERT 여러개 한번에 하기  (0)2020.01.21[MS-SQL] 버전 확인하는 방법  (0)2019.12.30mssql - select into 문 / 다른 테이블로 복사  (0)2019.12.09MS SQL 영문 한글 구분하기 / 영어 한글 구분 (정규식)  (0)2019.12.06임시 테이블 (@) vs 테이블 변수 (#)  (0)2019.12.02

태그

exec, MSSQL, print, 동적쿼리

요즘 관심있는 주제

댓글0

비밀글

등록