MSSQL

MSSQL SELECT 기초

우정2 2022. 6. 15. 12:44
반응형

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

반응형