[MSSQL 강좌 5강] SELECT 문 - 1

공부/MSSQL  2012.10.03 19:36



안녕하세요 개발자 명월입니다.

이번 포스팅에서는 MSSQL에서 가장 많이 사용하고, 또 가장 중요하다고 생각되는 SELECT 문에 대해서 알아보도록 하겠습니다.

일단 SELECT는 데이터 베이스를 검색할 때 사용되는 쿼리 문으로서 검색 조건을 주어서 정렬도 가능 하고 또 다른 테이블과 결합하여 비교, 또는 필요한 정보를 추출할 수 있는 기능까지 갖추고 있습니다. 그럼 SELECT문의 MSDN 설명을 확인 해 보겠습니다.

MSDN - SELECT 문 MSDN 바로가기

 

 

그럼 일단 사용 구문에 대해서 살펴 보겠습니다.

 

<SELECT statement> ::= 
    [WITH <common_table_expression> [,...n]]
    <query_expression>
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
  [ ,...n ] ]
    [ <FOR Clause>]
    [ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
    { <query_specification> | ( <query_expression> ) }
    [  { UNION [ ALL ] | EXCEPT | INTERSECT }
        <query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
    [TOP ( expression ) [PERCENT] [ WITH TIES ] ]
    < select_list >
    [ INTO new_table ]
    [ FROM { <table_source> } [ ,...n ] ]
    [ WHERE <search_condition> ]
    [ <GROUP BY> ]
    [ HAVING < search_condition > ]


설명으로 보니 어렵습니다.

그럼 예제로 살펴보겠습니다.

 

먼저 예제를 하기에 앞서 테스트 해 볼 데이터를 입력하곘습니다.

(쿼리문 참조 자료를 다운 받아서 해도 되나 디비 쿼리문은 자꾸 사용해봐야 눈에 익으니 직접 타이핑 해보시길 추천합니다.)

 

create table Test_table(
idx bigint,
Name varchar(10),
학교 varchar(10),
학년 char(1)
)

insert into Test_table values(1,'홍길동','노원','1');
insert into Test_table values(2,'명월','강북','2');
insert into Test_table values(3,'호동이','노원','1');
insert into Test_table values(4,'메뚜기','노원','2');
insert into Test_table values(5,'기린','강북','1');
insert into Test_table values(6,'배신자','강북','2');
insert into Test_table values(7,'도둑놈','노원','1');
insert into Test_table values(8,'스파르타','강북','2');
insert into Test_table values(9,'멍지','노원','1');
insert into Test_table values(10,'야기','강북','2');

 

참조 소스 : 20121003_TestExam.sql

 

 

테스트 준비는 됐고 이제 SELECT 구문 예제를 살펴 보겠습니다.

먼저 특정컬럼을 지정하는 구문입니다 .

위 예제에도 보이다시피 select * from Test_table 이란 구문을 사용해서 테이블 데이터를 확인하였습니다.

가운데 열 목록의 * 표시는 모든을 의미하는 뜻으로 * 대신에 보고싶은 컬럼명만 사용하면 검색이 정리가 되겠습니다.

예를 들면 이름과 학교만 보고 싶으면 select name,학교 from Test_table만 사용하면 이름과 학교만 나옵니다.

 

 

두번째는 컬럼이 아니고 레코드 조건을 거는 항목입니다. 형식은 from 테이블 뒤에 사용되겠습니다.

select * from Test_table where 학교='강북' 이라는 구문으로 실행을 하면 학교가 강북인 학생만 select가 되는 것입니다.

 

 

where 절의 예제를 하나 더 확인해보겠습니다.

where 절의 조건은 하나만 할 수 있는게 아니고 여러개를 중첩해서 보일 수도 있습니다. 예를 들면 학교가 강북 이면서 학년이 1인 조건을 걸어보겠습니다.

select * from Test_table where 학교 = '강북' and 학년 = 1

 

 

자 가운데 구문을 and로 묶었습니다. 그럼 구문이 강북 학교 1학년이거나 노원 학교 2학년을 어떻게 검색할까요?

그럼습니다. and가 있듯이 or로 묶으면 가능합니다.

select * from Test_table where (학교='강북' and 학년 = 1) or (학교='노원' and 학년='2')

 

 

다른 형식으로 사용해보곘습니다. idx가 3이상 8이하인 레코드를 검색해 보겠습니다.

select * from Test_table where idx>=3 and idx <= 8

 

 

위와 같이 사용해되 괜찮으나 SQL문에서는 BETWEEN 이라는 함수가 있습니다. 어느 방법으로 해도 상관은 없습니다만 (성능에는 차이가 없습니다.) 개발을 하시다 보면 where 절 뒤에 and가 정말 많이 붙게 되어있습니다. 특히 몇 만, 몇십만 데이터가 되면 where 절은 점점 복잡하게 되어있는데 그중 > and < 이런 형식보다는 BETWEEN 을 사용하면 and하나 줄이므로 해서 올라가는 가독성은 생산성과 유지보수할 때에 엄청난 영향을 미치기에 되도록이면 BETWEEN을 사용하도록 합시다.

 

select * from Test_table where idx between 3 and 8

 

 

이번에는 idx 3,5,8,9 인 테이블을 호출할 때는 In 이라는 키워드를 사용합니다.

select * from Test_tablewhere idx in (3,5,8,9)

 

 

여기까지 SELECT에서 사용되는 기본적인 명령어와 Where 절을 살펴보았습니다.

다음 포스팅에서는 하위쿼리와,group by,having, Order by 에 대해서 알아보도록 하겠습니다.

 

지금까지 예제 쿼리 첨부합니다.

첨부파일 : 20121003_TestExam_1.sql

 


댓글 0개가 달렸습니다.
댓글쓰기