본문 바로가기

카테고리 없음

SQLD 개념정리 3차

DDL (테이블 정의) : CREATE , TRUNCATE , DROP , ALTER  애네들은 공통적으로 실행해버리면 ROLL BACK이 안된다(DML과 다르게)

 

DML : 우리가 흔히아는 명령어들 INSERT, UPDATE, DELETE , MERGE 

DCL : 데이터를 컨트롤하는 권한을 부여 혹은 회수해주는 명령어 GRANT, REVOKE

TCL : 변경사항을 반영하거나 이전으로 되돌리는 명령어 : COMMIT , ROLLBACK

 

FROM 절 

오라클은  FROM절에서 AS 사용 불가능(SQL 서버는 사용 가능), FROM 절 생략 자체가 불가능(SQL은 가능한게 신기)

FROM 절에 alias를 사용했다면 반드시 alias를 기준으로 써야된다(특히 select 문에서 사용 시 주의할 것)

ex)EMP M 이라고 M으로 alias를 주면 select M.name이 맞지 EMP.name으로 쓰면 틀리다.

 

함수

함수는 크게 2가지로 구분이 가능하다.단일 결과값을 반환하는 단일행 함수냐 혹은 다중 결과값을 반환하는 다중행 함수냐

 

문자열 함수

Lower과 Upper는 각각 소문자와 대문자로 바꿔준다.

INTSTR(대상,찾을 문자열,탐색 위치, 가져온 결과값들 중 몇번쨰의 인덱스를 원하는지)

LTRIM(대상,삭제할 문자열) -> 왼쪽부터 삭제할 문자열이 안나올떄까지 삭제 <-> RTRIM(대상,삭제할 문자열)

TRIM 은 양쪽에서 다(단 디폴트는 ' ' 을 우선적으로 제거)

LPAD(대상,n,붙여넣을 문자열) -> 붙여넣을 문자열 + 대상 하고 N만큼 추출 <-> RPAD(대상,n,붙여넣을 문자열)

REPLACE(대상,원하는 문자열,바꾸고 싶은 문자열) 

(주의) TRANSLATE('ABBA','AB','ab') -> AB를 ab로 바꾸는게 아니라 1.A 를 a로 2.B를 b로 바꾸는거다.

 

숫자형 함수

ABS -> 절대값 반환  

ROUND(대상,소수점 몇자리 까지) 

TRUNC(대상,소수점 몇자리까지) 

FLOOR(3.5) -> 3     CEIL(3.5) -> 4  MOD(수1,수2) -> 수1%수2  SQRT(수) -> 루트씌운 값 POWER(수1,수2) = 수1^수2

 

변환 함수

TO_NUMBER,TO_CHAR, TO_DATE (주의! DATE타입은 기본적으로 YYYYMMD 하고 시분초까지를 의미한다)

 

그룹 함수

COUNT,SUM,AVG,MIN,MAX 등.... 그룹함수는 NULL을 완전히 무시한 채 계산을 수행해준다.

(그렇다면 싹 다 NULL인 애를 COUNT 하면? -> 0  나머지 그룹함수들은 공집합을 리턴해준다.)

 

(중요!)일반 함수

DECODE(대상,대상이 만약 이거랑 같으면1,이거로 교환1, 대상이 만약 이거랑 같으면2,이거로 교환2, ...,그외의 값은 뭐로 리턴해줄까) 

NVL(대상,치환)   대상이 널이면 치환값 리턴

NVL2(대상,치환1,치환2) 대상이 널이면 치환2 아니면 치환1

ISNULL(대상,치환값)  대상이 널이면(ISNULL) 치환값 리턴

NULLIF(대상1,대상2)  둘이 같으면 NULL 다르면 대상1 리턴

CASE 

    WHEN

    THEN   

    ELSE

END문 주의(ELSE는 기본적으로 싹다 0)

 

WHERE

where절에서 주의할 것은 바로 = '' 이다 오라클에서는 무조건 IS NULL이 맞지만 SQL 서버에서는 = ''이 맞다

!= 랑 <>는 같은 의미로 사용된다.

여집합은 맨 앞에 NOT(프로그래밍에서의 !를 대체)로 선언해준다.

SQL에서의 OR는 합집합을, AND는 교집합을 생각해주자(사실 프로그래밍 언어에서도 크게 다를바는 없다.)

 

GROUP BY와 ORDER BY

짚고 넘어가야할 부분은 SELECT는 맨 마지막에 실행된다는 것이다(ORDER BY가 그 다음이긴 하지만)

그루핑을 함에 있어서 가장 쉽게 생각을 해보면 1.FROM절에서 가져오는 테이블 자체를 축소 시킨다.(인라인)

2.WHERE 절에서 조건을 더 축소시킨다(서브쿼리) 3.이제 그루핑할 대상을 지정하고 그루핑한 대상에서 또 무언가 거름망이 필요하다면 HAVING을 쓰자. 

이렇게 3가지의 사고를 거친다면 정말 쉽다.

 

 

복합 정렬

 

ORDER BY는 중첩이 될수있는데 (예를 들어 ORDER BY 조건1 AND 조건2) 이렇게하면 어떤 결과가 나올까?

답은 먼저 조건 1에 맞게 정렬돼고 그 중에서 이제 같은 값들을 가진 애들의 부분집합에 대해 다시 조건 2로 정렬을 수행해준다.(즉 같은값을 안에서 또 정렬해주는 것이다.)

널은 ORDER BY로 정렬해주면 어디로 갈까? -> 오라클에서는 오름차순을 기준으로 널을 가장 마지막에 넣어준다.

 

NULL FIRST:

NULL LAST: