[MSSQL 강좌 - 3] SELECT 문 - 1


Study/Database  2012. 10. 3. 19:36

안녕하세요. 명월입니다.


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

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

MSDN - SELECT 문 MSDN 바로가기

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

<SELECT statement> ::=  
  [WITH  [,...n]]
   
  [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
  [ ,...n ] ] 
  [ ] 
  [ OPTION (  [ ,...n ] ) ] 
<query_expression> ::= 
  {  | (  ) } 
  [  { UNION [ ALL ] | EXCEPT | INTERSECT }
         | (  ) [...n ] ] 
<query_specification> ::= 
SELECT [ ALL | DISTINCT ] 
  [TOP ( expression ) [PERCENT] [ WITH TIES ] ] 
  < select_list > 
  [ INTO new_table ] 
  [ FROM {  } [ ,...n ] ] 
  [ WHERE  ] 
  [  ] 
  [ 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