[Oracle] DML (SELECT)

라라·2023년 3월 31일
0

Oracle

목록 보기
3/16

📍 계정에서 이용하고 있는 테이블을 조회하는 명령어

은 전체 Column 조회

SELECT *
FROM RARA.TEST;

SELECT *
FROM EMPLOYEE;

DEPT_TITLEEMPLOYEE가 아닌 다른 테이블에 있기 때문에 조회가 불가능하다.

SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE;



📍 SELECT문을 이용해서 산술연산 처리하기

SELECT 10+20, 10-20, 20/3, 5*4
FROM DUAL;



📍 Literal / Column 연산 ( 피연산자 리터럴, 컬럼값 )

SELECT 10+20, 10-20, 20/3, 5*4
FROM DUAL;

✏️ 전체 사원의 급여에 100원씩 더하고 사원명 조회하기

SELECT EMP_NAME, SALARY + 100, SALARY
FROM EMPLOYEE;



📍 Column / Column 연산

❗ NULL 값과의 연산은 불가능 하다.
❗ BONUS의 값이 NULL 일 경우 아래 결과는 NULL 로 조회된다.

SELECT EMP_NAME, SALARY+BONUS
FROM EMPLOYEE;

❗ 산술연산은 숫자형만 가능하다.
❗ 오라클에서 문자열 리터럴은 ' ' 를 사용한다.

SELECT '이제 점심 먹자'+100
FROM DUAL; (조회불가)



📍 가상컬럼

❗ 실제 테이블에는 존재하지 않는다. (10+30)

SELECT EMP_NAME, SALARY, BONUS, 10+30
FROM EMPLOYEE;

✏️ 사원테이블에서 사원명, 부서코드, 월급, 연봉 조회하기

SELECT EMP_NAME, DEPT_CODE, SALARY, SALARY*12
FROM EMPLOYEE;



📍 Column에 별칭 부여하기 ( AS / 가상컬럼에 많이 사용 )

👉 SELECT EMP_NAME AS 사원명 FROM EMPLOYEE

SELECT EMP_NAME AS 사원명, SALARY AS 월급
FROM EMPLOYEE;

❗ AS를 생략하고 띄어쓰기로 부여할 수 있다.

SELECT EMP_NAME 사원명, SALARY 월급
FROM EMPLOYEE;

❗별칭에 띄어쓰기, 특수기호는 " " 사용하면 가능

SELECT EMP_NAME AS "사 원 명", SALARY AS "월$급%"
FROM EMPLOYEE;



📍 데이터 중복값 제거하기 ( DISTINCT )

👉 컬럼명 앞에 사용, SELECT문의 맨 앞에 작성
👉 SELECT DISTINCT 컬럼명, 컬럼명... FROM 테이블명

❗ 부서에 부여된 코드 7개만 조회된다.

SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;

❗ DEPT_CODE 와 EMP_NAME 의 두 개의 값이 일치해야만 중복이다.
❗ 따라서 중복이 없다고 본다.

SELECT DISTINCT DEPT_CODE, EMP_NAME
FROM EMPLOYEE;



📍 문자열을 연결해주는 연산자 ( || )

❗ 문자열을 연결할 때 + 를 쓰지 않도록 주의한다.

SELECT '안녕' || '하세요'
FROM DUAL;

❗ || 연산은 컬럼을 합쳐서 출력할 때도 사용한다.
❗ 컬럼은 INFO 로 아래 값들을 모두 포함하여 조회된다.

SELECT EMP_NAME || EMP_NO || EMAIL AS INFO
FROM EMPLOYEE;

SELECT EMP_NAME || '님의 월급은 ' || SALARY || ' 보너스' || BONUS
FROM EMPLOYEE;



📍 원하는 DATA(ROW)만 출력하기 ( WHERE )

SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';

✏️ 월급이 200만원 이상인 사원을 전체 조회하기
SELECT *
FROM EMPLOYEE
WHERE SALARY>=2000000;

✏️ 사원 중 직책이 J2 가 아닌 사원 조회하기
❗ 부정연산자 !=, <> 둘 다 사용 가능

SELECT *
FROM EMPLOYEE
WHERE JOB_CODE != 'J2';



📍 여러 개의 비교연산 처리하기 ( AND / OR )

✏️ 사원 중 부서가 D5이고 월급이 300만원 이상인 사원명, 부서코드, 월급 조회하기

SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' AND SALARY >= 3000000;

✏️ 사원 중 부서가 D5거나 월급이 300만원 이상인 사원의 이름, 부서코드, 월급 조회하기

SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5' OR SALARY >= 3000000;



📍 날짜를 대소 비교하기 ( 문자열 패턴 'YY/MM/DD' )

👉 기본적인 날짜를 표시하는 문자열 패턴 : YY/MM/DD -> 'YY/MM/DD'

📎 SYSDATE : 오늘 날짜를 출력하기

SELECT SYSDATE
FROM DUAL;

SELECT SYSDATE-10
FROM DUAL;

SELECT SYSDATE-HIRE_DATE
FROM EMPLOYEE;



✏️ 입사일이 2000년 01월 01일 이전인 사원의 이름, 입사일을 조회하기
❗ DATE 형으로 자동 형변환

SELECT EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE < '00/01/01'

✏️ 사원 중 입사일이 00년 01월 01일 부터 02년 12월 31일 까지인 사원 전체 조회하기

SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE >= '00/01/01' AND HIRE_DATE <= '02/12/31';



📍 범위의 값을 조회할 때 ( BETWEEN AND )

👉 컬럼명 BETWEEN 값 AND 값;

SELECT EMP_NAME, SALARY, BONUS, HIRE_DATE
FROM EMPLOYEE
WHERE SALARY BETWEEN 2000000 AND 3000000;

SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '00/01/01' AND '02/12/31' AND DEPT_CODE = 'D9';



📍 문자열 패턴으로 검색하기 ( LIKE / NOT LIKE / ESCAPE )

👉 컬럼명 (NOT) LIKE '패턴';

📎 % : 문자가 0개 이상 아무 문자나 허용할 때 사용

ex)
%강% : 강, 한강, 두강, 두만강, 한강다리, 강강술래 모두 가능
%강 : 강으로 끝나는 말
강% : 강으로 시작하는 말

✏️ 김씨가 아닌 사원들 찾기

SELECT *
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE '김%';




📎 _ (언더바) : 문자가 1개 아무 문자나 허용할 때 사용

ex)
_강_ : 중간에 강이 있는 세 글자
_강 : 강으로 끝나는 두 글자
강_ : 강으로 시작하는 두 글자
_강% : 두 글자 이상의 두 번째 자리에 강을 포함하는 문자

✏️ 사원 중 유씨 성을 가진 사원의 이름, 월급, 부서코드를 조회

SELECT EMP_NAME, SALARY, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '유__'; ('유%'도 사용 가능)



📎 ESCAPE : '%'나 '_' 앞에 ESCAPE로 특수문자를 지정하면 검색

✏️ 이메일 주소에 _ 앞글자가 3 글자인 사원의 사원명, 이메일 조회하기
❗ ESCAPE 에는 내가 원하는 특수문자를 넣을 수 있다.

SELECT EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___*_%' ESCAPE '*';



📍 NULL 값을 조회하기 ( IS NULL / IS NOT NULL )

👉 NULL 은 아무 의미없는 값으로 연산이 불가능하다.

✏️ 보너스를 받고 있는 사원의 이름, 보너스를 조회하기
❗ 보너스를 받지 않는 사원은 IS NULL 로 조회 가능

SELECT EMP_NAME, BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;



📍 NULL 값을 대체하기 ( NVL )

👉 NVL (컬럼명, 대체값)

SELECT EMP_NAME, SALARY, NVL (BONUS, 0)
FROM EMPLOYEE;

AS DEPT_CODE 쓰지 않으면 컬럼이 DEPT_CODE,'인턴' 으로 나온다.

SELECT EMP_NAME, NVL(DEPT_CODE,'인턴') AS DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL;



📍 다중값 동등 비교하기 ( IN / NOT IN )

👉 여러 개의 값을 OR로 연결해서 동등 비교할 때 사용하는 연산자

SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE NOT IN ('D5','D6','D7','D8');

  
profile
코딩하는 라라 :)

0개의 댓글