Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database (v)
04. Jsp [Server]

05. 미니프로젝트 (3W)
06. HTML,CSS  
07. JS

08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)

SQL

서브쿼리(Sub Query)

서브쿼리 작성 가능한 SQL절

  • SELECT 절(스칼라 서브쿼리)
  • FROM 절(인라인 뷰)
  • WHERE절
  • HAVING절
  • ORDER BY 절
  • INSER 문의 VALUES 절
  • UPDATE 문의 SET 절
  • CREATE TABLE 문의 AS 절

서브 쿼리 사용시 지켜야할 사항

  • 서브쿼리는 괄호로 둘러싸야 함
  • 서브쿼리는 비교 연산자의 오른쪽에 있어야 함
  • 서브쿼리는 ORDER BY 절을 포함할 수 없음

단일 행 서브쿼리

  • SELECT한 결과가 1행인 서브쿼리
  • 단일행 서브쿼리는 반드시 하나의 행을 리턴해야 함
SELECT * 
FROM EMPLOYEES 
WHERE SALARY >= (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME= 'Nancy');

다중 행 서브쿼리

  • 서브쿼리가 반환하는 행이 여러행이라면, 다중행 연산자를 쓰면됨
  • 다중행 연산자
연산자 설명
IN 목록의 어떤 값과 같은지 확인
ANY, SOME 값을 서브쿼리에 의해 리턴된 각각의 값과 비교해 하나라도 만족하면 됨
ALL 값을 서브쿼리에 의해 리턴된 모든 값과 비교해 만족해야 함
EXISTS 결과를 만족하는 값이 존재하는지 여부 확인
ALL과 ANY의 차이점 < ANY : 가장 큰 값보다 작으면 됨
> ANY : 가장 작은 값보다 크면 됨
< ALL : 가장 작은 값보다 작아야 함
> ALL : 가장 큰 값보다 커야 됨
= ANY : IN과 같은 역할
-- > ANY: 최소값 4800 보다 큰 데이터
SELECT *
FROM EMPLOYEES
WHERE SALARY > ANY (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME='David');

-- < ANY : 최대값 9500 보다 작은 데이터
SELECT *
FROM EMPLOYEES
WHERE SALARY < ANY (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME='David');

-- > ALL : 최대값 9500보다 큰 데이터 
SELECT *
FROM EMPLOYEES
WHERE SALARY > ALL (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME='David');

-- < ALL : 최소값 4800보다 작은 데이터 
SELECT *
FROM EMPLOYEES
WHERE SALARY < ALL (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME='David');

-- IN : 정확히 일치하는 데이터가 나옴
SELECT *
FROM EMPLOYEES
WHERE SALARY IN (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME='David');

스칼라 서브쿼리

SELECT FIRST_NAME,
       (SELECT DEPARTMENT_NAME FROM DEPARTMENTS D WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID) DEPARTMENT_NAME,
       (SELECT JOB_TITLE FROM JOBS J WHERE JOB_ID = E.JOB_ID) JOB_TITLE
FROM EMPLOYEES E;

인라인 뷰(Inline View)

SELECT ROWNUM,FIRST_NAME,SALARY
FROM (SELECT FIRST_NAME, SALARY
      FROM EMPLOYEES
      ORDER BY SALARY DESC)
WHERE ROWNUM BETWEEN 1 AND 10;