MSSQL SELECT 기초
SELECT 문의 가장 기본은
SELECT * FROM 테이블명 WHERE 조건 이다.
- 기본적으로 모든 컬럼을 가져올 때는 * 를 사용하지만, * 를 사용하는 것은 성능을 저하시킨다.
되도록이면 필요한 컬럼명을 써주는 습관을 들이자.
그 밖의 SELECT 문에서 기초가 되는 내용을 알아보자.
1. NULL
- NULL 은 값이 ""(빈칸)이나 0 이 아니다. 값이 없는 것이다. 비교를 하려면 컬럼이 NULL 인지를 체크해야 한다.
예)
SELECT title
FROM titles
WHERE price IS NULL (IS NOT NULL)
--> titles 테이블에서 price 컬럼이 NULL 인 (NULL 이 아닌) title 을 가져온다.
* NULL 값을 다른 값으로 바꿀 땐 - ISNULL
예)
SELECT title, ISNULL(price, 0)
FROM titles
--> titles 테이블에서 title, price 항목을 보는데 price 항목이 NULL 이면 0 으로 바꿔서 나타나게 한다.
2. 정렬 - ORDER BY
- 정렬을 하고 싶을 땐 ORDER BY를 사용한다.
- DESC 는 내림차순, ASC 는 오름차순이다. 안써주면 디폴트로 ASC 이다.
예)
SELECT title, price
FROM titles
ORDER BY price DESC
--> titles 테이블에서 price 가 큰 값 부터 title, price 를 가져온다.
3. 몇개만 가져오기 - TOP n
- 전체 행 중 일부분만 가져오고 싶을 때 TOP n 을 사용한다.
예)
SELECT TOP 5 title
FROM titles
--> titles 테이블에서 title 을 5개만 가져온다.
4. 범위 - BETWEEN
- 범위를 주고 데이터를 가져오려면 BETWEEN 을 사용한다.
예)
SELECT title
FROM titles
WHERE price BETWEEN 10000 AND 20000
--> titles 테이블에서 price 가 10000 ~ 20000 사이인 title 항목을 가져온다.
5. 목록 - IN
- 특정한 값들만 가져오려면 IN 을 사용한다.
예)
SELECT title
FROM titles
WHERE title_id IN ('BK1022', 'SS4432', 'MC1121')
--> titles 테이블에서 title_id 가 BK1022 또는 SS4432 또는 MC1121 인 title 항목을 가져온다.
6. 중복행 제거 - DISTINCT
- 같은 데이터가 두개 이상일 경우 중복을 없에서 한번씩만 볼 수 있다.
예)
SELECT DISTINCT(title)
FROM titles
--> titles 테이블에 있는 title 값을 중복을 제거하고 한번씩만 보여준다.
7. GROUP BY / HAVING, GROUP BY ALL
- 같은 내용을 그룹으로 묶어 합계를 내거나 평균 등을 볼 때 GROUP BY 를 사용한다.
- HAVING 은 조건을 줄 수 있는 GROUP BY 절의 WHERE 절이라고 생각하면 된다.
- GROUP BY ALL 은 WHERE 절에서 제외된 내용일지라도 결과에 포함시킬 때 사용한다.
예)
SELECT title_id, sum(price)
FROM titles
WEHRE price > 10000
GROUP BY title_id
HAVING sum(price) > 50000
--> titles 테이블에서 price 가 10000 보다 큰 자료들을 title_id 가 같은 데이터들을 합해서 가져오는데
그 합이 50000 이 넘는 자료를 가져온다.
8. COMPUTE / COMPUTE BY
- GROUP BY 는 그룹에 대한 부분합계를 볼 수 있어 좋지만, 상세 내역을 볼 수 없다.
- 상세 내역과 그룹 합계를 한꺼번에 볼 때 COMPUTE, COMPUTE BY 를 사용한다.
- 전체에 대한 합계를 볼 때에는 COMPUTE 를 쓴다.
예)
SELECT type, title_id, price
FROM titles
COMPUTE avg(price)
- 그러나 그룹별로도 합계를 보고 싶다면 COMPUTE BY 를 사용해야 한다.
- COMPUTE BY 를 사용하려면 ORDER BY 가 COMPUTE BY 앞에 와야만 하고,
ORDER BY 에서 지정한 순서대로 또는 그 일부분의 순서대로 COMPUTE BY 를 사용해야 한다.
예)
SELECT type, pub_id, title_id, price
FROM titles
ORDER BY type, pub_id, title_id
COMPUTE avg(price) BY type, pub_id
9. ROLLUP / CUBE
- COMPUTE BY, COMPUTE 문은 ANSI 호환성이 없다. 왜냐하면, 이 문장의 결과들은
그 결과값들이 새로운 행에 나타난다.
따라서, 이 결과를 새로운 테이블에 저장할 수도 없다.
이럴 경우에는 ROLLUP 을 사용하는 것이 낫다.
- ROLLUP 을 잘 살펴보면 오른쪽에서 왼쪽으로 결과를 도출해 낸다.
- 주의 할점 : 10개 이상의 컬럼은 사용할 수 없다. GROUP BY ALL 은 사용할 수 없다.
예)
SELECT title, pub_id, AVG(price)
FROM titles
GROUP BY title, pub_id
WITH ROLLUP
- CUBE 는 ROLLUP을 실행한 다음 그 외의 가능한 그룹을 만들어 낸다.
예)
SELECT title, pub_id, AVG(price)
FROM titles
GROUP BY title, pub_id
WITH CUBE