INNER JOIN : 교집합. 두 테이블에 데이터가 모두 존재하는 경우 조회.
LEFT(RIGHT) OUTER JOIN : 기준 테이블의 모든 데이터 + 조인 데이터 참조. 조인 데이터가 없을 경우 NULL 값 처리.
FULL OUTER JOIN : 두 개 테이블 모두 조회. 조인 데이터 없을 경우 NULL값 처리.
JOIN시 ON / WHERE 차이
- ON : 조인 전 처리
- WHERE: 조인 후 처리
IN(100,200) : 둘 중 하나라도 포함. 100 OR 200
=> 값이 100인 데이터와 200인 데이터 출력
> ALL(100,200) : 모든 조건 만족. 100 > AND 200 >
=> 100보다 크고, 200보다 큰 데이터 출력
> ANY(100,200) / > SOME(100,200) : 둘 중 하나라도 조건 만족. 100 OR 200 (명칭만 다를 뿐 ANY와 SOME은 동일 기능)
=> 100보다 크거나 200보다 큰 데이터 출력
EXISTS (서브쿼리) : 조건의 TRUE/FALSE 체크, 서브쿼리를 만족하는 조건이 하나라도 있으면 더이상 탐색하지 않음.
중복데이터가 많으면 JOIN보다 빠를 수 있다!
=> 서브쿼리 만족하는 조건이 하나라도 있으면 TRUE, 하나도 없으면 FALSE
SQL1 UNION SQL2 : 각각의 데이터를 합친다. (중복 X)
SQL1 UNION ALL SQL2 : 각각의 데이터를 합친다. (중복 O)
IS NULL : NULL인 경우
IS NOT NULL : NULL이 아닌 경우
LIKE('A%') : A로 시작하는 경우
LIKE('%A') : A로 끝나는 경우
LIKE('%A%') : A가 포함되는 경우
LIKE('_A') : A로 끝나는 두 글자인 경우
NOT LIKE('A%') : A로 시작하지 않는 경우
NOT LIKE('%A') : A로 끝나지 않는 경우
NOT LIKE('%A%') : A가 포함되지 않는 경우
BETWEEN 100 AND 200 : 100 이상 200 이하의 값
NOT BETWEEN 100 AND 200 : 100이상 200이하에 포함되지 않는 값
BETWEEN 날짜 비교
BETWEEN TO_DATE('2000-01-01', 'YYYY-MM-DD') AND TO_DATE('2000-12-31', 'YYYY-MM-DD')
BETWEEN 문자 비교
BETWEEN 'A' AND 'C' : 첫 문자에 A,B,C가 포함된 값 조회. (아스키 코드값으로 비교)
TOP 4: 상위 4개 데이터 출력
TOP 50 PERCENT : 상위 50% 출력( 6개 데이터라면 상위 3개 출력)
LIMIT 3 : 3개 데이터만 출력 (= LIMIT 0,3)
LIMIT 2,2 : 세 번째 데이터부터 2개 데이터 출력(0부터 시작해서 0, 1, 2로 세 번째 데이터)
ROWNUM : 조회된 결과에 순서대로 순번을 붙여줌.
> ORACLE
SELECT ROWNUM FROM TB
> MYSQL
SELECT @rownum:=@rownum+1 FROM TB WHERE (@rownum:=0) = 0;
ROWNUM은 조회된 데이터 순서로 나오기 때문에 ORDER BY 시 순번이 뒤섞일 수 있다.
ROWNUM으로 ORDER BY 사용할 땐 서브쿼리에 ORDER BY 후 ROWNUM 사용하기!
ROW_NUMBER()와 다름.
ROW_NUMBER()는 OVER()함수 필수!
ORDER BY 사용 시, ROW_NUMBER()는 OVER(ORDER BY ~~) 사용하면 돼서 ROWNUM보다 더 편리할 수 있다.
'웹개발 지식' 카테고리의 다른 글
AES-256 사용법 및 예제 (0) | 2023.02.06 |
---|---|
백 / 프론트(vue) 연결 (0) | 2023.02.03 |
포스트맨 (0) | 2023.01.02 |
No Mybatis mapper was found in '' package (0) | 2023.01.02 |
SQL 컬럼 복사 방법 (0) | 2022.10.20 |