본문 바로가기
SQLD/2과목

2과목 개념 (연산자 종류 ~ 집계 함수)

by JHyun0302 2023. 8. 5.
728x90

연산자의 종류

 

  • BETWEEN a AND b : a와 b 값 사이에 있으면 됨
  • IN (list) : 리스트에 있는 값중 어느 하나라도 일치 - IS NULL : NULL 값인 경우
       (Oracle은 VARCHAR2 공백을 NULL로 판단) ↔  (SQLSERVER는VARCHAR2 공백을 공백문자로 판단)
  • IS NOT NULL : NULL 값이 아닌 경우
  • NOT IN (list) : list의 값과 일치하지 않는다
  • LIKE ‘비교문자열’ : 비교문자열과 형태가 일치

 

 

  • SELECT PLAYER_NAME 선수명 FROM PLAYER
    WHERE TEAM_ID = ‘K2’;                                     → 팀ID가 K2인 사람
    WHERE TEAM_ID IN (‘K2’,‘K7’);                          → K2,K7인 사람
    WHERE HEIGHT BETWEEN 170 AND 180;       → 키가 170 ~ 180인 사람
    WHERE POSITION IS NULL;                               -> 포지션 없는 사람

 

◎ NULL 값과의 수치연산은 NULL 값을 리턴한다.

 NULL 값과의 비교연산은 거짓(FALSE)를 리턴한다.

 

★ 연산자 우선순위 : ()->NOT->비교연산자->AND->OR

 

 

ROWNUM : 원하는 만큼의 행을 가져올 때 사용

 

SELECT * PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1;

→ 1개 행 가져오기

 

 

 


단일행 함수

  1. SELECT, WHERE, ORDER BY 절에서 사용 가능
  2. 행에 개별적 조작
  3. 여러 인자가 있어도 결과는 1개만 출력
  4. 함수 인자에 상수, 변수, 표현식 사용 가능
  5. 함수 중첩 가능

 

 

 문자형 함수

  • LOWER : 문자열을 소문자로
  • UPPER : 문자열을 대문자로
  • ASCII : 문자의 ASCII 값 반환 
  • CHR : ASCII 값에 해당하는 문자 반환
  • CONCAT : 문자열1, 2를 연결
  • SUBSTR : 문자열 중 m위치에서 n개의 문자 반환
  • LENGTH : 문자열 길이를 숫자 값으로 반환

 

  • CONCAT(‘RDBMS’,‘ SQL’) -> ‘RDBMS SQL’
  • SUBSTR(‘SQL Expert’,5,3) -> ‘Exp’
  • LTRIM(‘xxxYYZZxYZ’,‘x’) -> ‘YYZZxYZ’
  • TRIM(‘x’ FROM ‘xxYYZZxYZxx’) -> ‘YYZZxYZ’

 

 

숫자형 함수

  • SIGN(숫자) : 숫자가 양수면1 음수면-1 0이면 0 반환
  • MOD(숫자1, 숫자2) : 숫자1을 숫자2로 나누어 나머지 반환
  • CEIL(숫자) : 크거나 같은 최소 정수 반환
  • FLOOR(숫자) : 작거나 같은 최대 정수 리턴
  • ROUND(숫자,반올림 할 소수점 자리)
  • TRUNC(숫자, 절사 할 소수점 자리) 
  • ROUND(38.5235,3) → 38.524
  • ROUND(38.5235)  =  ROUND(38.5235, 0)    → 39
  • ROUND(38.5235, -1) = 40 (1의 자리 반올림)    
  • ROUND(1234.52, -2) = 1200 (10의 자리 반올림)   
  • TRUNC(38.5235, 3) -> 38.523
  • TRUNC(38.5235, -1) -> 30 (1의 자리 버림)

 

 

날짜형 함수

  • SYSDATE : 현재날짜와 시각 출력
  • EXTRACT : 날짜에서 데이터 출력
  • TO_NUMBER(TO_CHAR(d,‘YYYY’)) : 연도를 숫자로 출력
  • 1 = 하루, 1/24 = 1시간, 1/24/60 = 1분

 

 

NULL 관련 함수 (NULL0 또는 공백 아님)

  • NVL(식1,식2) : 식1의 값이 NULL 이면 식2 출력. 공집합을 바꿔주진 않음           =       ISNULL
  • NULLIF(식1,식2) : 식1이 식2와 같으면 NULL을 아니면 식1을 출력
  • COALESCE(식1,식2) : NULL이 아닌 최초의 표현식, 모두 NULL이면 NULL 반환

 

  • e.g. COALESCE(NULL, NULL, ‘abc’) -> ‘abc’

 

Oracle에서는 NULL을 가장 큰 값으로 취급하며

★ SQL Server에서는 NULL을 가장 작은 값으로 취급한다.

 

 

◎ 참고: 격리성이 낮은 경우 일관성 떨어짐...  격리성이 높은 경우 동시성 떨어짐...    적절한 분배 필요!

  1. Dirty Read: 다른 트랜잭션에 의해 수정되었고 아직 커밋되지 않은 Data 읽기 하는 것.
  2. Non-Repeatable Read: 한 트랜잭션 내에서 동일한 Select 쿼리 실행시 같은 결과 보장 X.
    → 조회된 내 코드 값이 다른 경우
     이미 읽은 Data 변경

  3. Phantom Read: Non-Repeatable Read의 일종. Select 쿼리에 "For Update(Lock)" 했는데 다른 사용자가 값 추가해서 다시  조회하면 결과값이 다르게 나옴.
    있던 데이터가 없어지거나 없던 데이터가 생기는 경우
     쿼리 조건을 만족하는 Data가 많아지거나 적어지는 경우

 

 


 

다중행 집계 함수

  1. 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다.
  2. GROUP BY 절은 행들을 소그룹화 한다.
  3. SELECT, HAVING, ORDER BY 절에 사용 가능
    - ALL : Default 옵션. 생략 가능
    - DISTINCT : 같은 값을 하나의 데이터로 간주 옵션

 

  • COUNT(*) : NULL 포함 행의 수
  • COUNT(표현식) : NULL 제외 행의 수
  • SUM, AVG : NULL 제외 합계, 평균 연산
  • STDDEV : 표준 편차
  • VARIAN : 분산
  • MAX, MIN : 최대값, 최소값

 

 

 GROUP BY, HAVING 절의 특징

  1. GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
  2. 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
  3. GROUP BY 절에서는 ALIAS 사용 불가
  4. 집계 함수는 WHERE 절에 올 수 없다.
  5. HAVING 절에는 집계함수를 이용하여 조건 표시 가능
  6. HAVING 절은 일반적으로 GROUP BY 뒤에 위치

 

  • SEARCHED_CASE_EXPRESSION
  • CASE WHEN LOC = ‘a’ THEN ‘b’
  • SIMPLE_CASE_EXPRESSION
  • CASE LOC WHEN ‘a’ THEN ‘b’
  • = DECODE(LOC, 'a', 'b')
  • ELSE NULL이 생략되어 있음. 

 

 


 ORDER BY 특징

  1. SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정한 칼럼을 기준으로 정렬하여 출력하는데 사용한다.
  2. ORDER BY 절에 칼럼명 대신 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능하다.
  3. DEFAULT 값으로 오름차순(ASC)이 적용되며 DESC 옵션을 통해 내림차순으로 정렬이 가능하다.
  4. SQL 문장의 제일 마지막에 위치한다.
  5. SELECT 절에서 정의하지 않은 칼럼 사용 가능

 

 

 

 

SELECT 문장 실행 순서

SELECT ALIAS -> FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

메모리에 모든 칼럼 올리므로 ORDER BY에서 SELECT에 정의 안된 칼럼 써도 됨.

 

 

 

 

 SQL ServerWITH TIES

  • SELECT TOP(2) WITH TIES ENAME, SAL
    FROM EMP
    ORDER BY SAL DESC;

급여가 높은 2명을 내림차순으로 출력하는데, 같은 급여를 받는 사원은 같이 출력한다.


반응형