본문 바로가기
카테고리 없음

[sqld] 210810 공부

by gokite 2021. 8. 10.

누가 볼진 모르겠지만 맥락 없이 새로 알게 된 부분만 모아놓은 제 연습장 입니다 (?)

 

 

1. 쌍파이프 ||

|| 이걸 쌍파이프라고 한단다..일단 그냥 작대기 두개로 불렀던 무지한 나의 나날..

어쨌든 책에는 || 통해서 붙이는 데 Mysql 에서 오류가 뜨진 않는데 결과값이 이상하게 나왔다.

알고보니까 mysql 에선 concat 를 써야한다고 한다. (어휴삼국통일하듯쿼리통일좀)

 

 

2. 정렬 회피를 위한 인덱스 사용

Oracle 데이터 베이스는 정렬을 위해 메모리 내부에 할당된 SORT_AREA_SIZE 를 사용한다. 만약 SORT_AREA_SIZE 가 너무 작으면 성능 저하가 발생된다. 정렬을 회피하기 위해서 인덱스(Index)를 생성할 때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야 한다. 그러니까 간단히 말해서 애초에 데이터 테이블 만들 때 니가 원하는대로 데이터 넣어서 만들란 소리다. 

-> 

 

3. 힌트

이런 게 있는지도 몰랐다. 난 그동안 무식하게 쿼리만 돌렸나보다. 데이터베이스관리시스템에는 '옵티마이저'라는 게 있다. SQL을 빠르고 효율적으로 수행할 경로를 생성하는 엔진이다. 옵티마이저를 이용해 효율적인 실행경로를 만들 순 있겠지만 매사를 가장 최적의 방법을 실행한다고는 보장 못한다. 그래서 우리가..인간이 직접 최적의 실행 경로를 작성해주는 걸 힌트라고 한다. (힌트, 인덱스, 조인 개념을 모르고 괜히 힌트로 나댔다가는 오히려 성능에 저하가 온다고 한다) 힌트를 사용해서 할 수 있는 건 다음과 같다. 1.액세스 경로 2.조인 순서 3.병렬 및 직렬 처리 4. 옵티마이저의 목표 변경 (그냥 옵티마이저 시키고 싶다) 

주석과 비슷한 모양새를 갖고 있다.

주석은 /* 라라라라 */ 인 반면에 힌트는 /*+ 라라라라 +*/ 모습을 띠고 있다. + 가 붙는 다는 점이 다르다.

(주석이랑비슷하게생겨서여태까지힌트를무시하고살아왔다반성합니다)

 

4.부정 비교 연산자

!= ,^=, <>

많기도 하여라..

EX) NOT 칼럼명 >

-> 크지 않는 것을 조회 

 

5. _ (underscore)

왜이렇게 첨보는 게 많냐고요. 눈물나게..

_ 은 한 개인 단일 문자를 의미한다.

ex) LIKE 'hi_' hi뒤 한글자가 있는 문자를 의미함 (참고로 like절에 와일드카드 쓰지 않으면 = 와 같음)

Q) like 'hi_____' 이것도 되나?

-> 해보니까 된다 연이어서 쓸 수 있다. 직관적으로 like 'hi__' 하면 hi 뒤 두글자가 있는 문자를 의미한다.

 

 

6. NULL 관련 함수

NVL -NULL 이면 다른 로 바꾸는 함수이다.
- 'NVR(no,0)' 은 no 칼럼이 null 이면 0으로 바꾼다
NVL2 - NVL 함수와 DECODE 함수를 하나로 만든 것이다.
- NVL2(no,1,0)'은 no가 null 이 아니면1, null이면 0으로 만든다.
NULLIF - 얘는 아래랑 같은데 2개밖에 안들어감 exp2까지
COALESCE - 두 개의 값이 같으면 null을 같지 않으면 첫번 째 값을 반환한다.
- NULLIF(exp1,exp2,exp3,,,)은 exp1이 null이 아니면 exp1의 값을, 그렇지 않으면 그 뒤의 값의 null 여부를 판단하여 값을 반환한다.

 

7. DECODE 함수

표준 SQL 함수가 아니라고함. 음 안해도 될듯 CASE로 대체가능하니.