ex) author와 post를 inner 조인하면 글을 작성한 적이 있는 author와 해당 author가 작성한 post정보를 결합하여 조회
- 가장 일반적인 형태
- SELECT * FROM tableA INNER JOIN tableB ON tableA.ID = tableB.A_ID
- SELECT * FROM tableA AS a INNER JOIN tableB AS b on a.ID = b.a_id;
TableA의 모든컬럼 + TableB의 모든 컬럼
그 중에 ON조건을 만족하는 row만 출력
SELECT FROM tableA INNER JOIN tableB ON tableA.ID = tableB.A_ID
SELECT FROM tableA AS a INNER JOIN tableB AS b on a.ID = b.a_id;
ex) author의 테이블은 일단 다 조회하고 author가 작성한 글정보를 조회하고 싶다면, author테이블에 post테이블을 left join
SELECT * FROM tableA a LEFT JOIN tableB b ON a.id = b.a_id
SELECT * FROM tableA AS a INNER JOIN tableB AS b on a.ID = b.a_id where a.name like ‘kim%’;
여러 개의 SELECT문의 결과를 하나의 테이블이나 결과 집합으로 표현
각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 일치해야함
UNION은 DISTINCT 키워드를 따로 명시하지 않아도 중복되는 레코드를 제거
SELECT 컬럼1, 컬럼2 FROM TABLE1 UNION SELECT 컬럼1, 컬럼2 FROM TABLE2;
WITH RECURSIVE 키워드는 sql에서 재귀문으로서 자기 자신을 참조하여 반복적으로 데이터를 생성하거나 변형하면서 하나의 테이블을 만드는 용도로 사용
UNION과 함께 사용되며 데이터행을 더해나가는 방식
WITH RECURSIVE 재귀문에서 WHERE 절은 재귀적으로 생성되는 각각의 행에 대해 평가되며, 조건이 거짓이 되는 순간 더 이상 새로운 행을 생성하지 않고, 전체 재귀문이 STOP
예시)
0~10까지 출력
WITH RECURSIVE cte(cnt) AS (
SELECT 0
UNION ALL
SELECT cnt + 1 FROM cte WHERE cnt < 10
)
SELECT cnt FROM cte;
- 예시)피보나치 수열
WITH RECURSIVE Fibonacci (n, fib1, fib2) AS (
SELECT 1, 0, 1 -- 초기 값 설정
UNION ALL
SELECT n + 1, fib2, fib1 + fib2 FROM Fibonacci WHERE n < 10 -- 재귀 단계
)
SELECT n, fib1 FROM Fibonacci;
- SELECT a.* FROM author a INNER JOIN post p ON a.id = p.author_id;
- SELECT a.* FROM author a WHERE a.ID IN (SELECT p.author_id FROM post p);
SELECT 컬럼명 FROM 테이블명 GROUP BY 컬럼명
예시)
SELECT author_id, COUNT(*) FROM post GROUP BY author_id
만약 post마다 원고료가 있었다면
SELECT author_id, SUM(price), AVG(price) FROM post GROUP BY author_id
WITH - RECURSIVE
WITH RECUTSIVE number_sequence(HOUR) AS (
SELECT 0
UNION ALL
SELECT HOUR + 1 FROM number_sequence WHERE HOUR < 23
)
WHERE 문의 재귀함수의 종료조건을 쓴다.
SELECT author_id, COUNT(*) AS count FROM post GROUP BY author_id HAVING count > 3;
결론은, 테이블의 특정 컬럼의 INDEX 정보를 만들어 검색의 속도를 높이기 위해서 사용
예시)
특정컬럼에 index가 없이 테이블 전체를 읽어야 하는 case
id=897 번째의 데이터를 조회하기 위해서는 897번의 check가 필요
예시)
id 컬럼에 대해 index가 만들어져 있어, 성능이 향상되는 case
show index from 테이블명;
CREATE INDEX index_name ON 테이블명(컬럼명);
복합(다중 컬럼) 인덱스 생성
CREATE INDEX index_name ON 테이블명(컬럼1, 컬럼2);
select * from author where id = 1;
select * from author where id = 1 and name = ‘abc’;