[23일 차] : Oracle - SELECT문(1)

서하루·2022년 11월 14일
0

(2) Oracle 공부기록

목록 보기
1/11
post-thumbnail

[학습목표]

  • Database
  • DBMS
  • Oracle_SELECT문

1. Database(데이터베이스)란?

필요한 여러 정보를 공용할 수 있도록 중복되는 데이터를 최소화하여 구조적화 된 정보를 저장해놓은 것

------------------------------------------------------------------------
(1). 공용데이터 : 공통으로 사용되는 데이터
(2). 통합데이터 : 중복 최소화로 중복으로 인한 데이터 불일치 현상 제거
(3). 저장데이터 : 컴퓨터 저장장치에 저장된 데이터
(4). 운영데이터 : 조직의 목적을 위해 사용되는 데이터

📢 특징1. 실시간 접근성 : 실시간으로 결과 서비스
📢 특징2. 데이터 값은 항상 바뀜
📢 특징3. 여러 사용자에게 동시공유됨
------------------------------------------------------------------------

2. DBMS(DataBase Management System)

데이터베이스에서 데이터 추출, 조작,정의 제어 등을 할 수 있게 해주는 데이터베이스 전용 관리 프로그램

✅ 데이터베이스의 유형으로는 관계형 데이터베이스가 있다. 관계형 데이터베이스란, 모든 데이터를 2차원 테이블 형태로 표현하고 테이블 사이의 비즈니스적 관계를 도출하는 구조데이터의 중복을 최소화하며 업무 변화에 대한 적응력이 우수하다.


3. Oracle SELECT문

SELECT문 => 데이터를 조회할 때 사용되는 구문
RESULT SET => SELECT문에 의해 조회된 결과물(조회된 행들의 집합)

[표현법]
SELECT 조회하고자하는 컬럼 ' ' '(컬럼명은 여러개 가능) FROM 테이블명; WHERE 행을 선택하는 조건기술 (=IF문의 조건식 느낌)

✅ Oracle의 예약어, 테이블명, 컬럼명, 계정명은 대소문자 가리지 않음 !


📚 간단한 테이블 조회 실습 📚

-- EMPLOYEE  테이블의 모든 컬럼 조회하기 => *
SELECT *
FROM EMPLOYEE;

-- EMPLOYEE 테이블의 사번, 이름 급여만 조회하기
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE;

📚 컬럼값을 통한 산술연산 📚
✅ SELECT절 컬럼명 작성부분에 산술연산식 기술 가능 ✅ DATE형식끼리도 연산 가능 => 오늘날짜 : SYSDATE

--EMPLOYEE 사원의 연봉 조회
SELECT EMP_NAME, SALARY*12
FROM EMPLOYEE;

-- EMPLOYEE의 사원명, 급여, 보너스, 연봉, 보너스포함된 연봉 조회
SECECT EMP_NAME, SALARY, BONUS, SALARY*12, (SALART+BONUS*SALARY)*12
FROM EMPLOYEE;DATE형식끼리도 연산 가능
-EMPLOYEE의 사원명, 입사일, 근무일수(오늘날짜-입사일) 조회
SELECT EMP_NAME, HIRE_DATE, SYSDATE-HIREDATE
FROM EMPLOYEE;

📚 컬럼명에 별칭 지정하기 📚
✅ 조회시 컬럼명 또는 산술식 뒤에 별칭을 부여하여 깔끔하게 조회할 수 있다.

[표현법] 4가지
컬럼명 별칭 // 컬럼명 AS 별칭 // 컬럼명 "별칭"// 컬렴명 AS "별칭"
=> AS가 있던 없던간, 별칭에 띄어쓰기 혹은 특수문가 포함된 경우,
반드시 쌍따옴표로 묶어서 표기하기 !

SELECT EMP_NAME 사원명, SALARY AS 급여, SALARY*12 "연봉(원)",(SALARY+SALARY*BONUS)*12 AS "총 소득"
FROM EMPLOYEE;

📚 리터럴 📚
✅ 임의로 지정한 문자열(' ') SELECT절에 리터럴을 제시하면 테이블에 존재하는 데이터처럼 조회 가능하다. 모든행에 반복적으로 같이 출력됨 !

-- EMPLOYEE의 사번, 사원명 급여 조회
SELECT EMP_ID, EMP_NAME, SALARY'원' "단위"
FROM EMPLOYEE;

📚 연결연산자 : ||📚
여러 컬럼값들을 마치 하나의 컬럼인것처럼 연결하거나, 컬럼값과 리터럴을 연결할 수 있음 System.out.println("num : " + num); 에서 +와 같은 느낌이다.

SELECT EMP_ID || EMP NAME || SALARY
FROM EMPLOYEE;


↓↓↓↓↓↓↓ 조회결과

> 컬럼값과 리터럴 연결하기

SELECT EMP_NAME || '의 월급은 ' || SALARY || '원 입니다.' AS "급여 정보"
FROM EMPLOYEE;

↓↓↓↓↓↓↓ 조회결과


📚 DISTINCT 📚
✅ 컬럼에 중복된 값들을 한번씩 조회하고 할 때 사용
✅ DISTINCT는 SELECT절에 한번만 기술 가능

-- EMPLOYEE에 직급코드 조회
SELECT JOB_CODE
FROM EMPLOYEE;  -- 23개 행 조회

-- 중복제거 조회
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;  -- 7개 행 조회

-- 부서코드 조회
SELECT DEPT_CODE
FROM EMPLOYEE;

-- 중복제거 조회
SELECT DISTINCT DEPT_CODE
FROM EMPLOYEE;

SELECT DISTINCT JOB_CODE, DEPT_CODE
FROM EMPLOYEE;
-- (JOB_CODE, DEPT_CODE) 쌍으로 묶여서 중복 판별

📚 WHERE 절 📚
✅ 조회하고자 하는 테이블로부터 특정 조건에 만족하는 데이터만 조회하고자 할 때 WHERE절에 조건식 제시!

<비교연산자>
1. > , <, >=, <= -> 대소비교
2. = -> 같은지 비교
3. !=, ^=, <> -> 같지 않은지 비교

--EMPLOYEE에서 부서코드가 D9인 사원만 조회(단, 사원명, 급여만 조회)
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';

-- 부서코드가 'D9'가 아닌 사원들의 사번, 사원명,부서코드 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9';

-- 급여가 400만원 이상인 사원들의 사원명,부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 4000000;

📚 논리연산자 📚
✅ 여러개의 조건을 엮어서 제시할 때 사용
AND(~이면서, 그리고) OR(~이거나, 또는)

-- 부서코드가 'D9'이면서 급여가 500만원 이상인 사원명, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9' AND SALARY >= 5000000;

-- 부서코드가 'D6'이거나 급여가 300만원 이상인 사원명, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR SALARY >= 3000000;


-- 급여가 350만원 이상 600만원 이하를 받는 사원들의 사원명, 급여 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE 3500000<=SALARY AND SALARY <=6000000;

📚 BETWEEN AND 📚
✅ 몇 이상 몇 이하의 범위에 대한 조건을 제시할 때 사용하는 연산자

[표현법]
비교대상컬럼 BETWEEN 하한값 AND 상한값

SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 6000000;


SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
-- NOT : 논리부정연산자 (자바에서의 !와 같은 존재)
-- 컬럼명 앞 또는 BETWEEN 앞에 기입

-- 입사일이 '90/01/01 ~ '01/01/01' 조회
SELECT *
FROM EMPLOYEE
--WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01'; -- DATE 타입끼리도 대소비교 연산 가능 
WHERE HIRE_DATE BETWEEN '90/01/01' AND '01/01/01';

0개의 댓글