SQL Server / Query / SELECT / 데이터 조회
예제로 사용한 데이터베이스는 AdventureWorks이다.
SELECT로 원하는 데이터를 조회한다.
목차
SELECT FROM
기본
SELECT 뒤에는 조회할 열 이름을, FROM 뒤에는 조회할 테이블 이름을 입력한다. 모든 열을 조회한다면 *를 사용한다.
- HumanResources.Employee 테이블의 모든 열을 조회한다.
select * from HumanResources.Employee ;
- HumanResources.Employee 테이블에서 BusinessEntityID, JobTitle, BirthDate, HireDate를 조회한다.
select BusinessEntityID, JobTitle, BirthDate, HireDate from HumanResources.Employee ;
TOP
TOP으로 조회 개수를 정한다.
- 상위 10개를 조회한다.
select top( 10 ) * from HumanResources.Employee ;
- 상위 10%를 조회한다.
select top( 10 ) percent * from HumanResources.Employee ;
DISTINCT
DISTINCT로 중복된 것은 하나만 조회할 수 있다.
- 중복된 것을 제외하고 JobTitle을 조회한다.
select distinct JobTitle from HumanResources.Employee ;
JOIN
WHERE
WHERE 절을 이용하여 특정 조건에 부합하는 데이터만 조회할 수 있다.
- JobTitle이 Design Engineer인 데이터만 조회한다.
select BusinessEntityID, JobTitle, BirthDate, HireDate from HumanResources.Employee where JobTitle = 'Design Engineer' ;
GROUP BY
GROUP BY 절을 이용하여 데이터를 그룹화할 수 있다. COUNT(), SUM() 등 집계함수와 함께 사용한다.
- JobTitle로 그룹화하고 BusinessEntityID의 수를 조회한다. 즉 JobTitle별 사람 수를 의미한다.
select JobTitle, count( BusinessEntityID ) as Count from HumanResources.Employee group by JobTitle ;
HAVING
집계 함수에 대해 조건은 HAVING으로 만든다.
- 사람 수가 2보다 큰 JobTitle을 조회한다.
select JobTitle, count( BusinessEntityID ) as Count from HumanResources.Employee group by JobTitle having count( BusinessEntityID ) > 2 ;
ROLLUP
ORDER BY
ORDER BY 절을 이용하여 오름차순 또는 내림차순으로 정렬할 수 있다. 오름차순일 때는 ASC를, 내림차순일 때는 DESC를 붙인다. 기본값은 ASC이므로 생략 가능하다.
- JobTitle 오름차순으로 정렬한다.
select * from HumanResources.Employee order by JobTitle ;
- JobTitle 오름차순, HireDate 내림차순으로 정렬한다.
select * from HumanResources.Employee order by JobTitle, HireDate desc ;
ntext, text, image, geography, geometry, xml 등의 데이터 형식에 대해서는 order by를 사용할 수 없다.
OFFSET, FETCH
OFFSET은 지정한 행의 수만큼 생략하고 출력하게 한다. ORDER BY와 함께 사용한다.
- BusinessEntityID 오름차순으로 출력하되, 상위 4개의 행을 생략한다.
select * from HumanResources.Employee order by BusinessEntityID offset 4 rows ;
FETCH로 출력할 행의 수를 제한할 수 있다.
- BusinessEntityID 오름차순으로 출력하되, 상위 4개의 행을 생략하고, 10개를 출력한다.
select * from HumanResources.Employee order by BusinessEntityID offset 4 rows fetch next 10 rows only ;