SELECT D.ID, D.NAME, S.SALARY
FROM EMPLOYEES D
JOIN SALARIES S ON D.ID = S.EMPLOYEE_ID
WHERE S.SALARY > 50000;
이것보단
SELECT D.ID, D.NAME, S.SALARY
FROM (SELECT * FROM SALARIES WHERE SALARY > 50000) S
JOIN EMPLOYEES D ON D.ID = S.EMPLOYEE_ID;
이 코드가 낫다.
조건부 Salaries 테이블을 S로 둔 다음 D 테이블 쪼인.
1) 함수 사용
SELECT FROM USERS WHERE LOWER(NAME) = 'john doe'; -- 인덱스 사용 X
이 코드보단
SELECT FROM USERS WHERE NAME = 'John Doe'; -- 인덱스 사용 O
이 코드가 낫다
2) like 사용 - %가 앞에 있으면 인덱스 사용 불가하다!
SELECT FROM CUSTOMERS WHERE EMAIL LIKE '%gmail.com'; -- 인덱스 사용 X
이 코드 보단
SELECT FROM CUSTOMERS WHERE EMAIL LIKE 'john%'; -- 인덱스 사용 O
이 코드가 낫다.
Join 으로 변환해버리고, 조건 거는게 보통 낫다.
SELECT FROM DEVELOPERS WHERE SKILL = 'Python' OR SKILL = 'C#'; 보단
SELECT FROM DEVELOPERS WHERE SKILL_CODE & (SELECT BIT_OR(CODE) FROM SKILLCODES WHERE NAME IN ('Python', 'C#'));
Union, union all은 두개 이상의 select 쿼리 결과를 결합할 때 사용한다.
( 다른 테이블에서 비슷한 형태의 데이터 합칠 때 사용)