Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자의 자기계발 블로그( ੭ ・ᴗ・ )੭

[오라클] SQL문 (2) 본문

ORACLE

[오라클] SQL문 (2)

쪼사원 2024. 4. 2. 14:21

✅ 의사 컬럼

 

의사 컬럼 : 테이블의 컬럼처럼 동작하지만 실제로 테이블에 저장되지는 않는 컬럼

>> 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 '조사_';

>> '조사원숭이' 일 경우 조회되지 않음 ㅋㅋㅋ