본문 바로가기
공부/SQLD

SQL기본 및 활용

by Wanado 2022. 8. 25.
728x90

▶  BEGIN TRANSACTION (BEGIN TRAN 구문도 가능)으로 트랜잭션을 시작

 

▶  저장점(SAVEPOINT)

 를 정의하면 롤백 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.

[ORACLE]

SAVEPOINT   SVPT1;

..

ROLLBACK TO SVPT1;

 

[SQL SERVER]

SAVE TRANSCTION

   SVTR1;

..

ROLLBACK

  TRANSACTION

  SVTR1;

 

▶  연산자의 우선순위

1. 괄호

2. 부정연산자 (NOT)

3. 비교연산자(=,< 등)와 SQL 비교 연산자(BETWEEN a AND b, IN(list), LIKE, IS NULL)

4. 논리연산자 중 AND, OR의 순으로 처리.

 

▶ NULL

값이 NULL이 아닌 경우를 찾아내는 문장

SELECT * FROM MYTABLE WHERE COLUMN1 IS NOT NULL

 

**부정비교 연산자  (같지 않다.)

!=

^=

<>

NOT 칼렴명 = 

 

ORACLE에서 NULL 데이터 조회시     서비스명 IS NULL 조건

SQL Server에서                                   서비스명 = ''

 

특정)

-NULL 값을 포함하는 연산의 경우 결과 값도 널값이다.

 

 

 

문자열 합치기 

CONCAT(JOIN_YMD, JOIN_HH) = '2014120100'    =   JOIN_YMD | | JOIN_HH

 

 WHERE '201501' = TO_CHAR(SVC_END_DATE, 'YYYYMM')

SVC_END_DATE에 있는 모든 날짜형식 데이터를 YYYYMM 형태의 문자형 데이터로 만듭니다

EX) 2015.01.01 01:23:43 >> 201501

2015.01.05 06:22:55 >> 201501

결국 모든 1월 내 데이터를 가져온다는 조건

 4번 WHERE TO_DATE('201501', YYYYMM) = SVC_END_DATE 

TO_DATE('201501', YYYYMM)의 값이 2015.01.01 00:00:00이 됩니다

최종적으로는 WHERE 2015.01.01 00:00:00 = SVC_END_DATE 이므로

결국 2015.01.01 00:00:00이 아닌 SVC_END_DATE 값들은 가져오지 못함.

 

 

▶ 함수    https://yzink.tistory.com/42

벤더에서 제공하는 내장함수  /    사용자가 정의할 수 있는 함수

내장함수는 단일행 함수  /    다중행 함수

                                               집계함수   /     그룹함수    /   윈도우 함수

 

* 함수의 입력 행수에 따라 단일행 함수와 다중행 함수로 구분할 수 있다.

 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 SET절에 사용이 가능하다.

 다중행 함수도 단일행 함수와 같이 단일 값만을 반환한다.

 

▶ 단일행 문자형 함수

C1

A

A

LENGTH(C1) = 3 (ENTER값 1 )

REPLACE(C1, CHR(10))) = AA     (LENGTH값은 2)  

 

https://gent.tistory.com/194

LTRIM

RTRIM

TRIM  '양쪽 공백 제거 '

 

SEARCHED_CASE)

CASE WHEN LOC ='NEW YOUR' THEN 'EAST'

SIMPLE_CASE)

CASE LOC WHEN 'NEW YOUR' THEN 'EAST

 

SQL Server)              ORACLE)

ISNULL( __ , 0)   =    NVL( __ , 0)

 

 

▶NULL관련 함수

NVL( 표현식1, 표현식2)

 

COL2 = NULL  xXXXX 

COL2 ISNULL  OOOOo

 

COALEASCE(칼럼1, 칼럼2,...)      

https://jhnyang.tistory.com/387

 

NULLIF(EXPR1, EXPR2)

- EXPR1과 EXPR2가 같다면 NULL을 리턴한다.

- EXPR1과 EXPR2가 같지 않다면 EXPR1을 리턴한다.

 

 

▶ GROUP BY 절과   HAVING절의 특성

- 집계함수의 통계정보는 NULL값 제외하고 수행

- GROUP BY 절에서는 SELECT 절과 달리 ALIAS 명을 사용할 수 없다.

-집게함수는 WHERE 절에 올 수 없다 (WHERE 절이  GROUP BY 보다 먼저 수행)

 

** DESC 내림차순

    ASC 오름차순 

 

** 
SELECT 지역, 매출금액
FROM  지역별매출
ORDER BY  년  ASC

ORACLE은 가능

SQLServer 불가능!!

 


ORDER BY 절 특징

-ORACLE에서는 NULL이 가장 큰 값

 SQLServer에서는                    작은값

- 컬럼명 대신 Alias 명이나 컬럼순서를 나타내는 정수도 사용 가능하며 혼용하여 사용할 수 있다.

-GROUP BY 절을 사용하는 경우 ORDER BY 절에 집계함수를 사용할 수도 있다.

 

▶ EX) 팀별 승리건수가 높은 순으로 3위까지 출력하되 동일한 팀이 있다면 함께 출력

SELECT TOP(3) WITH TIES 팀명, 승리건수
FROM 팀별성적
ORDER BY 승리건수 DESC;
728x90

'공부 > SQLD' 카테고리의 다른 글

데이터 모델링의 이해  (0) 2022.08.24
SQL 기본  (0) 2022.08.23
데이터 모델링  (0) 2022.08.22