Oracle

Oracle (SELECT/INSERT)

요리하다그만둠 2022. 6. 14. 16:26

select 기본 구문-

SELECT * 혹은 컬럼
FROM [스키마.]테이블명 혹은 [스키마.]뷰명
WHERE 조건
OREDER BY 컬럼;

 

sql에 대한 사전지식이 없다고 가정하고 데이터를 조회한다는 것이 어떤 식으로 이루어질지 생각해보자.

어디가에 있는 데이터를 추출해야 한다고 할 때 필요한것은? =WHERE(어디에서), WHAT(어떤 데이터를?)

이때 어디에서 해당하는 내용을 SELECT 절에 기술하는 부분이 WHERE절입니다.

 

ex) 사원 테이블에서 급여가 5000이 넘는 사원번호와 사원명을 조회한다고 할 때 앞서 설명한 방식을 적용하면

SELECT 사원번호, 사원명
FROM 사원 테이블
WHERE 급여 > 5000;

즉 

SELECT employee_id, emp_name
FROM employees
WHERE salary > 5000;

이런 형식으로 쓰면 됩니다.

사번과 사원명뿐 아니라 사원 테이블에 있는 모든 데이터(컬럼)을 보려면 컬럼명을 일일이 나열하는 대신 " * " 을 붙입니다.

 

추가 ) 급여 5000이상 위의 조회결과를 사번순으로 정렬할때~ 

( 정렬할때는 ORDER BY 를 사용하면됩니다.  ex) asc 오름차순 / desc 내림차순)

SELECT employee_id, emp_name
FROM employees
WHERE salary > 5000
ORDER BY employee_id;

 

조건을 추가로 붙일 수도 있는데 급여가 5000이상이고 iob_id가 'IT_PROG'인 사원을 조회한다면 AND 연산자와 job_id를 검색하는 조건도 추가합니다.

SELECT employee_id, emp_name
FROM employees
WHERE salary > 5000
AND job_id = 'IT_PROG'
ORDER BY employee_id;

 주의 할점은 오라클은 기본값으로 대소문자를 구분합니다. 따라서 대소문자를 잘 사용하였는지 확인해야합니다.

 

추가 ) 조건을 추가로 붙일 수도 있는데 급여가 5000이상이거나 혹은 iob_id가 'IT_PROG'인 사원을 조회한다면 OR 연산자를 사용합니다.

SELECT employee_id, emp_name
FROM employees
WHERE salary > 5000
OR job_id = 'IT_PROG'
ORDER BY employee_id;

 

또한 emp_dept_vi 뷰처럼 한 개 이상의 테이블에서 데이터를 조회해 올수도 있습니다.

SELECT a.employee_id, a.emp_name, a.department_id,
b.department_name
FROM employees a,
departments b
WHERE a.department_id = b.department_id

 

FROM 절을보면 테이블 명 다음에 a, b라고 명시해놓고 SELECT와 WHERE절에서 'a'.'b' 컬럼 형태로 사용하는데, 이 이 a,b는 별칭(alias)이라고 합니다. 즉 employees란 이름 대신 a,departments 대신 b를 사용한다고 기술 한 것입니다.

테이블명 뿐 아니라 컬럼명에도 별칭을 붙일수 있는데, 그형태는 'AS'이며 생략 가능합니다.

AS = (원컬럼명 AS 컬럼별칭)

SELECT a.employee_id, a.emp_name, a.department_id,
b.department_name AS dep_name
FROM employees a, departments b
WHERE a.department_id = b.department_id;

 

 

INSERT문의 형태 

보통 신규 데이터를 입력할때 INSERT문을 많이 사용합니다.

INSERT INTO 스키마. 테이블명 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ....)

가장 기본적인 형태의 데이터 입력문입니다. 주희 사항은 반드시 나열하는 컬럼과 값의 수와 순서. 그리고 데이터 타입이 일치해야한 합니다. 일치 하지않으면 오류가 발생됩니다.

 

실습 용 테이블 생성

CREATE TABLE EX3_1 (
col1 VARCHAR2(10),
col2 NUMBER,
col3 DATE);

 

INSERT INTO EX3_1 (col1, col2, col3)
VALUES ('ABC', 10, SYSDATE);

 

정상적으로 값이 들어가집니다.

 

그리고 나열하는 컬럼 순서를 바꾸더라고 value절에 있는 값을 바뀐 순서와 맞추기만 하면 문제가 없습니다.

INSERT INTO EX3_1 (col3, col1, col2)
VALUES (SYSDATE, 'DEF', 20);

값이 잘 들어가집니다.

 

하지만 값을 이렇게 넣는다면

INSERT INTO EX3_1 (col3, col2, col1)
VALUES (SYSDATE, 'DEF', 20);

 

보이는 것처럼 수치가 정확하지 않다는 오류가 발생하게 됩니다.

 

INSERT ~ SELECT 형태

INSERT INTO [스키마.]테이블명 (컬럼1, 컬럼2, ...)
SELECT 문;

실습용 테이블 생성

CREATE TABLE EX3_2 (
emp_id NUMBER,
emp_name VARCHAR2(100)
);

사원 테이블에 월급이 5000이상인 사원의 사원번호와 사원명을 조회한 결과를 ex3_2 테이블에 넣어보겠습니다.

INSERT INTO EX3_2 (emp_id, emp_name)
SELECT employee_id, emp_name
FROM employees
WHERE salary > 5000;

INSERT~SELECT 형태 역시 컬럼 순서와 데이터 타입을 맞추어야 합니다. 그런데 종종 데이터 타입을 맞추지 않아도 INSERT가 성공하는 경우가 종종 있습니다.

예제 -

INSERT INTO EX3_1 (col1, col2, col3)
VALUES (10, '10', '2014-01-01');

이상하게  데이터 타입이 다른 데이터를 넣었는데도 오류가 나지 않고 재대로 입력이 되었습니다. col은 문자 타입인데 숫자를 col2는 숫자 타입인데 문자가 col3는 날짜 타입인데 문자를 넣었는데 오류가 나지 않았습니다.

이유는 '묵시적 형변환'에 의해서 자동으로 데이터 타입이 변화해서 그렇습니다.

(user가 직접 변경하는것은 '명시적 형변환'  )