Oracle - 데이터 조작어

정원·2022년 12월 20일

Oracle

목록 보기
2/3

22.12.20 데이터조작어 DML

Oracle 주석

--주석
/*
여러 줄 주석
*/

HR 계정 사용.

더미 테이블을 이용하기 위해 hr 계정을 이용하자.

hr 계정 nulock 풀기

  1. CMD 실행
  2. sqlplus/nolog 입력
  3. 시스템 계정/비밀번호 입력
SQL>  conn system as sysdba
Enter password:
Connected.
  1. hr nulock 풀기
SQL> alter user hr account unlock;

User altered.
  1. hr 비밀번호 변경
alter user hr identified by hr;

SQL developer 에서 계정추가 후 사용 가능.

SELECT

SELECT 컬럼명 FROM 테이블명;

  • 컬럼 여러개 조회 가능
SELECT employee_id, first_name, last_name
FROM employees;
  • 컬럼 조회시에 ( * / + - ) 연산 가능
SELECT employee_id, first_name, salary, salary + salary * 0.1
FROM employees;
  • 별칭 사용 가능
SELECT first_name AS 이름
FROM employees;

SELEcT first_name "이름"
FROM employees;
  • 오라클은 홀따옴표로 문자를 표현하고,
    문자열 안에 홀따옴표를 표현하고 싶다면 ''를 두번 연속으로 쓰면 된다.
    || 연결자 = CONCAT
SELECT first_name || ' ' || last_name || '''s salary is &' || salary AS 급여내역
FROM employees;

결과
Steven King's salary is &24000

  • DISTINCT 중복제거
SELECT DISTINCT department_id 
FROM employees;
  • ROWNUM 쿼리에 의해 반환되는 행 번호를 출력
SELECT ROWNUM, employee_id
FROM employees;

결과

  • ROWID 데이터베이스에서 행의 주소값을 반환
 SELECT ROWID, employee_id
 FROM employees;

결과

WHERE

  • 조건문
SELECT first_name, last_name, job_id
FROM employees
WHERE job_id = 'IT_PROG';


SELECT * FROM employees
WHERE department_id = 90;
  • AND
SELECT * FROM employees
WHERE salary >= 15000 AND salary <= 20000;
  • 문자열은 ' ' 안에
SELECT * FROM employees
WHERE hire_date = '04/01/20';
  • 데이터 행 제한(BETWEEN, IN, LIKE)
  • BETWEEN 최소값 AND 최대값
    나이대,날짜에 많이 사용
SELECT * FROM employees
WHERE salary BETWEEN 15000 AND 20000;

SELECT * FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';
  • IN
    특정 값들과 비교할 때 사용
    찾으려는 데이터가 여러개일때
SELECT * FROM employees
WHERE manager_id IN (100,101);
  • LIKE
    일치여부
    % 와일드 카드 : %는 무엇이든 상관없다.
    _ 언더스코어 : _를 이용해 자릿수 지정.
SELECT first_name, hire_date 
FROM employees
WHERE hire_date LIKE '%03';
//03 앞에 아무거나

SELECT first_name, hire_date 
FROM employees
WHERE hire_date LIKE '___03%';
//자릿수 앞에 3개 다음 03으로 시작하고 뒤에는 아무거나
  • IS NULL
    NULL값 찾기
SELECT * FROM employees
WHERE manager_id IS NULL;
  • IS NOT NULL
    NULL이 아닌거 찾기
SELECT * FROM employees
WHERE manager_id IS NOT NULL;
  • AND / OR
SELECT * FROM employees
WHERE job_id = 'IT_PROG' OR job_id = 'FI_MGR' AND salary >= 6000;

AND 연산자가 OR보다 연산순서가 빠르기 때문에
salary가 6000이하인 사람들도 출력된다.

이럴때는 ( )를 활용하여 연산순서를 지정해준다.

SELECT * FROM employees
WHERE (job_id = 'IT_PROG' OR job_id = 'FI_MGR') AND salary >= 6000;

원하는 결과 정상 출력.

ORDER BY

데이터의 정렬
SELECT 구문의 가장 마지막에 배치된다.

ORDER BY 컬럼명 ASC/DESC
ASC : ascending 오름차순
DESC : descending 내림차순

ASC가 기본이라 생략이 가능하다.

SELECT * FROM employees
WHERE employee_id >= 103
ORDER BY employee_id ASC;

SELECT * FROM employees
WHERE employee_id >= 103
ORDER BY employee_id DESC;


ORDER BY는 별칭사용이 가능하다.

SELECT - 3
FROM - 1
WHERE - 2
ORDER BY - 4
순으로 실행되기 때문에 SELECT 에서 사용한 AS를 ORDER BY에서도 사용가능하다.

SELECT first_name AS 이름 FROM employees
WHERE employee_id >= 103
ORDER BY 이름 ASC;

연습문제

-- 모든 사원의 사원번호, 이름, 입사일, 급여를 출력

SELECT employee_id, first_name, hire_date, salary
FROM employees;

-- 모든 사원의 이름과 성을 붙여 출력. 별칭은 name

SELECT first_name || ' ' || last_name AS name
FROM employees;

-- 50번 부서 사원의 모든 정보 출력

SELECT * FROM employees
WHERE department_id = 50;

-- 50번 부서 사원의 이름, 부서번호, 직무아이디 출력

SELECT first_name || ' ' || last_name AS name, department_id, job_id
FROM employees
WHERE department_id = 50;

-- 모든 사원의 이름, 급여 그리고 300 인상된 급여를 출력

SELECT first_name || ' ' || last_name AS name, salary , salary + 300
FROM employees;

-- 급여가 10000보다 큰 사원의 이름과 급여 출력

SELECT first_name || ' ' || last_name AS name, salary
FROM employees
WHERE salary >= 10000;

-- 보너스를받는 사원의 이름과 직무, 보너스율 출력

SELECT first_name || ' ' || last_name AS name, job_id,COMMISSION_PCT
FROM employees
WHERE COMMISSION_PCT IS NOT NULL;

-- 2003년도 입사한 사원의 이름과 입사일, 급여 출력. BETWEEN

SELECT first_name || ' ' || last_name AS name, hire_date, salary
FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';

-- 2003년도 입사한 사원의 이름과 입사입, 급여 출력. LIKE

SELECT first_name || ' ' || last_name AS name, hire_date, salary
FROM employees
WHERE hire_date LIKE '03%';

-- 모든 사원의 이름과 급여를 급여가 많은 사원부터 적은 사원순서로 출력

SELECT first_name || ' ' || last_name AS name, salary
FROM employees
ORDER BY salary DESC;

-- 위 질의를 60번 부서의 사원에 대해서만 출력

SELECT first_name || ' ' || last_name AS name, salary
FROM employees
WHERE department_id = 60
ORDER BY salary DESC;

-- 직무 아이디가 IT_PROG이거나 SA_MAN인 사원의 이름과 직무 아이디를 출력

SELECT first_name || ' ' || last_name AS name, job_id
FROM employees
WHERE job_id IN ('IT_PROG','SA_MAN');

-- Steven King 사원의 정보를 "Steven King 사원의 급여는 24000달러 입니다." 출력

SELECT '"' ||  first_name || ' ' || last_name || ' 사원의 급여는 ' || salary || '달러 입니다."' AS king
FROM employees
WHERE first_name = 'Steven' AND last_name = 'King';

-- 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 출력

SELECT first_name || ' ' || last_name AS name, job_id
FROM employees
WHERE job_id LIKE '%MAN';

-- 매니저(MAN) 직무에 해당하는 사원의 이름과 직무아이디를 직무아이디 순서대로 출력

SELECT first_name || ' ' || last_name AS name, job_id
FROM employees
WHERE job_id LIKE '%MAN'
ORDER BY job_id;

0개의 댓글