52일차

백엔드를 팝니다·2024년 8월 21일

개발자 수업

목록 보기
33/72

ORACLE_sql_subquery

-- 서브쿼리 (subquery) : sql 안에 sql를 또 사용하기
-- 예제 1) SCOTTT 사원보다 급여를 많이 받는 사원이 누구인지 출력
-- 1) SCOTT 사원이 급여 ?

SELECT SALARY
FROM EMPLOYEE
WHERE ENAME = 'SCOTT';

-- 2) 3000보다 큰 급여를 받는 사원(ENAME) 출력 ,
-- => 문제점 : select 2번 사용 - 네트웍속도 때문에 성능저하
SELECT ENAME, SALARY
FROM EMPLOYEE
WHERE SALARY > 3000;

-- => 개선 : 서브쿼리 사용
-- 사용법 : SELECT 컬럼명
-- FROM 테이블명
-- WHERE 비교컬럼 > (SELECT 비교컬럼
-- FROM 테이블명2
-- WHERE 조건절);
--서브 쿼리 사용시 위의 비교컬럼명은 일치해야함(좌/우)
-- (괄호)사용
-- 3) 비교연산자 : >, < = 등 : 단일행 서브쿼리
SELECT ENAME, SALARY
FROM EMPLOYEE
WHERE SALARY > (SELECT SALARY
FROM EMPLOYEE
WHERE ENAME = 'SCOTT');

-- 간단연습 : ALLEN 사원보다 급여를 작게 받는 사원이 누구인지 출력

SELECT SALARY
FROM EMPLOYEE

WHERE ENAME = 'ALLEN';

SELECT ENAME, SALARY
FROM EMPLOYEE
WHERE SALARY < (SELECT SALARY
FROM EMPLOYEE
WHERE ENAME = 'ALLEN');

-- 간단연습 2 : SCOTT 사원과 동일한 부서에서(DNO) 근무하는 사원(ENAME) 2개 출력하기
--힌트 1)SCOTT 사원의 부서번호를 찾기
-- 1-2) 위의 부서번호로 다른 사원 찾기 :

SELECT DNO
FROM EMPLOYEE
WHERE ENAME = 'SCOTT';


SELECT ENAME
FROM EMPLOYEE
WHERE DNO = (SELECT DNO
FROM EMPLOYEE
WHERE ENAME = 'SCOTT');

-- 그 밖에 서브쿼리 사용하기

-- 예제 2) 30번 부서에서 최소급여를(MIN) 구한 후) 2)그 최소 급여보다(MIN)
-- 부서별(DNO) 최소 급여가 큰 부서만 출력하세요.
-- 서브쿼리를 사용하세요.
-- 1) 30번 부서에서 최소급여를(MIN(SALARY)) 구한 후 : 950
SELECT MIN(SALARY)
FROM EMPLOYEE
WHERE DNO =30;

-- 2) 그 최소 급여보다(MIN) 부서별(DNO) 최소 급여가 큰 부서 구하기 :
SELECT MIN(SALARY)
FROM EMPLOYEE
GROUP BY DNO
HAVING MIN(SALARY) > (SELECT MIN(SALARY)
FROM EMPLOYEE
WHERE DNO =30);

--그 밖에 2)
SELECT 23, (SELECT 43 FROM DUAL)
FROM DUAL;

--그 밖에 3)
SELECT EM.ENAME, EM,ENO

FROM (SELECT * FROM EMPLOYEE) EM;

-- 결론 : 모든 위치에서 서브쿼리 사용가능

-- 3) 다중행 서브쿼리 : 결과가 여러건이 출력되는 서브쿼리
-- => 비교연산자(X) => IN 예악어
--예제4) (1)부서별 최소 급여를 받는 사원 중에서 (2) 사원번호와 이름을 출력하세요
-- (1) 부서별(DNO) 최소 급여(MIN(SALARY)) :

SELECT MIN(SALARY)
FROM EMPLOYEE
GROUP BY DNO;

-- (2) 그 값들 중에서 같은 급여를 받는 사원번호 , 이름 출력 :

SELECT ENO, ENAME
FROM EMPLOYEE
WHERE SALARY IN (SELECT MIN(SALARY)
FROM EMPLOYEE
GROUP BY DNO);

ORACLE_sql_table

--개발자 : select , insert, update, delete , 테이블 설계
-- 테이블만들기 : DDL문(데이터 정의어, Data Definition Language)
-- 실무 용어 : C(Create,생성(insert)) R(read,조회) U(update수정) Delete(삭제)

-- 테이블 : DB에 자료를 저장하는 최소단위
-- 예제 1) 테이블 생성 : Dept (부서)
-- DB(자료형) : (복습)
-- 1) 문자열 : VARCHAR2(자리수), CHAR(고정)
-- => 최대자리수 : 4000
-- 2) 숫자 : NUMBER(자리수,소수점자리수), NUMBER
-- 3) 날짜 : DATE
-- DB 에 저장되면 : 하드디스크 (쌈)
-- CREATE TABLE DEPT (
-- DNO NUMBER(2),
-- DNAME VARCHAR2(14),
-- LOC VARCHAR2(13)
-- ........
-- );

CREATE TABLE DEPT (
DNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);

-- 간단연습 : 위의 테이블과 유사한 DEPT2 을 만드세요

CREATE TABLE DEPT2 (
DNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);

profile
백엔드 고수가 되고싶은 사람

0개의 댓글