[MSSQL 강좌 - 4] SELECT 문 - 2


Study/Database  2012. 10. 6. 09:51

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


저번 포스팅에서는 SELECT의 WHERE 절 까지 알아보았습니다.

 

이번 포스팅에서는 하위쿼리, order by 에 대해서 알아보겠습니다.

먼저 select * from Test_table 로 레코드 확인부터 하겠습니다.

하위쿼리는 쿼리결과를 가지고 다시 쿼리계산을 하는 것을 말합니다.

예를 들면 위 레코드에서 명월과 같은 학교을 가진사람에 대해 출력하라

하면 명월의 학교는 select 학교 from Test_table where Name='명월' 로 나타낼 수 있습니다.

여기에서 다시 select * from Test_table where 학교 = (select 학교 from Test_table where Name='명월') 로 나타낼수 있습니다.

이때 select 학교 from Test_table where Name='명월' 를 하위쿼리라고 합니다.

강북의 결과를 하위쿼리로 하여 재 검색하였다.

그럼 두번째 예제로 보겠습니다. 2학년 학생들의 학교를 확인해 보도록하겠습니다.

이 학생들과 같은 학교 학생들을 확인해 보겠습니다.

하위쿼리가 값이 하나가 아닌 여러값을 나올경우 이런 에러를 내보냅니다. 이럴 떄 필요한 키워드가 ANY 구문입니다.

이번에는 order by 에 대해 알아보도록하겠습니다. order by는 정렬이라고 보면 되겠습니다.

쉽게 예제로 살펴 보겠습니다. 현재는 idx 오름차순으로 되어있는데 내림차순으로 바꾸도록해 보겠습니다.

 

구문은 select * from Test_table order by idx desc

이번에는 학년별 오름차순으로 바꾸어 보겠습니다.

※ DESC 는 내림차순 ASC 는 오름차순이라고 생각하면 됩니다.

하위쿼리문에서 ANY 처럼 order by도 같이 사용되는 키워드가 있습니다.

그것은 바로 DISTINCT와 TOP 입니다.

DISTINCT는 중복을 없애주는 함수입니다. 굳히 order by랑 같이 안써도 상관은 없는 함수입니다.

 

예를 들면 이 테이블에 있는 학교 종류는 몇가지 인가를 찾으면

select 학교 from Test_table 로 찾을수있습니다

결과물을 보시면 노원, 강북, 노원 강북등 중복된 데이터가 많이 있습니다.

보기 어려우니 학교 앞에 DISTINCT 함수를 두어 사용하겠습니다.

보시다 시피 중복 된 데이터는 빼고 강북,노원 딱 두 레코드만 결과가 나왔습니다.

 

이번에는 TOP 함수 입니다. TOP은 위에서 몇번째의 의미로 예를 들면 select top 3 * from Test_table order by idx desc 라고 하면 내림차순으로 위에서 탑 3번째라는 의미를 두고 있습니다.

이 밖에 하위쿼리랑 Top이랑 섞어서 예제를 보여드리겠습니다.

예로 idx의 오름차순으로 상위 20%를 나타내고 싶을 때는 select top (select count (*) / 5 from Test_table) * from Test_table order by idx asc 로 나타낼 수 있습니다.

즉 전체 카운터, 레코드의 전체 갯수 10 /5의 값이 므로 top 2 와 같은 값을 나타내는 구문입니다. 저는 예제로 조금 복잡하게 나타 내었으나 실제로 사용할때는 top (20)percent 이런 형식으로 나타내게 되겠습니다.

여기까지 order by였습니다. 다음 포스팅에서는 group by와 select를 하면서 자주 사용되는 함수 등을 알아보겠습니다. 감사합니다.

참고 소스 : 20121006.sql