oracle - 자료의 조회
자료의 조회
- 데이터베이스의 넓은 영역 중 주로 자료의 검색과 관련된 부분을 할 예정이다.
- 자료검색을 위한 가장 기본적인 부분을 다루게 되며, 가장 주요한 부분이라도 말할 수 있다.
SELECT문의 구조
- 자료의 조작을 위하여 필요한 DML은 크게 4가지로 나뉜다.
- 자료의 입력을 목적으로 한 INSERT문
- 자료의 조회를 목적으로 한 SELECT문
- 자료의 수정을 목적으로 한 UPDATE문
- 자료의 삭제를 목적으로 한 DELETE문
- 이 중에서 가장 많은 빈도로 사용되는 부분이 자료의 조회를 위한 SELECT문이다.
- SELECT를 위하여 반드시 기술되어야 하는 절이 SELECT와 FROM이다.
- 즉, 어떤 테이블에서 어떤컬럼을 읽어 올 것인가는 반드시 기술 되어야 하는 필수 사항이다.
- 그 뒤에 기술될 수 있는 문장은 다음과 같다.
- 자료에 조건을 부여하여 제한을 주는 WHERE절
- GROUP함수를 사용하여 자료를 GROUP지를 때 필요한 GROUP BY 절
- GROUP지은 결과에 조건을 부여하여 제한을 주는 HAVING절
- 마지막으로 도출된 결과를 정렬할 수 있는 ORDER BY 절
- 이 4가지는 각각 기술 될 수도 있고 안될수도 있다.
- 단 HAVING절을 GROUP BY 절이 있을 경우만 사용한다.
실습 테이블 작성
- 실습용 테이블을 생성한다.
- 프로그램은 아무거나 써도 상관은 없다.
- 나는 아날로그맛을 좋아하기에 바로 cmd에서 갈긴다.
- SET LINESIZE 200 : 한 화면에 표시되는 SQL 명령문의 출력 결과에 대한 행의 크기 (기본은 80이다.)
- SET TIMING ON : SQL 명령문을 실행하는데 소요된 시간을 출력하기 위한 시스템 변수
- SERVEROUTPUT : PL/SQL문 실행 시 DBMS_OUTPUT.PUT_LINE()으로 로그를 남길 경우 SERVEROUTPUT 설정을 ON으로 지정해야 로그가 정상적으로 출력 된다.
- 실행과 설정을 다 했으면 테이블을 생성해준다.
CREATE TABLE TEMP (
EMP_ID NUMBER NOT NULL PRIMARY KEY,
EMP_NAME VARCHAR2(10) NOT NULL,
BIRTH_DATE DATE,
DEPT_CODE VARCHAR2(06) NOT NULL,
EMP_TYPE VARCHAR2(04),
USE_YN VARCHAR2(01) NOT NULL,
TEL VARCHAR2(15),
HOBBY VARCHAR2(30),
SALARY NUMBER,
LEV VARCHAR2(04)
);
CREATE TABLE TDEPT (
DEPT_CODE VARCHAR2(06) NOT NULL PRIMARY KEY,
DEPT_NAME VARCHAR2(20) NOT NULL,
PARENT_DEPT VARCHAR2(06) NOT NULL,
USE_YN VARCHAR2(01) NOT NULL,
AREA VARCHAR2(10),
BOSS_ID NUMBER
);
- 데이터도 넣어준다.
INSERT INTO TEMP VALUES (19970101,'김길동',TO_DATE('19740125','YYYYMMDD'),'AA0001','정규','Y','','등산',100000000,'부장');
INSERT INTO TEMP VALUES (19960101,'홍길동',TO_DATE('19730322','YYYYMMDD'),'AB0001','정규','Y','','낚시',72000000,'과장');
INSERT INTO TEMP VALUES (19970201,'박문수',TO_DATE('19750415','YYYYMMDD'),'AC0001','정규','Y','','바둑',50000000,'과장');
INSERT INTO TEMP VALUES (19930331,'정도령',TO_DATE('19760525','YYYYMMDD'),'BA0001','정규','Y','','노래',70000000,'차장');
INSERT INTO TEMP VALUES (19950303,'이순신',TO_DATE('19730615','YYYYMMDD'),'BB0001','정규','Y','','',56000000,'대리');
INSERT INTO TEMP VALUES (19966102,'지문덕',TO_DATE('19720705','YYYYMMDD'),'BC0001','정규','Y','','',45000000,'과장');
INSERT INTO TEMP VALUES (19930402,'강감찬',TO_DATE('19720815','YYYYMMDD'),'CA0001','정규','Y','','',64000000,'차장');
INSERT INTO TEMP VALUES (19960303,'설까치',TO_DATE('19710925','YYYYMMDD'),'CB0001','정규','Y','','',35000000,'사원');
INSERT INTO TEMP VALUES (19970112,'연흥부',TO_DATE('19761105','YYYYMMDD'),'CC0001','정규','Y','','',45000000,'대리');
INSERT INTO TEMP VALUES (19960212,'배뱅이',TO_DATE('19721215','YYYYMMDD'),'CD0001','정규','Y','','',39000000,'과장');
--
INSERT INTO TDEPT VALUES ('AA0001','경영지원','AA0001','Y','서울',19940101);
INSERT INTO TDEPT VALUES ('AB0001','재무','AA0001','Y','서울',19960101);
INSERT INTO TDEPT VALUES ('AC0001','총무','AA0001','Y','서울',19970201);
INSERT INTO TDEPT VALUES ('BA0001','기술지원','BA0001','Y','인천',19930301);
INSERT INTO TDEPT VALUES ('BB0001','H/W지원','BA0001','Y','인천',19950303);
INSERT INTO TDEPT VALUES ('BC0001','S/W지원','BA0001','Y','인천',19966102);
INSERT INTO TDEPT VALUES ('CA0001','영업','CA0001','Y','본사',19930402);
INSERT INTO TDEPT VALUES ('CB0001','영업기획','CA0001','Y','본사',19950103);
INSERT INTO TDEPT VALUES ('CC0001','영업1','CA0001','Y','본사',19970112);
INSERT INTO TDEPT VALUES ('CD0001','영업2','CA0001','Y','본사',19960212);
--
COMMIT;
- DESC TEMP; 를 입력하여 테이블의 구조를 살펴보겠다.
Column Name Null? Type
--------------------- ---------------- ----------------------
EMP_ID NOT NULL NUMBER
EMP_NAME NOT NULL VARCHAR2(10)
BIRTH_DATE DATE
DEPT_CODE NOT NULL VARCHAR2(6)
EMP_TYPE VARCHAR2(4)
USE_YN NOT NULL VARCHAR2(1)
TEL VARCHAR2(15)
HOBBY VARCHAR2(30)
SALARY NUMBER
LEV VARCHAR2(4)
- TEMP테이블은 사원정보를 포함하고 있다.
- 컬럼 순서대로 사번,성명,생일,소속부서,채용종류,재직여부,전화번호,취미,연봉,직급등의 정보를 포함하고 있다.
- 자료의 유일성을 보장하는 PRIMARY KEY는 EMP_ID이다.
Column Name Null? Type
------------------------ ---------------- -----------------------
DEPT_CODE NOT NULL VARCHAR2(6)
DEPT_NAME NOT NULL VARCHAR2(20)
PARENT_DEPT NOT NULL VARCHAR2(6)
USE_YN NOT NULL VARCHAR2(1)
AREA VARCHAR2(10)
BOSS_ID NUMBER
- TDEPT데이블은 부서정보를 포함하고 있다.
- 컬럼 순서대로 부서코드, 부서명, 상위부서, 사용여부, 근무지역, 부서장 사번을 각각 포함하고 있다.
- 사원테이블에서 사용하는 부서에 대한 상세정보를 부서 테이블이 가지고 있다.
- 자료의 유일성을 보장하는 PRIMARY KEY는 DEPT_CODE로 했다.
쿼리 실행
- SELECT 와 FROM 만을 사용하여 쿼리를 만들어 본다.
SELECT EMP_ID FROM TEMP;
DML과 DDL
- DML이란?
- DML이란 Data Manipulation Language의 약어로 SELECT, INSERT, DELETE, UPDATE 문장을 통틀어 칭한다. 즉 DATA를 삽입, 삭제, 수정, 조회 등의 목적으로 다루기 위하여 사용하는 명령어이다.
- DDL이란?
- OBJECT 의 생성, 삭제, 변경을 목적으로 하는 언어인 CREATE, DROP, ALTER 등의 명령어가 여기에 해당 한고 반면에 사용자에게 부여된 권한을 정의하는 문장을 DDL이라 한다.
SELECT에서 산술연산
- DML을 이용하여 계산기의 기본 기능인 산술 연산을 할 수 있다.
- 숫자와 NUMBER형 컬럼을 이용한 연산 시 연산순서와 연산부호는 계산기와 동일하다.
- +더하기
- -빼기
- *곱하기
- /나누기
- ()괄호
연봉을 이용하여 월 급여 계산
- TEMP 테이블에서 SALARY를 이용하여 월 급여를 알아보는 쿼리를 짜보자.
- 월 급여는 연봉을 18로 나누어 홀수달에는 연봉의 1/18이 지급되고 짝수달에는 연봉의 2/18이 지급된다고 가정했을 때 홀수 달과 짝수 달에 받을 금액을 SELECT 해보자.
SELECT EMP_NAME,
SALARY/18,
SALARY*2/18
FROM TEMP;
EMP_NAME SALARY/18 SALARY*2/1
---------- ---------- -----------
김길동 5555555.56 11111111.1
홍길동 4000000 8000000
박문수 2777777.78 5555555.56
정도령 3888888.89 7777777.78
이순신 3111111.11 6222222.22
지문덕 2500000 5000000
강감찬 3555555.56 7111111.11
설까치 1944444.44 3888888.89
연흥부 2500000 5000000
배뱅이 2166666.67 4333333.33
Leave a comment