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개 행 가져오기
※ 단일행 함수
- SELECT, WHERE, ORDER BY 절에서 사용 가능
- 행에 개별적 조작
- 여러 인자가 있어도 결과는 1개만 출력
- 함수 인자에 상수, 변수, 표현식 사용 가능
- 함수 중첩 가능
※ 문자형 함수
- 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 관련 함수 (NULL은 0 또는 공백 아님)
- 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을 가장 작은 값으로 취급한다.
◎ 참고: 격리성이 낮은 경우 일관성 떨어짐... 격리성이 높은 경우 동시성 떨어짐... 적절한 분배 필요!
- Dirty Read: 다른 트랜잭션에 의해 수정되었고 아직 커밋되지 않은 Data 읽기 하는 것.
- Non-Repeatable Read: 한 트랜잭션 내에서 동일한 Select 쿼리 실행시 같은 결과 보장 X.
→ 조회된 내 코드 값이 다른 경우
→ 이미 읽은 Data 변경 - Phantom Read: Non-Repeatable Read의 일종. Select 쿼리에 "For Update(Lock)" 했는데 다른 사용자가 값 추가해서 다시 조회하면 결과값이 다르게 나옴.
→ 있던 데이터가 없어지거나 없던 데이터가 생기는 경우
→ 쿼리 조건을 만족하는 Data가 많아지거나 적어지는 경우
※ 다중행 집계 함수
- 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다.
- GROUP BY 절은 행들을 소그룹화 한다.
- SELECT, HAVING, ORDER BY 절에 사용 가능
- ALL : Default 옵션. 생략 가능
- DISTINCT : 같은 값을 하나의 데이터로 간주 옵션
- COUNT(*) : NULL 포함 행의 수
- COUNT(표현식) : NULL 제외 행의 수
- SUM, AVG : NULL 제외 합계, 평균 연산
- STDDEV : 표준 편차
- VARIAN : 분산
- MAX, MIN : 최대값, 최소값
※ GROUP BY, HAVING 절의 특징
- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
- GROUP BY 절에서는 ALIAS 사용 불가
- 집계 함수는 WHERE 절에 올 수 없다.
- HAVING 절에는 집계함수를 이용하여 조건 표시 가능
- 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 특징
- SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정한 칼럼을 기준으로 정렬하여 출력하는데 사용한다.
- ORDER BY 절에 칼럼명 대신 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능하다.
- DEFAULT 값으로 오름차순(ASC)이 적용되며 DESC 옵션을 통해 내림차순으로 정렬이 가능하다.
- SQL 문장의 제일 마지막에 위치한다.
- SELECT 절에서 정의하지 않은 칼럼 사용 가능
※ SELECT 문장 실행 순서
SELECT ALIAS -> FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
메모리에 모든 칼럼 올리므로 ORDER BY에서 SELECT에 정의 안된 칼럼 써도 됨.
※ SQL Server의 WITH TIES
- SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
→ 급여가 높은 2명을 내림차순으로 출력하는데, 같은 급여를 받는 사원은 같이 출력한다.
반응형
'SQLD > 2과목' 카테고리의 다른 글
2과목 개념 (윈도우 함수 ~ 프로시저 & 트리거) (0) | 2023.08.26 |
---|---|
2과목 개념 (윈도우 함수 ~ 프로시저 & 트리거) (0) | 2023.08.06 |
2과목 개념 (계층형 질의 ~ GROUPING 함수) (0) | 2023.08.06 |
2과목 개념 (JOIN) (0) | 2023.08.05 |
2과목 개념 (SQL 기본 ~ 트랜잭션) (0) | 2023.08.04 |