개발자의 자기계발 블로그( ੭ ・ᴗ・ )੭
[오라클] SQL문 (2) 본문
✅ 의사 컬럼
❓ 의사 컬럼 : 테이블의 컬럼처럼 동작하지만 실제로 테이블에 저장되지는 않는 컬럼
>> SELECT 문에서는 의사 컬럼을 사용할 수 있지만, 의사컬럼 값을 INSERT, UPDATE, DELETE 할 수는 없음
🔽 대표적인 의사컬럼의 종류
CONNECT_BY_ISCYCLE / CONNECT_BY_ISLEAF / LEVEL
계층형 쿼리에서 사용하는 의사컬럼
NEXTVAL / CURRVAL
시퀀스에서 사용하는 의사컬럼
ROWNUM
쿼리에서 반환되는 각 로우들에 대한 순서 값을 나타내는 의사컬럼
ROWID
테이블에 저장된 각 로우가 저장된 주소 값을 가리키는 의사컬럼
각 로우를 식별하는 값이므로 유일한 값을 가짐
SELECT ROWNUM, EMPLOYEE_ID, ROWID
FROM EMPLOYEES
WHERE ROWNUM < 5;
결과값
ROWNUM EMPLOYEE_ID ROWID
----------- ---------------- -----------------------------
1 100 AAASNVAAGAAAACDAAJ
2 101 AAASNVAAGAAAACDAAK
3 102 AAASNVAAGAAAACDAAL
4 103 AAASNVAAGAAAACDAAM
✅ 연산자 (문자 연산자 || )
연산자 종류는 수식연산자, 문자연산자, 논리 연산자, 집합 연산자, 계층형 쿼리 연산자가 있지만
이번 수식연산자와 논리연산자는 익숙하니 이번 포스팅에서는 문자연산자만 다루겠습니다 !@
`||`는 두 문자를 연결하는 연산을 수행함.
🔽 예시
SELECT EMPLOYEE_ID || ' - ' || EMP_NAME AS EMPLOYEE_INFO
FROM EMPLOYEES
WHERE ROWNUM < 5;
결과값
EMPLOYEE_INFO
-------------------
198 - 조사원
199 - 김바보
200 - 조랑말
201 - 호랑이
✅ 표현식
❓ 표현식 : 한 개 이상의 값과 연산자, SQL 함수 등이 결합된 식
🔽 사원 테이블에서 각 사원의 급여에 따라 5000이하면 C, 5000~15000은 B, 15000 이상은 A등급을 반환하는 쿼리
- CASE 표현식 (CASE문) 사용
SELECT EMPLOYEE_ID, SALARY,
CASE WHEN SALARY <= 5000 THEN 'C등급'
WHEN SALARY > 5000 AND SALARY <= 15000 THEN 'B등급'
ELSE 'A등급'
END AS SALARY_GRADE
FROM EMPLOYEES
>> CASE문에서 THEN 이하 출력 값들의 데이터 타입은 반드시 일치시켜야 함!! (THEN 뒤, ELSE 뒤)
문자형과 숫자형을 혼합해 기술하면 오류 발생함
✅ 조건식
🔽 비교조건식
논리 연산자나 ANY, SOME, ALL 키워드로 비교하는 조건식
-- ### ANY 비교 조건식 ###
SELECT EMPLOYEE_ID, SALARY
FROM EMPLOYEES
WHERE SALARY = ANY (2000, 3000, 4000)
ORDER BY EMPLOYEE_ID;
-- 2000이나 3000이나 4000 중 하나라도 일치하는 모든 사원을 추출함
-- OR 조건으로 변환 가능
SELECT EMPLOYEE_ID, SALARY
FROM EMPLOYEES
WHERE SALARY = 2000
OR SALARY = 3000
OR SALARY = 4000
ORDER BY EMPLOYEE_ID;
-- ### ALL 비교 조건식 ###
SELECT EMPLOYEE_ID, SALARY
FROM EMPLOYEES
WHERE SALARY = ALL(2000, 3000, 4000)
ORDER BY EMPLOYEE_ID;
-- 모든 조건을 만족하는 사원을 추출함 > 조회되는 데이터가 없겠죠?
-- AND 조건으로 변환 가능
-- ### SOME 비교 조건식 ###
SELECT EMPLOYEE_ID, SALARY
FROM EMPLOYEES
WHERE SALARY = SOME (2000, 3000, 4000)
ORDER BY EMPLOYEE_ID;
-- ANY와 동일하게 사용되며 동작함
🔽 논리 조건식
조건절에서 AND, OR, NOT을 사용하는 조건식
🔽 NULL 조건식
특정 값이 NULL인지 아닌지를 체크하는 조건식
🔽 BETWEEN AND 조건식
WHERE 절에 BETWEEN A AND B 형태로 사용됨
>= <= 논리연산자로 변환 가능
ex ) WHERE SALARY BETWEEN 2000 AND 3000
🔽 IN 조건식
조건절에 명시한 값이 포함된 건을 반환
ANY와 비슷함
🔽 EXISTS 조건식
IN과 비슷하지만 후행 조건절로 값의 리스트가 아닌 서브 쿼리만 올 수 있음
ex)
SELECT DEPARTMENT_ID, DEPARTMENT_NAME
FROM DEPARTMENTS a
WHERE EXISTS ( SELECT *
FROM EMPLOYEES b
WHERE a.DEPARTMENT_ID = b.DEPARTMENT_ID
AND b.SALARY > 3000 )
ORDER BY a.DEPARTMENT_NAME;
🔽 LIKE 조건식
문자열의 패턴을 검색할 때 사용하는 조건식
ex) 이름이 '조'로 시작되는 사원을 조회할 때
WHERE EMP_NAME LIKE '조%'
%는 앞, 뒤, 중간 어디든지 올 수 있으며 대소문자 구분함 !!
'_' 는 한 글자만 비교함
ex ) WHERE EMP_NAME LIKE '조사_';
>> '조사원숭이' 일 경우 조회되지 않음 ㅋㅋㅋ
'ORACLE' 카테고리의 다른 글
[오라클] 그룹 쿼리와 집합 연산자 (0) | 2024.04.04 |
---|---|
[오라클] SQL 함수 (1) | 2024.04.03 |
[오라클] SQL문 (1) (0) | 2024.04.02 |
[오라클] DB 구성 객체 - 뷰, 인덱스, 시노님, 시퀀스 (0) | 2024.04.01 |
[오라클] DB 구성 객체 - 테이블 (1) | 2024.03.29 |