안녕하세요. 자바 포스팅을 마치고 이번주는 오라클 DB에 관해 소개합니다.
저는 macOS 사용자이며 M1 프로세서를 탑재한 Apple Silicon 컴퓨터를 사용하고 있습니다.
Windows OS를 사용하고 계시다면 다소 다르게 적용되는 점이 있을 수 있으니 참고 바랍니다.
빅데이터라고 하는 용어에 요즘 이목이 집중되고 있습니다. 말 그대로 방대한 양의 데이터를 말하는데, 인공지능과 같은 관련 산업의 핵심기술이 되고 있죠.
저도 인공지능 개발 관련 일을 하면서 데이터 세트를 생산하는데 엄청난 시간을 할애했습니다.
이렇게 머신러닝 뿐만 아니라 우리가 이용하고 있는 인터넷 쇼핑몰 등에서도 데이터에 대한 의존도가 높아지고 있습니다.
그렇다면 우리가 자바 프로그래밍에서 다룬 CRUD를 적재적소에 할 수 있어야겠지요?
만약 이렇게 생긴 엄청난 양의 데이터가 있다고 가정해봅시다. 데이터 세트라는 개념을 가방, 신발, 구두처럼 잡화 카테고리에 비유해 볼게요. 각각 1억개의 정보가 있을 때 1억개의 가방에 대한 정보 중 6547만 2810번째에 있는 가방의 정보를 찾는다고 가정하면 하나씩 돌면서 찾아보려고 할 때 우리는 엄청난 체력적 손실을 마주합니다.
그래서 우리는 엄청난 양의 데이터에서 내가 원하는 정보만 효율적으로 가져올 수 있는 무언가를 활용해야 피로도 누적을 방지하고 재미있게 일할 수 있는 것이죠.
때문에 DB관리라고 하는 키워드가 어쩌면 낯설지 않을 수 있습니다. Oracle DB 시리즈에서 본격적으로 다룰 내용은 데이터의 효율적인 관리에 대한 내용입니다.
이미 수많은 사람들이 효율적인 데이터 관리에 대해 고민해왔기 때문에 이에 대한 소프트웨어는 많이 만들어져 있습니다. 우리는 이를 적극적으로 활용하기만 하면 됩니다.
데이터를 보관만 하는데 그쳐서는 안됩니다. 그렇기 때문에 DBMS(DataBase Management System)라는 데이터베이스 관리 시스템이 오래전에 개발되었고 DBMS 안에도 다양한 종류의 데이터 구분이 있지만 우리는 데이터의 관계를 중시하는 RDBMS(Relation DataBase Management System)에 대해 다룹니다.
RDBMS안에서도 Oracle을 중심으로 풀어나가겠습니다.
우리는 SQL(Structured Query Language, 구조화된 질의 언어)이라는 RDBMS와 소통하는 언어를 배워 데이터를 효율적으로 관리하는 방법에 대해 살펴보도록 하겠습니다.
그럼 시작하겠습니다!
Oracle DB 개발환경 구축하기
Oracle DB 설치하기
Oracle DB 설치 시 PC에 따라 이상반응이 나타날 수 있으며 저는 그에 대한 책임을 지지 않습니다.
개인적으로는 이 방법을 추천하지는 않습니다.
개인별 소유하고 있는 PC마다 다르겠지만 많은 PC에서 문제를 일으켰기 때문에 Oracle DB를 직접 설치하지는 않겠습니다.
게다가 macOS를 사용하고 계시는 분들 중 M1칩이 탑재된 컴퓨터를 사용중이시라면 Docker를 사용하든 뭐든 가상 윈도우를 사용하지 않는 한 어떠한 방법으로도 Oracle DB에 접속할 수 없습니다.
그래서 엄청나게 진땀을 빼다 결정한 최후의 방법은 바로 AWS를 통해 AWS RDS Oracle을 사용해서 DB를 열어주고 JetBrain에서 제공하는 Data Grip을 이용하여 DB에 접속하는 방법입니다.
AWS RDS Oracle 구축하기
우선 AWS에 로그인합니다.
콘솔에 들어오시면 다음과 같은 화면이 나타나는데 바둑판 모양 버튼을 눌러주세요.
그리고 저기 표시된 데이터베이스를 눌러줍니다.
그리고 RDS를 눌러주세요.
위의 데이터 베이스 생성을 눌러주세요
그리고 절차에 맞게 만들어주면 됩니다.
오라클의 경우에는 거의 유료인 것 같아서 무료 버전을 찾아줘야 하는데요.
버전을 눌러보면서 밑에 프리티어라고 나오는걸 선택하셔야 무료로 사용할 수 있습니다.
다른건 몇백달러씩 하더라구요 ㄷㄷ
개인 학습용에 십만원 단위를 태워?
RDS를 개설했다면
DB URL, DB User, DB Password, jdbc Full URL을 따로 복붙해서 남겨주세요.
주의하실 점으로 필요없는 데이터는 지워가면서 작업해주세요. 과금의 원인이 됩니다.
Data Grip 설치하기
보통 이클립스나 SQL Developer를 많이 쓰지만 mac에서는 잘 안돌아가는 것 같아서 Data Grip을 쓰기로 했습니다. 인텔리제이를 쓰면서 제트 브레인에 신뢰가 생겼다랄까요
여기를 눌러 다운로드 링크로 이동할 수 있습니다.
유료 IDE라서 30일 무료체험 가능하고 대학교 이메일 계정이 있으면 무료로 사용할 수 있습니다.
설치를 완료하시면 초기 화면이 이렇게 나옵니다!
저는 이미 DB에 접속해 있기 때문에 왼쪽에 뭔가가 나와있지요.
위에 +버튼을 눌러줍니다. 그리고 데이터 소스를 클릭하면 Oracle이 보입니다. 클릭해 주시고,
여기에 아까 우리가 AWS에서 제공받은 값들을 채워넣어 주겠습니다.
이름은 본인이 마음에 드는 이름을 써주고 밑에 호스트 입력란에는 DB URL에 해당하는 값을 넣어줍니다.
그리고 SID는 ORCL이라고 입력해줍시다. 다음으로 사용자에 DB User에 해당하는 값, 비밀번호에 DB Password에 해당하는 값을 넣어줍니다.
URL에는 jdbc Full URL에 해당하는 값을 넣어줍니다.
연결 테스트를 눌러보시고 아무 이상이 없으면 확인을 눌러서 Oracle DB에 연결해줍시다!
그러면 왼쪽 프로젝트 탐색기에 아래와 같이 보일겁니다!
실습 파일 준비하기
다운로드
실습 파일은 오라클 라이브 SQL 사이트(https://livesql.oracle.com/)에서 받을 수 있습니다.
파일을 다운 받기 위해서는 오라클 계정이 필요합니다.
위 화면이 보이면 우측 상단의 Sign In 버튼을 눌러 로그인을 진행해주세요.
그 다음 화면 중앙의 Start Coding Now를 눌러줍니다.
그 다음 좌측 상단의 메뉴모음을 눌러줍니다.
그리고 Code Library를 눌러주세요.
여기에서 HR Objects and Data For Live SQL을 눌러줍시다.
그 다음 우측 상단에 Run Script 왼쪽에 있는 다운로드 버튼을 눌러주세요.
다운로드 된 파일을 데이터 그립에서 읽어주겠습니다. 다시 데이터 그립으로 돌아가세요.
실습 파일을 데이터 그립에서 읽어들이기
그 다음 데이터 베이스 탐색기에 마우스 우클릭을 하고
밑에서 여섯번째에 있는 SQL 스크립트 실행을 눌러줍니다.
오라클 라이브 SQL에서 받은 파일을 누르고 Open을 클릭해주세요.
그러면 하위 트리로 들어가서 테이블을 보면 알 수 없는 것들이 불러와져 있는 것을 볼 수 있습니다.
이 상태에서 DB이름에 마우스 우클릭하고 쿼리콘솔을 새로 만들어서 열어줍니다.
그러면 콘솔화면이 나타나게 됩니다.
이 콘솔화면에 우리가 지금부터 작업을 할 것입니다.
SQL 기본 사용법
데이터가 잘 읽혔는지 확인해보기
SQL에서는 어떤 객체를 불러서 표현해줄 때 SELECT
라는 키워드를 사용합니다.
우리가 이전에 불러왔던 employees파일이 제대로 읽혔는지 확인해봅시다.
쿼리 콘솔에 다음과 같이 입력하고 실행해보세요.
SELECT * FROM EMPLOYEES;
실행은 Run버튼을 누르거나 해당 문장에 커서를 두고 command + return(Ctrl + Enter)를 누르면 실행됩니다.
이러한 문장을 SQL에서 쿼리문이라고 하고, 이를 입력하여 실행하는 창을 쿼리콘솔이라고 합니다.
주석처리하기
SQL에서 주석을 처리하기 위해 두가지 방법을 쓸 수 있습니다.
-- 한 줄 주석
/*
범위 주석
*/
범위주석은 자바나 자바스크립트와 동일하고, 한 줄 주석은 바기호를 두번 쓰면 됩니다.
table의 구조
테이블, 다시 말해서 표는 row와 column으로 구성됩니다. 데이터를 담고 관리하기 용이할 뿐만 아니라 우리가 보기에도 쉽겠죠?
테이블을 만드는 방법은 다음과 같습니다.
CREATE TABLE 테이블명 (
컬럼이름 자료형,
컬럼이름 자료형,
:
:
)
테이블을 직접 만드는 것은 자료형에 대해 살펴보고 그 이후에 만들어보겠습니다.
SQL의 자료형
SQL의 자료형을 Java와 비교하기
SQL도 프로그래밍 언어에 속한다고 볼 수 있기 때문에 자료형이 존재합니다.
자바에서 다양한 자료형이 있었는데 SQL은 그렇게 많지는 않습니다.
SQL의 자료형 | Java의 자료형 |
---|---|
VARCHAR2 , CHAR , LONG |
String |
INTEGER , NUMBER |
int |
NUMBER |
double |
DATE |
Date |
보시면 NUMBER
가 정수형, 실수형 두개 모두 받을 수 있다는 것을 알 수 있습니다!
VERCHAR1
, CHAR
은 그렇게 많이 사용하진 않습니다.
우리가 주로 사용할 자료형은 VARCHAR2
, NUMBER
, DATE
이정도가 될 것 같습니다.
VARCHAR2
를 이용해서 테이블 만들기
우선 테이블을 만들어주겠습니다.
CREATE TABLE TB_VARCHAR(
COL1 VARCHAR2(10 BYTE),
COL2 VARCHAR2(10),
COL3 VARCHAR2(20)
);
이렇게 주면 첫번째 칼럼에 문자열 10바이트까지만 받겠다는 것이고, 두번째도 10바이트, 세번째는 20바이트만큼 저장하겠다는 것입니다. 오라클에서 입력을 허용할 단위는 붙여도 그만 안붙여도 그만입니다!
참고사항으로 문장이 끝나면 꼭 세미콜론(;
)을 붙여주세요! 그리고 모든 쿼리문장은 대문자로만 작성해주세요.
그러면 표가 잘 생성되었는지 봐야겠지요?
SELECT * FROM TB_VARCHAR;
를 입력하면 컬럼이 세개인 표가 생성된 것을 확인할 수 있습니다! 만약 내용이 바로 표시되지 않는다면 새로고침 버튼을 눌러보세요.
그러면 표 안에 내용을 삽입해봅시다.
INSERT INTO TB_VARCHAR(COL1, COL2, COL3)
VALUES('ABC', 'ABC', 'ABC');
INSERT INTO TB_VARCHAR(COL1, COL2, COL3)
VALUES('가나다', '가나다', '가나다');
이렇게 INSET INTO 테이블명(컬럼이름) VALUES('값');
의 형태로 테이블 내에 내용을 넣어줄 수 있습니다.
우리는 VARCHAR2
라는 문자형 자료로 받겠다고 미리 선언했기 때문에 내용은 따옴표로 감싸서 넣습니다.
내용을 넣을 때 큰따옴표를 사용하면 에러가 발생하므로 안됩니다.
이 때 글자당 바이트수는 영문자가 1자당 1바이트, 한글은 1자당 3바이트를 차지합니다.
표에 내용이 잘 입력되었는지 확인해봅시다.
오라클 함수 lengthb
를 이용하여 글자 수 파악하기
우리는 오라클의 내장함수인 lengthb
를 사용해서 글자수를 알아볼 수 있습니다. 여기서 글자수는 셀에 담긴 내용의 바이트수를 의미합니다.
SELECT COL1, COL2, COL3, lengthb(COL1), lengthb(COL2), lengthb(COL3)
FROM TB_VARCHAR;
이렇게 입력해주고 실행하면
표에 글자수가 보입니다. ABC는 영문자라서 한글자당 1바이트이기 때문에 3이 나온 것이고, 가나다는 각 3바이트이기 때문에 9가 나왔습니다!
LONG
타입
LONG
타입은 문자열 자료 중 가장 긴 타입이며, 최대 2GB의 자료를 담을 수 있습니다.
단, 테이블 당 최대 한개의 컬럼만 사용할 수 있습니다.
예를 들어서 우리가 ebook에 대한 정보를 텍스트로 담는다면 이렇게 표를 만들어 줄 수 있겠죠?
CREATE TABLE EBOOK(
TITLE VARCHAR2(200),
CONTENTS LONG
)
이렇게 책의 제목이 되는 글은 200바이트까지만 주고 내용이 되는 것은 LONG
으로 선언해서 많은 내용을 담게 해줄 수 있습니다.
숫자: 정수형과 실수형
우선 정수형 자료에 대해 살펴보겠습니다.
CREATE TABLE TB_INTEGER(
COL1 INTEGER,
COL2 INTEGER
);
INSERT INTO TB_INTEGER(COL1, COL2)
VALUES (12345, 67890);
SELECT * FROM TB_INTEGER;
이렇게 정수형 자료를 표에 입력해줄 수 있습니다.
INTEGER
는 정수형만 받기 때문에 INTEGER
로 선언된 자리에 소수점이 붙은 실수가 들어오면 소수점은 삭제됩니다. 예를 들어 123.45
를 받았다고 한다면 실제 출력되는 것은 123
뿐입니다.
그리고 VALUES (12345, 67890);
의 숫자를 따옴표로 묶어도 표에 입력되긴 하지만 숫자라고 선언을 했는데 이렇게 쓸일은 없겠죠?
그러면 실수 자료형을 넣어주려면 어떻게 해야 할까요? 바로 NUMBER
라는 자료형을 쓰면 됩니다. 이 자료형은 정수와 실수를 모두 받을 수 있기 때문에 편리하다고 할 수 있죠.
-- NUMBER 자료형으로 정수와 실수를 모두 사용해보자
CREATE TABLE TB_NUMBER(
COL1 NUMBER, -- 그냥 숫자만
COL2 NUMBER(5), -- 5자리 정수(소수점 찍으면 반올림되어 저장됨)
COL3 NUMBER(5, 2), -- 5자리 수 중 소수점은 둘째자리까지
COL4 NUMBER(*, 2) -- 모든 수의 소수점 둘째자리까지
);
우선 실수형으로 선언할 때 위 쿼리문과 같이 어떻게 생긴 형태의 값이 들어갈 지 알려줄 수 있습니다.
우선 단순히 자료형만 선언해준 경우 숫자(정수+실수)가 들어갈 것임을 말해줍니다.
그리고 하나의 숫자를 입력해주면 n자리수의 정수를 입력할 것임을 나타냅니다. 이 때 소수점을 찍게되면 반올림되어 저장됩니다.
그리고 두개의 숫자(p
, q
)를 써주면 p자리 수를 입력하는데 소수점은 둘째자리까지 입력할 것임을 나타내죠.
자 그러면 직접 내용을 넣어보겠습니다.
INSERT INTO TB_NUMBER(COL1, COL2, COL3, COL4)
VALUES (1234.5678, 12345.6, 123.456, 1234567.8909);
SELECT * FROM TB_NUMBER;
그러면 이렇게 생긴 표가 완성될 것입니다.
날짜와 시간 나타내기
데이터에서 날짜와 시간은 아주 중요합니다. 게시판을 작성해서 정렬한다고 할 때 날짜 및 시간순으로 정렬한다고 하면 더더욱 중요하겠죠?
날짜 시간의 타입은 DATE
입니다. 자 그럼 표를 만들어봅시다!
CREATE TABLE TB_DATE (
COL1 DATE,
COL2 DATE
);
두개의 열에 날짜 정보를 담을 것입니다.
여기에서 알아두어야 할 것이 SYSDATE
라는 것이 있는데 시스템의 오늘 날짜와 시간을 나타냅니다.
그리고 날짜를 연산할 수도 있는데, SYSDATE - 1
을 해주면 시스템 날짜에서 하루를 빼준 값이 나옵니다.
INSERT INTO TB_DATE(COL1, COL2)
VALUES (SYSDATE, SYSDATE-1); -- -1하면 하루 뺀 날짜
SELECT * FROM TB_DATE;
이렇게 첫번째 열에는 오늘 날짜와 시간, 두번 째 열에는 어제 날짜와 시간이 나타납니다.
외부에서 입력받아 들어온 날짜시간 처리하기
자바 등으로 개발된 백엔드를 통해서 날짜와 시간을 받는다고 할 때, 이는 SQL의 입장에서 외부로부터 받아온 자료라고 할 수 있습니다.
SQL은 이를 인지하지 못합니다. 그래서 아래와 같이 문자열로 바로 입력해주고 생성을 하려고 하면 에러가 발생합니다.
INSERT INTO TB_DATE(COL1, COL2)
VALUES (SYSDATE, '2021-12-31 11:50:10');
그렇지만 날짜만 단독으로 썼을 때는 가능합니다.
INSERT INTO TB_DATE(COL1, COL2)
VALUES (SYSDATE, '2021-12-31');
-
대신 /
를 써도 정확하게 인식합니다.
INSERT INTO TB_DATE(COL1, COL2)
VALUES (SYSDATE, '2021/12/31');
두개 모두 정확하게 인식하지요?
자 그러면 시간까지 함께 입력해주려면 어떻게 해야할까요? 바로 TO_DATE
라는 것을 함께 사용하는 것입니다.
INSERT INTO TB_DATE(COL1, COL2)
VALUES (SYSDATE, TO_DATE('2021-12-31 11:50:10', 'YYYY-MM-DD HH:MI:SS'));
이렇게 템플릿을 지정해주면 형식에 맞게 날짜와 시간이 입력됩니다. 주의해야 할 점은 월수를 MM
으로 썼기 때문에 분단위를 MM
으로 쓰면 충돌이 발생하기 때문에 MI
로 써줍니다.
실행을 해보면
이렇게 잘 입력된 것을 볼 수 있습니다.
SELECT
구문과 FROM
구문
프로그래밍을 하면서 CRUD는 굉장히 중요한 기능입니다. Create, Read, Update, Delete라는 이 과정을 Insert, Delete, Select, Update로 본다면 Select는 네가지 영역중에 가장 높은 퍼센테이지의 중요도를 가지고 있다고 할 수 있습니다.
우리는 검색기능을 제공하는 SELECT
에 대해 중점적으로 살펴보고, FROM
도 같이 보겠습니다.
SELECT
와 FROM
의 역할은?
A라는 것으로부터 B라는 것을 선택할테니 보여줘! 라고 하는 것을 다음과 같이 나타냅니다.
SELECT * FROM EMPLOYEES;
이렇게 쓰면 EMPLOYEES 테이블에 있는 모든 것을 보여달라는 의미가 되지요.
*
은 아스터리스크 라고 읽습니다.
SELECT * FROM TAB;
이 쿼리문을 실행하면 테이블에 대한 정보만 보여줍니다.
이처럼 SELECT
는 뒤에 값이나 컬럼명 또는 오라클 함수 그리고 서브쿼리가 붙습니다.
그리고 FROM
은 테이블명이나 서브쿼리가 올 수 있지요.
우리가 실습파일로 쓰려고 받아온 EMPLOYEES를 보겠습니다.
SELECT * FROM EMPLOYEES;
전체를 출력해보세요.
이렇게 1번부터 107번까지의 행이 만들어집니다!
여기에서 EMPLOYEE_ID
와 LAST_NAME
, SALARY
만 가져오고 싶다면 이렇게 할 수 있습니다.
SELECT EMPLOYEE_ID, LAST_NAME, SALARY FROM EMPLOYEES
이렇게 원하는 정보만 가져올 수 있습니다.
숫자 자료형 연산하기
테이블 내 요소들로 연산을 할 수도 있습니다. 만약에 LAST_NAME
, SALARY
에 추가적으로 SALALY
의 300만큼 더 받은 급여를 계산해서 보여주고 싶다면 SALARY + 300
을 추가해주면 입력된 값에 300만큼 더 해준 값을 추가로 보여줄 수 있습니다.
마찬가지로 연봉도 12를 곱한 SALARY * 12
를 별도로 입력해주면 연봉까지 볼 수가 있겠죠?
SELECT LAST_NAME, SALARY, SALARY + 300 FROM EMPLOYEES;
SELECT LAST_NAME, SALARY, SALARY * 12 FROM EMPLOYEES;
이렇게 연산의 결과는 연산을 해달라고 입력한 대로 컬럼명이 붙습니다.
문자열 연산하기
우리가 자바에서 System.out.println("가" + "나")
와 같이 입력하면 가나
로 출력되는 것을 알 수 있었습니다.
SQL에서도 마찬가지로 문자열을 연산할 수 있는데, 이 때 +
가 아닌 ||
를 사용합니다.
SELECT FIRST_NAME || ' ' || SALARY FROM EMPLOYEES;
이렇게 해주면 하나의 컬럼에 두개의 내용이 합쳐져 출력됩니다.
ALIAS : 컬럼명 바꿔서 출력하기(별명 붙이기)
테이블의 컬럼명을 바꿔서 출력할 수 있습니다.
SELECT EMPLOYEE_ID FROM EMPLOYEES;
이렇게 출력하게 되면 EMPLOYEE_ID
에 해당하는 컬럼의 내용들을 전부 보여줍니다. 그런데 출력될 때 컬럼명이 EMPLOYEE_ID
로 출력되기 때문에 한글로 바꿔서 출력하고 싶다면 AS
를 붙여서 한글로 출력해 줄 수 있습니다. 이 때 따옴표는 사용하지 않습니다.
SELECT EMPLOYEE_ID AS 사원번호 FROM EMPLOYEES;
SELECT EMPLOYEE_ID AS 사원번호, SALARY AS 월급 FROM EMPLOYEES;
위의 쿼리문이 아래의 쿼리문과 중복되므로 아래 쿼리문의 결과만 보여드리겠습니다.
AS
를 붙이지 않고 출력해도 잘 출력됩니다.
SELECT EMPLOYEE_ID 사원번호, SALARY 월급, FIRST_NAME 이름 FROM EMPLOYEES;
주의할 사항으로 별도의 이름을 붙일 때 띄어쓰기가 들어가면 반드시 큰따옴표(작은 따옴표 안됨)로 감싸줍시다!
SELECT EMPLOYEE_ID AS "사원 번호", SALARY AS 월급, FIRST_NAME 이름 FROM EMPLOYEES;
감싸주지 않으면 에러가 발생합니다!!
중복을 제거해주는 DISTINCT
우선 전체 자료를 다시 조회해봅시다.
SELECT * FROM EMPLOYEES;
전체를 다 불러와 놓고 보면 JOB_ID
항목에 중복이 다소 보입니다.
중복을 빼고 출력주려면 어떻게 해야 할까요? 바로 DISTINCT
를 사용해주면 됩니다.
SELECT DISTINCT JOB_ID FROM EMPLOYEES;
이렇게 해주면 중복된 항목을 제거하고 보여줍니다.
오늘 준비한 내용은 여기까지입니다. 연습문제를 통해 복습해보세요.
연습문제
문제
문제1) EMPLOYEES Table의 모든 자료를 출력하여라.
문제2) EMPLOYEES Table의 컬럼들을 모두 출력하라.
문제3) EMPLOYEES Table에서 사원 번호, 이름, 급여, 담당업무를 출력하여라.
문제4) 모든 종업원의 급여를 $300증가 시키기 위해서 덧셈 연산자를 사용하고 결과에 SALARY+300을 디스플레이하라.
문제5) EMP 테이블에서 사원번호, 이름, 급여, 보너스, 보너스 금액을 출력하여라.
(참고로 보너스는 월급 + (월급*커미션))
문제6) EMPLOYEES 테이블에서 LAST_NAME을 이름으로 SALARY을 급여로 출력하여라.
문제7) EMPLOYEES 테이블에서 LAST_NAME을 Name으로 SALARY * 12를 Annual Salary(연봉)로 출력하여라
문제8) EMPLOYEES 테이블에서 이름과 업무를 연결하여 출력하여라.
문제9) EMPLOYEES 테이블에서 이름과 업무를 “KING is a PRESIDENT” 형식으로 출력하여라.
문제10) EMPLOYEES 테이블에서 이름과 연봉을 “KING: 1 Year salary = 60000” 형식으로 출력하여라.
문제11) EMPLOYEES 테이블에서 JOB을 모두 출력하라(중복생략).
정답 예시
-- 문제1) EMPLOYEES Table의 모든 자료를 출력하여라.
SELECT * FROM EMPLOYEES;
-- 문제2) EMPLOYEES Table의 컬럼들을 모두 출력하라.
DESC EMPLOYEES;
-- 문제3) EMPLOYEES Table에서 사원 번호, 이름, 급여, 담당업무를 출력하여라.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY, JOB_ID FROM EMPLOYEES;
-- 문제4) 모든 종업원의 급여를 $300증가 시키기 위해서 덧셈 연산자를 사용하고 결과에 SALARY+300을 디스플레이하라.
SELECT SALARY + 300 FROM EMPLOYEES
-- 문제5) EMP 테이블에서 사원번호, 이름, 급여, 보너스, 보너스 금액을 출력하여라.
-- (참고로 보너스는 월급 + (월급*커미션))
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY,
NVL(SALARY * COMMISSION_PCT, 0) AS 보너스,
SALARY + NVL(SALARY * COMMISSION_PCT, 0) AS "실제 수령 금액"
FROM EMPLOYEES;
-- 문제6) EMPLOYEES 테이블에서 LAST_NAME을 이름으로 SALARY을 급여로 출력하여라.
SELECT LAST_NAME AS 이름, SALARY AS 급여 FROM EMPLOYEES;
-- 문제7) EMPLOYEES 테이블에서 LAST_NAME을 Name으로 SALARY * 12를 Annual Salary(연봉)로 출력하여라
SELECT LAST_NAME AS Name, SALARY * 12 AS "Annual Salary(연봉)" FROM EMPLOYEES;
-- 문제8) EMPLOYEES 테이블에서 이름과 업무를 연결하여 출력하여라.
SELECT FIRST_NAME || ' ' || LAST_NAME || ' ' || JOB_ID AS "Linked Employees" FROM EMPLOYEES;
-- 문제9) EMPLOYEES 테이블에서 이름과 업무를 “KING is a PRESIDENT” 형식으로 출력하여라.
SELECT FIRST_NAME || ' ' || LAST_NAME || ' is a ' || JOB_ID
FROM EMPLOYEES;
-- 문제10) EMPLOYEES 테이블에서 이름과 연봉을 “KING: 1 Year salary = 60000” 형식으로 출력하여라.
SELECT FIRST_NAME || ' ' || LAST_NAME || ': 1 Year salary = ' || SALARY * 12
FROM EMPLOYEES;
-- 문제11) EMPLOYEES 테이블에서 JOB을 모두 출력하라(중복생략).
SELECT DISTINCT JOB_ID FROM EMPLOYEES;
참고문헌
Rudy_님의 블로그 Art Rudy(https://artrudy.tistory.com/13?category=948553) 2021.12.21. 접속
홍형경(2019). 누구나 쉽게 SQL. 길벗. 28-32
'Study > SQL' 카테고리의 다른 글
[MySQL] Access denied for user 'root'@'localhost' to database 'information_schema' 해결하는 방법 (0) | 2022.03.11 |
---|---|
[MySQL] 시퀀스 생성하는 방법 (0) | 2022.02.23 |
OracleDB : 무결성, 시퀀스, CRUD (0) | 2022.02.16 |
OracleDB : JOIN과 SUB QUERY (0) | 2022.02.16 |
OracleDB : 조건문과 연산자 (0) | 2022.02.16 |