SQL-SELECT
데이터베이스 개론 - 교보문고
[요약]①데이터베이스 기초 이론 : 1장에서 데이터베이스를, 2장에서 DBMS를 소개합니다. 3장에서는 이들을 조합한 데이터베이스 시스템을 소개합니다.②데이터 모델과 연산 : 4장에서 데이터 모
www.kyobobook.co.kr
SQL의 데이터 조작 기능은 검색, 삽입, 수정, 삭제로 분류한다.
데이터 검색
기본 검색
SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트;

모든 속성을 출력할 때는 *(애스터리스크)를 사용하면 편하다.

테이블의 중복을 허용하도록 all 키워드를 명시적으로 사용할 수 있다.
명시하지 않아도 all 키워드를 사용한 것과 결과는 같다.

테이블에서 중복을 제거하고 한 번씩만 출력되도록 하려면 DISTINCT 키워드를 사용한다.

AS 키워드를 사용하여 이름을 다른 이름으로 바꾸어 출력할 수도 있다.
실제 바뀌는 것이 아니라 출력할 때만 바뀐다.
공백이 있으면 작은 따옴표로 묶어주어야 한다.

SELECT 키워드와 함께 산술식을 제시할 수 있다.

조건 검색
조건을 만족하는 데이터만 검색하는 SELECT 문의 기본 형식은 다음과 같다.
SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건];


LIKE 검색
| 기호 | 설명 |
| % | 0개 이상의 문자(문자의 내용과 개수는 상관 없음) |
| _ | 1개의 문자(문자의 내용은 상관 없음) |
| 사용 예 | 설명 |
| LIKE '데이터%' | '데이터'로 시작하는 문자열 |
| LIKE '%데이터' | '데이터'로 끝나는 문자열 |
| LIKE '데이터%' | '데이터'가 포함된 문자열 |
| LIKE '데이터___' | 데이터로 시작하는 6자 길이의 문자열 |
| LIKE '__한%' | 세 번째 글자가 '한'인 문자열 |


NULL 검색
검색 조건에서 특정 속성의 값이 널 값인지를 비교하려면 IS NULL 키워드를 사용한다.
널이 아닌지 비교하려면 IS NOT NULL을 사용한다.

정렬 검색
테이블의 출력은 데이터베이스 관리 시스템이 정한 순서로 출력된다.
오름차순 혹은 내림차순 정렬을 원한다면 ORDER BY 키워드를 사용하자.
SELECT [ALL | DISTINCT ] 속성_리스트
FROM 테이블_리스트
[ WHERE 조건 ]
[ ORDER BY 속성_리스트 [ASC | DSC ] ];
ASC는 오름차순이고
DESC는 내림차순이다.

집계 함수를 이용한 검색
특정 속성 값으로 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용할 수 있다.
| 함수 | 의미 | 사용 가능한 속성의 타입 |
| COUNT | 속성 값의 개수 | 모든 데이터 |
| MAX | 속성 값으 최댓값 | |
| MIN | 속성 값의 최솟값 | |
| SUM | 속성 값의 합계 | 숫자 데이터 |
| AVG | 속성 값의 평균 |
주의점
- 집계 함수는 널인 속성 값은 제외하고 계산한다.
- 집계 함수는 WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용할 수 있다.
AVG

SUM

COUNT

모든 투플의 개수를 계산할 때 * 사용하면 편하다.
DISTINCT를 사용하여 중복을 없앨 수 있다.
그룹별 검색
특정 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색을 하기 위해 GROUP BY 키워드를 사용한다.
그룹에 조건을 추가하고 싶으면 HAVING 키워드와 함께 사용하면 된다.
SELECT [ ALL | DISTINCT ] 속성_리스트
FROM 테이블 리스트
[ WHERE 조건]
[ GROUP BY 속성_리스트 [ HAVING 조건]]
[ ORDER BY 속성_리스트 [ ASC | DESC ]];

그룹에 대한 조건은 HAVING 절에 작성한다.
집계 함수는 HAVING 절에서만 사용 가능하다.

조인 검색
여러 개의 테이블을 연결하여 데이터를 검색하는 것을 조인 검색이라 한다.
테이블을 연결하려면, 조인 속성의 이름은 달라도 되지만 도메인은 반드시 같아야 한다.

부속 질의문
SELECT 문 안에 또 다른 SELECT 문을 포함할 수 있다.
SELECT 문 안에 있는 SELECT 문을 부속 질의문 또는 서브 질의문이라 한다.
부속 질의문은 상위 질의문 보다 먼저 수행되며 ORDER BY 절을 사용할 수 없다.

부속 질의문은 다중 행이냐 단일 행이냐에 따라 사용할 수 있는 연산자가 다르다.
| 연산자 | 설명 |
| IN | 부속 질의문의 결과 값 중 일치하는 것이 있으면 검색 조건이 참 |
| NOT IN | 부속 질의문의 결과 값 중 일치하는 것이 없으면 검색 조건이 참 |
| EXISTS | 부속 질의문의 결과 값이 하나라도 존재하면 검색 조건이 참 |
| NOT EXISTS | 부속 질의문의 결과 값이 하나도 존재하지 않으면 검색 조건이 참 |
| ALL | 부속 질의문의 결과 값 모두와 비교한 결과가 참이면 검색 조건을 만족(비교 연산자와 함께 사용) |
| ANY 또는 SOME | 부속 질의문의 겨로가 값 중 하나라도 비교한 결과가 참이면 검색 조건을 만족( 비교 연산자와 함께 사용) |