본문으로 건너뛰기

SELECT 문(1)

기본적인 <SELECT... FROM>


SELECT 문의 구문 형식

/* []는 생략 가능 */
[WITH <common_table_expression>] -- 공통 테이블 표현식을 정의
SELECT select_list [INTO new_table] -- 선택한 컬럼을 반환하고, 선택적으로 새로운 테이블에 저장
[FROM table_source] -- 데이터를 가져올 테이블을 지정
[WHERE search_condition] -- 조건에 맞는 행을 필터링
[GROUP BY group_by_expression] -- 행을 그룹화
[HAVING search_condition] -- 그룹화된 행을 필터링
[ORDER BY order_expression [ASC|DESC]] -- 결과를 정렬
구문 요소설명
WITH <common_table_expression>공통 테이블 표현식을 정의 (생략 가능)
SELECT select_list [INTO new_table]선택한 컬럼을 반환, INTO ... 선택적으로 새로운 테이블에 저장
FROM table_source데이터를 가져올 테이블을 지정
WHERE search_condition조건에 맞는 행을 필터링
GROUP BY group_by_expression행을 그룹화
HAVING search_condition그룹화된 행을 필터링
ORDER BY order_expression [ASCㅣDESC]결과를 정렬, ASC = 오름차순 / DESC = 내림차순

가장 간단한 SELECT 형식

SELECT 열목록
FROM 테이블
WHERE 조건

USE 구문

USE 데이터베이스_이름

SELECT와 FROM

USE 구문과 SELECT 구문을 사용하는 예제.

USE Adventureworks

SELECT * FROM HumanResources.Employee

SELECT * FROM [HP-PC].AdventureWorks.
HumanResources.Employee

SELECT Name, GroupName FROM
HumanResources.Department

위 예제에서는 Adventureworks 데이터베이스를 사용하고,
HumanResources.Employee 테이블과
HumanResources.Department 테이블에서
데이터를 선택하는 방법




DB 이름, 스키마이름, 테이블 이름 등이 정확히 기억나지 않을 때


데이터 베이스 목록 조회

EXEC sp_helpdb;

테이블 정보 조회

EXEC sp_tables @table_type = "'TABLE'";

열 이름 조회

EXEC sp_columns
@table_name= ‘테이블이름’,
@table_owner= ‘스키마이름’;



조건조회 <SELECT...FROM...WHERE>

기본적인 WHERE 절

SELECT 필드이름 FROM 테이블이름 WHERE 조건식

관계연산자의 사용

SELECT userID, name FROM userTbl
WHERE birthYear >= 1970 AND height >= 182

userTbl 테이블에서 userID와 name을 검색
여기서 birthYear는 1970보다 크고 키는 182보다 커야한다


BETWEEN... AND와 IN()

/* height를 조건으로 180과 183 사이인 사용자 검색 */
SELECT name, height FROM userTbl WHERE height
BETWEEN 180 AND 183

/* addr이 '경남', '전남', '경북' 중 하나인 사용자 검색 */
SELECT name, addr FROM userTbl WHERE addr IN ('경남', '전남', '경북')

ANY / ALL / SOME 그리고 하위쿼리(SubQuery, 서브쿼리)

/* '경남'에 주소를 둔 사용자의 키 중 하나 이상과 같거나 큰 사용자의 이름과 키를 선택합니다. */
SELECT name, height FROM userTbl
WHERE height >= ANY (SELECT height FROM userTbl WHERE addr = '경남')

/* '경남'에 주소를 둔 사용자의 키 중 하나와 정확히 같은 사용자의 이름과 키를 선택합니다. */
SELECT name, height FROM userTbl
WHERE height = ANY (SELECT height FROM userTbl WHERE addr = '경남')

ORDER BY

순서대로 정렬

/* mDate 순서대로 정렬하여 userTbl 에서 name, mDate 조회 */
SELECT name, mDate FROM userTbl ORDER BY mDate

DISTINCT

중복 제거

/* userTbl 에서 addr 컬럼의 중복을 제외한 조회 */
SELECT DISTINCT addr FROM userTbl

TOP(N)

상위 N개만 출력

SELECT TOP(10) CreditCardID FROM Sales.CreditCard

SELECT TOP(0.1) PERCENT CreditCardID FROM
Sales.CreditCard

TABLESAMPLE

일정 샘플 추출

SELECT * FROM Sales.SalesOrderDetail
TABLESAMPLE(5 PERCENT)

SELECT INTO

테이블 복사에 주로 사용

SELECT 복사할열 INTO 새로운_테이블 FROM 기존_테이블
SELECT * INTO buyTbl2 FROM buyTbl

OFFSET과 FETCH NEXT

지정한 행의 수만큼 건너 뛴 후에 출력

SELECT userID, name, birthYear FROM userTBL
ORDER BY birthYear
OFFSET 4 ROWS
FETCH NEXT 3 ROWS ONLY