코딩짜는 일상

[현대이지웰 Java 풀스택 개발자 아카데미 6월] TIL 27 & 28 & 29일차 - Oracle 본문

TIL

[현대이지웰 Java 풀스택 개발자 아카데미 6월] TIL 27 & 28 & 29일차 - Oracle

Remily 2025. 8. 12. 15:02
반응형

📕 27일 배운 것

  1. sqlDeveloper 기본 조작
  2.  데이터베이스란?
    • DBMS
    • 시스템 상세 구조
  3. 데이터 구조
    • 논리적 구조
    • 물리적 구조
  4. 데이터 언어 종류
    • 데이터 정의어 (DDL : Data Definition Language)
    • 데이터 조작어 (DML : Data Manipulation Language)
    • 데이터 제어어 (DCL : Data Control Language)
  5. 관계형 데이터 모델
    • 릴레이션
    • 튜플
    • 제약
      • 기본키
      • 외래키
  6. SQL
    • 데이터 정의어 (DDL : Data Definition Language)
      • CREATE
      • ALTER
      • DROP

📙 새로 알게 된 것

  • 릴레이션 & 튜플
    • 릴레이션 = 테이블
    • 튜플 = 레코드, 로우(row), 행
    • 오라클은 사용하는 단어가 약간 다르다는 걸 알게 됨.

📕 28일 배운 것

  1. 데이터 조작어 (DML) - INSERT
  2. 시퀀스
  3. DUAL 테이블
  4. 데이터 임포트
  5. 데이터 조작어 (DML) - UPDATE
  6. 데이터 조작어 (DML) - DELETE
  7. 데이터 조작어 (DML) - SELECT
    • select
    • where
  8. 집계 함수
    • SUM()
    • AVG()
    • ORDER BY

📙 새로 알게 된 것

  • 시퀀스
    • 기본키에 자동 증가값을 적용할 때 사용.
    • 하나의 시퀀스를 여러 테이블에 사용 가능.
    • 예시) INSERT INTO 테이블명 VALUES(시퀀스명.NEXTVAL, 값1, 값2, ...);
    • 수업에선 직접 시퀀스를 호출하는 방법만 배웠지만 TRIGGER를 복합해서 쓰면 튜플이 추가될 때마다 자동 증가하도록 쓸 수 있는 모양이다.
    • 좀 더 알아봤더니 12c 이상부터는 MySQL의 AUTO_INCREMENT와 비슷한 IDENTITY를 제공한다고 한다.
  • DUAL 테이블
    • 단 하나의 열과 하나의 행만을 가진 오라클 내장 더미 테이블
    • 계산 또는 함수 결과를 SELECT로 조회할 때 사용
    • 기본적으로 문법상 select절이 필요한 작업 수행할 때 마땅한 테이블이 없으면 대신 사용하는 것 같다.
      예를 들어 INSERT ALL같은 거

📕 29일 배운 것

  1. 데이터 조작어 (DML) - SELECT
    • 집계 함수
      • MAX()
      • MIN()
      • COUNT()
      • GROUP BY
      • HAVING
      • ROUND()
    1.  
  2. 데이터 복사
  3. JOIN
  4. OUTER JOIN
  5. 서브 쿼리
    • 단일행 서브쿼리
      • = 연산자
    • 다중행 서브쿼리
      • IN, NOT IN 연산자

📙 새로 알게 된 것

  • GROUP BY
    • 오라클은 GROUP BY 에 포함되지 않은 비집계 열은 SELECT절에 허용하지 않는다.
    • 즉, SELECT절에 집계함수를 사용하지 않은 일반 열이 있다면 반드시 GROUP BY절에 추가해줘야 한다!
    • MySQL 8부터는 이 기능 있다고 들은 것 같긴한데 마이그레이션한 당시에도 딱히 관련 오류는 없었기에 오라클과 달리 필수는 아닌 모양이다. 오라클은 ORA-00979 에러를 표시한다.
  • 별칭
    • WHERE절은 결과로 내보일 튜플을 확정짓는데 사용되고 SELECT절은 확정된 튜플을 토대로 정보를 재가공?하는 느낌이라 from ➡️ where ➡️ select  순으로 동작하는 건 알고 있어서 SELECT 절에서 선언한 별칭을 WHERE절에서 사용할 수 없는 건 이해했고 MySQL과 동일했다.
    • 그런데 GROUP BY는 별칭 사용이 불가능한게 의외였다... select 다음이 group by ➡️ having ➡️ order by 라서 별칭 정보를 가져오기엔 문제가 없지 않나...?
    • 이유를 찾다가 오라클의 처리 순서가 MySQL과 완전히 다르다는 걸 알았다!!!
      FROM ➡️ WHERE ➡️ GROUP BY ➡️ HAVING ➡️ SELECT ➡️ ORDER BY 순이다! 이게 원인이었던 듯!

 

 

 

📗 오늘 회고

동일한 SQL 문법을 기반으로 하다보니 오라클과 MySQL은 많이 닮아서 배우기 편했다.

중간중간 서로 다른 부분 찾아보면서 공부하는게 재밌다!

 

특히 연습문제 풀면서 많이 배운 것 같다.

이론만 들어서는 비집계 열을 허용 안한다는게 무슨 소린가 했는데

연습문제 풀고서야 이해가 됐다!😎✨

 

오라클이 MySQL보다 규칙이 좀 더 엄격한 느낌이다...🥲

 

반응형