Transact-SQL ( Select ) : 회원데이터, 구매데이터 사용예
Transact-SQL 2008. 11. 14. 01:37 |--============================================================--
-- SELECT
--============================================================--
-- 가장 간단한 select 구문
select * from userTbl
/* 결과
userID name birthYear addr mobile1 mobile2 height
-------- ---------- ----------- ---- ------- -------- ------
AJH 안정환 1979 강원 NULL NULL 182
CJC 최진철 1975 제주 011 0000000 142
JJJ 조재진 1986 충북 019 3333333 179
*/
--============================================================--
-- SELECT + WHERE + 관계 연산자
--============================================================--
-- where 가 포함된 select 구문
select * from userTbl where name = '박지성'
/* 결과
userID name birthYear addr mobile1 mobile2 height
-------- ---------- ----------- ---- ------- -------- ------
PJS 박지성 1983 서울 011 1111111 181
*/
-- 1980년 이후에 출생하고, 신장이 180 이상인 사람의 아이디와 이름을 조회
select userID, Name from userTbl where birthYear >= 1981 and height >= 180
/* 결과
userID Name
-------- ----------
LYP 이영표
PJS 박지성
*/
-- 1980년 이후에 출생했거나, 신장이 180 이상인 사람의 아이디와 이름을 조회
select userID, Name from userTbl where birthYear >= 1981 or height >= 180
/* 결과
userID Name
-------- ----------
AJH 안정환
JJJ 조재진
KNI 김남일
LCS 이천수
LYP 이영표
PJS 박지성
PJY 박주영
SJK 송종국
*/
--============================================================--
-- SELECT + WHERE + BETWEEN... AND 와 IN()
--============================================================--
-- 신장이 180 ~ 183인 사람을 조회
select name, height from userTbl where height >= 180 and height <= 183
/* 결과
name height
---------- ------
안정환 182
김남일 183
이영표 181
박지성 181
*/
-- 신장이 180 ~ 183인 사람을 조회 ( between )
select name, height from userTbl where height between 180 and 183
/* 결과
name height
---------- ------
안정환 182
김남일 183
이영표 181
박지성 181
*/
-- 키가 정확하게 178, 180, 182 인 사람의 정보만을 조회
select name, height from userTbl where height=178 or height=180 or height=182
/* 결과
name height
---------- ------
안정환 182
박주영 178
설기현 178
*/
--============================================================--
-- SELECT + WHERE + ANY, ALL, SOME 그리고 하위쿼리(SubQuery, 서브쿼리)
--============================================================--
-- 박지성의 보다 키가 큰 사람의 이름과 키를 출력하려면 where 조건에 박지성의
-- 키를 적어 줘야 한다.
select name, height from userTbl where height > 181
/* 결과
name height
---------- ------
안정환 182
김남일 183
송종국 185
*/
-- 이를 쿼리를 통해서 사용할 수 있다.
select name, height from userTbl
where height > (select height from userTbl where name='박지성')
/* 결과
name height
---------- ------
안정환 182
김남일 183
송종국 185
*/
-- 구문 011에 포함된, 내용이 두개 이상이기 때문에 오류가 납니다.
select name, height from userTbl
where height >= (select height from userTbl where mobile1='011')
-- >> 두개의 결과값이 한개 이상이라서 오류가 난다.
-- >> 이때 해결할 것은 ANY를 사용하면 된다.
/* 결과
메시지 512, 수준 16, 상태 1, 줄 1
하위 쿼리에서 값을 둘 이상 반환했습니다
*/
-- ANY 011에 포함된 내용을 모두 사용해서 결과값을 뽑는다.
select name, height from userTbl
where height >= ANY (select height from userTbl where mobile1='011')
/* 결과
name height
---------- ------
안정환 182
최진철 142
조재진 179
김남일 183
이천수 179
이영표 181
박지성 181
박주영 178
송종국 185
설기현 178
*/
-- ALL 을 사용해서 처리
select name, height from userTbl
where height >= ALL (select height from userTbl where mobile1='011')
/* 결과
name height
---------- ------
안정환 182
김남일 183
이영표 181
박지성 181
송종국 185
*/
--
select name, height from userTbl
where height = ANY (select height from userTbl where mobile1='011')
/* 결과
name height
---------- ------
최진철 142
조재진 179
이천수 179
이영표 181
박지성 181
박주영 178
설기현 178
*/
-- ANY, IN 두개 동일한 의미이다.
select name, height from userTbl
where height IN (select height from userTbl where mobile1='011')
/* 결과
name height
---------- ------
최진철 142
조재진 179
이천수 179
이영표 181
박지성 181
박주영 178
설기현 178
*/
--============================================================--
-- SELECT + WHERE + ORDER BY 절
--============================================================--
-- ORDER BY
select name, height from userTbl order by height desc
/* 결과
name height
---------- ------
송종국 185
김남일 183
안정환 182
이영표 181
박지성 181
이천수 179
조재진 179
박주영 178
설기현 178
최진철 142
*/
-- order by 를 두개 사용, desc, asc 두개를 혼합
select name, height from userTbl order by height desc, name asc
/* 결과
name height
---------- ------
송종국 185
김남일 183
안정환 182
박지성 181
이영표 181
이천수 179
조재진 179
박주영 178
설기현 178
최진철 142
*/
--============================================================--
-- SELECT + WHERE + DISTANCE, TOP(N), TABLESAMPLE
--============================================================--
-- 거주지역이 몇 군데인지 출력
select addr from userTbl
/* 결과
addr
----
강원
제주
충북
경북
인천
전북
서울
경기
경기
서울
*/
-- 거주지역에 order by 사용
select addr from userTbl order by addr
/* 결과
addr
----
강원
경기
경기
경북
서울
서울
인천
전북
제주
충북
*/
-- DISTINCT 를 사용해서 중복내용을 삭제
select distinct addr from userTbl
/* 결과
addr
----
강원
경기
경북
서울
인천
전북
제주
충북
*/