3장. 쿼리입문
3.2. 쿼리(query) 절
select문

3.3. Select 절
select 절
Select절에 추가할 수 있는 항목
- 숫자 또는 문자열
- 표현식
- 내장 함수 호출 및 사용자 정의 함수 호출
SELECT language_id,
'COMMON' language_usage,
language_id * 3.14 lang_pi_value,
upper(name) language_name
FROM language;
- 원래 language 테이블에는 없는 컬럼 (가상 컬럼)

열의 별칭(column alias)
- 열의 레이블을 지정할 수 있음
- 출력을 이해하기 쉽게 함
- AS(as) 키워드 사용: 가독성 향상
중복 제거
- 동일한 배우가 여러 영화에 출연: 중복된 actor_id 발생
- all 키워드: 기본값, 명시적으로 지정할 필요가 없음
- DISTINCT(또는 distinct) 키워드 사용: 중복 제거
SELECT DISTINCT actor_id FROM film_actor ORDER BY actor_id;
3.4 From 절
From 절 역할
- 쿼리에 사용되는 테이블을 명시
- 테이블을 연결하는 수단
테이블 유형: from 절에 포함
- 영구 테이블(permanent table)
- CREATE TABLE 문으로 생성된 테이블
- 파생 테이블(derived table)
- 하위 쿼리(subquery)에서 반환하고 메모리에 보관된 행
- 임시 테이블(temporary table)
- 메모리에 저장된 휘발성 데이터
- 가상 테이블(virtual table)
- CREATE VIEW 문으로 생성
파생 테이블
- subquery(서브 쿼리): 9장 참조
• FROM 절에 위치한 SELECT문(서브 쿼리)은 실행 결과로 테이블을 생성: 파생 테이블
• 즉, 다른 테이블과의 상호작용을 할 수 있는 파생 테이블을 생성
- concat(문자열1, 문자열2, ...): 둘 이상의 문자열을 순서대로 합쳐서 반환

임시 테이블
- 휘발성의 테이블: 데이터베이스 세션이 닫힐 때 사라짐\

가상 테이블(View)
- SQL 쿼리의 결과 셋을 기반으로 만들어진 가상 테이블
- 실제 데이터가 저장되는 것이 아닌, view를 통해 데이터를 관리
- 복잡한 쿼리문을 매번 사용하지 않고 가상 테이블로 만들어서 쉽게 접근함!
3.5. Where 절
테이블 연결
- JOIN(INNER JOIN)
• 두 개 이상의 테이블을 묶어서 하나의 결과 집합을 만들어 내는 것

• 연결(결합) 조건: on
- customer 테이블의 customer_id와 rental 테이블의 customer_id의 값이 일치하는 경우에만 데이터를 가져옴.
테이블 연결
DATETIME 데이터
테이블 연결(inner join) 결과
SELECT customer.first_name, customer.last_name,
time(rental.rental_date) rental_date
FROM customer inner join rental
ON customer.customer_id = rental.customer_id
WHERE date(rental.rental_date) = '2005-06-14';

테이블 별칭 정의
- 여러 테이블을 join할 경우, 테이블 및 열 참조 방법
• 테이블 이름 및 열 이름 사용
• 각 테이블의 별칭을 할당하고 쿼리 전체에서 해당 별칭을 사용
- AS 키워드 사용

where 절
- 필터 조건: 조건에 맞는 행의 데이터만 가져옴
• AND, OR, NOT 연산자 사용
Where절 검색 조건
- and, or 사용
• (G등급이면서 7일 이상 대여할 수 있거나), (PG-13 등급이면서 3일 이내로 대여)할 수 있는 영화 목록
3.6 Group by절과 having절
GROUP BY
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
HAVING (필터링 조건)
- 특정 열을 그룹화한 결과에 필터링 조건을 설정: group by 이후에 having 위치
• WHERE: 모든 필드에 대한 필터링 수행, from 다음에 위치
3.7 Order by 절
order by 절
ORDER BY [컬럼명 | 컬럼번호] [ASC | DESC]
- 지정된 컬럼(열)을 기준으로 결과를 정렬 (다중 컬럼인 경우, 왼쪽부터 정렬)
- 오름차순(ASC): 기본 정렬 값, 내림차순(DESC)
• 영화 대여 고객의 last_name을 기준으로 정렬- 오름 차순 정렬 (asc는 생략 가능)
• 고객 중 last_name이 동일한 경우,- first_name 으로 다시 정렬
내림 차순 정렬: DESC
컬럼의 순서(컬럼의 인덱스)를 통한 정렬
- order by 다음에 정렬 기준이 되는 컬럼의 순서(index)를 사용