https://urakasumi.tistory.com/60 → SQL참고
[ 목차 ]
1. SQL 기본 명령어
2. 연산자
3. 그룹함수
4. 집합연산자
5. 하위질의 (SubQuery)
6. 테이블 생성
7. VIEW
8. SYNONYM
SQL 실행 순서 : FROM → CONNECT BY → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
위와 같은 순서로 SQL이 실행되기 때문에 FROM절에서 별칭을 정하면 뒤에 있는 절에서 별칭을 사용할 수 있다.
ex) TITLE에 전화번호가 있는지 찾아내는 법
SELECT * FROM NOTICE WHERE REFEXP_LIKE(TITLE, '^01[016-9]-\d{3, 4}-\d{4}');
^ : 뒤에 있는 패턴으로 딱맞는 것만 허용한다.
REFEXP_LIKE를 이용
REFEXP_LIKE(column, '찾을 것')
[016-9] : 016~019
\d : 0-9를 의미
{3,4} : 3번 반복 혹은 4번 반복을 의미
{4} : 4번 반복을 의미
ex) TITLE에 이메일이 있는지 찾아내는 법
SELECT * FROM NOTICE WHERE REFEXP_LIKE(TITLE, '\D\w*@\D\w*.(org|net|com)');
\D : 문자 a-z를 의미
\w+: 문자를 1개 이상 적어라
\w*: 문자를 0개 이상 적어라
DISTINCT : 중복 없앨 때 사용
ex) HIT에 따라서 내림차순 정렬하고 만약 값이 같을 경우 날짜를 기준으로 내림차순 정렬을 해라
SELECT *FROM NOTICE ORDER BY HIT DESC, REGDATE DESC;
위와 같이 조건에 따라 정렬을 2번 할 수 있다.
GROUP BY : 특정 속성을 기준으로 그룹화 하여 검색할 때 그룹화 할 속성을 지정한다.
HAVING : GROUP BY에 조건을 걸 때 사용할 수 있다. (GROUP BY를 사용할 때 WHERE에 조건을 걸 수 없기 때문이다.) → 사용하지 못하는 이유는 SQL 실행 순서와 관련이 있다.
ROW_NUMBER() : 정렬된 상태에서 일련 번호를 붙이고 싶을 때 사용
RANK() : 정렬된 상태에서 순위를 알고 싶을 때 사용
DENSE_RANK() : 순위를 알고 싶을 때 공동 순위가 나오더라도 순서대로 출력 → EX) 공동 4등이 존재할 때 RANK()를 사용하면 그 다음은 6등이 되는데 DENSE_RANK()를 사용하면 공동 4등 다음에 5등이 된다.
JOIN : table을 수평으로 결합한다.(INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, CROSS)
UNION : table을 수직으로 결합한다.(UNION : 공통적인 것은 제외하고 결합, MINUS, INTERSECT, UNION ALL : 전부다 결합)
VIEW : CREATE VIEW [이름] AS [긴 SQL 구문들] → 이와 같이 저장하고 SELECT * FORM [이름] 으로 간단하게 불러올 수 있다.
Join 이해
https://pearlluck.tistory.com/46
Oracle OUTER join의 경우 "+"를 이용하는데 LEFT OUTER JOIN을 하려면 오른쪽에 +를 붙이고 RIGHT OUTER JOIN을 하려면 왼쪽에 +를 붙힌다.
또한 Oracle join은 FULL OUTER Join이 불가능 하니 이 경우 ANSI표기법을 사용하자
ANSI join과 Oracle join은 서로 반대로 표시한다!!!