본문 바로가기

Develop/DBMS

Oracle 문법, 쿼리, 예제

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은 서로 반대로 표시한다!!!

'Develop > DBMS' 카테고리의 다른 글

PL/SQL기초3  (0) 2022.04.15
PL/SQL기초2  (0) 2022.04.14
PL/SQL기초1  (0) 2022.04.13