안녕하세요. 명월입니다.
이번 포스팅에서는 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
'Study > Database' 카테고리의 다른 글
[MSSQL 강좌 - 7] DDL- create.alter,drop (0) | 2012.10.19 |
---|---|
[MSSQL 강좌 - 6] DML - insert, update, delete (0) | 2012.10.18 |
[MSSQL 강좌 - 5] SELECT 문 - 3 (5) | 2012.10.07 |
[MSSQL 강좌 - 4] SELECT 문 - 2 (0) | 2012.10.06 |
[MSSQL 강좌 - 2] 테이블 생성과 데이터 삽입 (0) | 2012.10.02 |
[MSSQL 강좌 - 1] 데이터 타입 (0) | 2012.09.30 |
[MSSQL] MSSQL Express 설치하기. (10) | 2012.09.29 |
[MSSQL] MSSQL이란? (0) | 2012.09.29 |