블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Notice

Recent Post

Recent Comment

Archive

2008. 6. 8. 17:07 기술문서창고
클리앙에서 올라온 질문에 답변한 글입니다.
사실 나름 길게 썼는데 아까워서(...)

ms Access 수업에서 SQL을 좀 배우는데,
SELECT 에 대한 설명을 잘 이해하지 못해서 질문드립니다.

교재에 보면 SELECT structure 를 설명한다 그러면서

SELECT [DISTINCT] column(s)
    FROM table(s)
    [WHERE condition] <general condition>
    [GROUP BY item(s)]
    [HAVING condition] <group condition>
    [ORDER BY columns] <sorting option>

이라고 써 있습니다.
근데 저는 DISTINCT도,, column도 나머지 행들도 무슨 소린지 잘 모르겠습니다 ㅠ_
교수님이 만드신 교재라 설명이 제대로 된 부분도 없구요 ;;

혹시 대강이라도 설명해 주실 수 있는 분이 계실까요?

대강 설명을 하면 select는 db table에서 어떤 자료를 빼와라! 하는 명령입니다.
"어이, 전화번호부에서 짜장면집 전화번호 좀 가져와라~" 같은 것이지요.

[]는 추가적인 옵션입니다.
<>는 []를 사용하면 추가적으로 넣어줘야 하는 조건입니다.

예를 들어 앞의 짜장면집 전화번호.. 라고 하면
select 짜장면집이름, 전화번호 from 전화번호부
같이 되겠지요.

그런데 이렇게 하면 전국의 짜장면집-_- 전화번호가 나열되겠죠?
그럴 때 쓰는 옵션이 where 입니다.
사용법은where 지역="종로구" 같이 사용합니다. 즉
select 짜장면집이름, 전화번호 from 전화번호부 where 지역="종로구"
가 됩니다.

그런데 그냥 가져오기 하면.. 미리 설정된 특정 컬럼(=필드)의 순서대로 자료를
가져오게 됩니다. 그런데 나는 짜장면집 이름순서대로 보고 싶습니다.
그때 사용하는 것이 order by 입니다.
사용법은 order by 짜장면집이름 ASC
이렇게 하면 가나다,abc 같이 순서대로 정렬해서 가져옵니다.
ASC 대신 DESC 를 넣으면 역순으로 가져오고요. 그래서
select 짜장면집이름, 전화번호 from 전화번호부
where 지역="종로구" order by 짜장면집이름 ASC
라고 하면 종로구 지역에 있는 짜장면집 이름과 전화번호를
짜장면집이름 순서대로 정렬해서 가져와라! 가 됩니다.

그런데 어떤 이유로 해서 짜장면집 이름만 가져와 보기로 했다고 합시다.
그래서 select 짜장면집이름 from 전화번호부
where 지역="종로구" order by 짜장면집이름
라고 했더니만, 어이쿠.. 홍콩반점이 10개나 나오는 둥 같은 이름이 잔뜩
나와서 괴롭습니다. 이걸 하나하나 지우기도 귀찮고..
이걸 해결해주는 옵션이 distinct 입니다. 즉 가져오는 결과가 같은 것들이
여럿 있으면 하나만 남기고 지워줍니다. (앞에서처럼 이름과 전화번호가
같이 있는 상태면 전화번호는 다를 것이기에 소용이 없겠죠?)
select distinct 짜장면집이름 from 전화번호부
where 지역="종로구" order by 짜장면집이름 ASC
이러면 깔끔하게 짜장면집 이름들만 중봅없이 가져오게 됩니다.

group by 는 특정 필드 기준으로 나눠서 출력해줍니다.
예를 들어서 앞에서처럼 각 지역마다 존재하는 짜장면집이름을
가져오게 하고 싶다고 합시다.
그러면 group by 지역 이라 해주면 지역별로 출력해줍니다.
select distinct 짜장면집이름 from 전화번호부
order by 짜장면집이름 ASC
group by 지역

그런데 지역 중에서 종로구와 구로구만 가져와서 보고 싶습니다.
이럴 때 group by에 조건을 거는 것이(즉 group by에 대한 where 역할)
having 입니다.
select distinct 짜장면집이름 from 전화번호부
order by 짜장면집이름 ASC
group by 지역
having 지역 = "종로구" or 지역="구로구"

대강 써봤지만.. 역시 책을 보고 실습하시면서 익히시는게
최고일 것 같네요.. ^^;

posted by progh2