제한된 행이있는 쿼리 선택 LIMIT:반환 할 행 수를 줄임 OFFSET(선택): 시작할 행 숫자 지정(입력한 숫자 다음 행부터 출력)
SELECTcolumn, another_column, …
FROM mytableWHERE condition(s)
ORDERBYcolumnASC/DESCLIMIT num_limit
OFFSET num_offset;
ex)
SELECT Title FROM Movies ORDER BY Title LIMIT 5 OFFSET 5 영화제목 알파벳 순서 6번째부터 5개
6. JOIN
1) INNER JOIN
On 양쪽 테이블의 id가 일치하는 부분 Join
SELECTcolumn, another_table_column, …
FROM mytable
INNERJOIN another_table
ON mytable.id = another_table.id
데이터를 얼마나 분석할 것인지에 따라 때론 Inner Join으로 충분하지 않을 수 있다. 결과 테이블에는 두 테이블 모두에 속하는 데이터만 포함되기 때문이다. 두 테이블에 비대칭 데이터(다른 값의 데이터)가 있을 경우 필요한 데이터가 결과에서 제외되지 않도록 left JOIN, Right JOIN 또는 FULL JOIN을 사용해야 한다.
2) OUTER JOIN(LEFT/RIGHT/FULL)
SELECTcolumn, another_column, …
FROM mytable
INNER/LEFT/RIGHT/FULLJOIN another_table
ON mytable.id = another_table.matching_id
A와 B 데이터가 있을 경우 LEFT JOIN은 모든 A의 ROW를 포함하고, RIGHT JOIN은 모든 B의 ROW를 포함한다. FULL JOIN은 A와 B의 모든 열을 포함한다. JOIN을 사용할 때 결과 및 제약 조건에서 NULL을 처리하는 추가 논리를 작성해야 할 수 있다.
3) CROSS JOIN
A 테이블의 첫 행이 B 테이블의 모든 행과 조인되고, 그 후 A테이블의 의 모든 행이 반복된다.
모든 경우의 수 즉,A 테이블 row 개수 X B 테이블 row 개수이다.
이러한 CROSS JOIN을 카티션 곱(Cartesian Product, 곱집합) 라고도 한다.
CROSS JOIN은 여러가지로 표현할 수 있는데, 아래 3가지 모두 같은 결과를 출력한다.
- ex.요리레시피 데이터 3) 1개의 테이블 안에 관계성이 명시되어야 할 데이터가 여러 개 존재할 때
- ex.비행기 항로나 기차의 여정과 같이 1개의 장소가 출발지가 되기도 하면서 도착지도 되는, 즉 하나의 데이터 값이 다른 데이터 사이에서 여러 관계성을 지닐 때
5) NATURE JOIN
등가 조인하는 방법 중 하나이다.
동일한 타입과 이름을 가진 컬럼을 조인 조건으로 이용하는 조인을 간단히 표현하는 방법이다.
SELECT 컬럼, 컬럼, … FROM 테이블1NATURALJOIN 테이블2
[NATURALJOIN 테이블3] …
WHERE 검색 조건;
반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요하다.
조인에 이용되는 컬럼은 명시하지 않아도 자동으로 조인에 사용된다.
동일한 이름을 갖는 컬럼이 있지만 데이터 타입이 다르면 에러가 발생한다.
조인하는 테이블 간의 동일 컬럼이 SELECT 절에 기술되도 테이블 이름을 생략해야 한다.
7. WHERE IS NULL / IS NOT NULL
SELECTcolumn, another_column, …
FROM mytable
WHEREcolumnIS/ISNOTNULLAND/OR another_condition
AND/OR …;
SQL database NULL 데이터베이스에서의 NULL의 대안은 0이나 -와 같은 적절한 기본값을 사용하는 것이지만, 이것은 자료를 왜곡할 수도 있다. 때론 NULL을 피할 수 없는 경우(비대칭 자료)도 있다. 이럴땐 WHERE IS/IS NOT NULL로 컬럼을 확인해볼 수 있다.
8. Queries with expressions (수식)
영화 평점 % 구하고 나열하기.
SELECT title, Rating*10AS RATEFROM movies
INNERJOIN boxoffice
ON ID=MOVIE_ID
high-level metrics
표현식을 사용해 쿼리의 열 값에 대해 더 복잡한 작성 가능. 이러한 식은 쿼리가 실행될 때 값을 변환하기 위해 기본 산술과 함께 수학 및 문자열 함수를 사용할 수 있다.
식을 사용하면 시간을 절약하고 결과 데이터의 추가 사후 처리를 줄일 수 있지만 쿼리를 읽기 어렵게 만들 수도 있으므로 SELECT식을 사용할 때 AS를 사용해 열 이름을 새로 지정한다.
표현식 외에도 일반 열과 테이블도 출력에서 더 쉽게 참조하고 더 복잡한 쿼리를 단순화하기 위해 별칭을 가질 수 있다.
SELECT AGG_FUNC(column_or_expression) AS aggregate_description, …
FROM mytable
WHERE constraint_expression;
10. Grouped aggregate functions
1) GROUP BY
모든 행을 집계(aggregate)하는 것 외에도 해당 그룹 내의 개별 데이터 그룹에 집계 함수를 적용 할 수 있습니다 (예 : 코미디 대 액션 영화의 박스 오피스 판매). GROUP BY는 지정된 열에 동일한 값을 가진 행을 그룹화하여 작동합니다.
SELECT AGG_FUNC(column_or_expression) AS aggregate_description, …
FROM mytable
WHERE constraint_expression
GROUPBYcolumn;
ex) SELECT role,AVG(Years_employed) FROM employees GROUP BY role -> For each role, find the average number of years employed by employees in that role
2) HAVING
SELECT group_by_column, AGG_FUNC(column_expression) AS ``aggregate_result_alias, …
FROM mytable
WHEREconditionGROUPBYcolumnHAVING group_condition;
: to filter grouped rows from the result set. The HAVING clause constraints are written the same way as the WHERE clause constraints and are applied to the grouped rows.
🎁WHERE(Not a group) =GROUP & HAVING(group)
- WHEREvsGROUP BYvsGROUP BY & HAVING
SELECT role,COUNT(*) FROM employees WHERE Role='Artist'
SELECT role,COUNT(*) FROM employees Group by Role
SELECT Role,Sum(Years_employed) FROM employees GROUP BY Role HAVING ROLE ='Engineer'