컬렉션 프레임워크는 수 많은 인터페이스가 있는 인터페이스 덩어리입니다.

 

 


 

JCF(Java Collection Framework)는객체들을 효율적으로 CRUD할 수 있도록 제공되는 컬렉션 라이브러리입니다.

java.util(표준) 패키지에 포함되며, 인터페이스를 통해서 이미 정해진 규격대로 컬렉션을 사용하면 됩니다.

 

JCF의 주요 인터페이스입니다.

 


 

JCF Interface

 

예를 들어, List 인터페이스의 코드를 구현하면 다음과 같습니다.

 

List<Integer> list = new ArrayList<>();

 

JCF Interface

 

JCF는 OOP에 근거되어 구현됩니다.

List라는 인터페이스의 규격에 맞춰 ArrayList가 구현한다고 할 수 있습니다.

 


 

멀티 스레드 환경에서 ArrayList는 'thread-unsafe'하기 때문에, 일반적으로 'thread-safe'한 Vector를 사용합니다.

 

다른 Set과 Map 인터페이스에서도 Vector와 비슷하게 thread-safe한 클래스가 있는데,

바로 HashSet, HashTable 클래스가 thread-safe합니다.

 

컬렉션의 특징을 잘 알고 있어야, 데이터의 성격에 따라 올바른 인터페이스를 선택할 수 있습니다.

 

 

 

 

 

 

'Java > Collection Framework' 카테고리의 다른 글

트리 컬렉션  (0) 2023.08.04
맵 컬렉션  (0) 2023.08.03
셋 컬렉션  (0) 2023.08.03
리스트 컬렉션  (0) 2023.08.02

 

 

 

제네릭(Generic)은 API Document 해석을 위해 학습이 필요합니다.

변수 앞에 붙이는 타입을 잘못 기재하는 것을 방지하기 위한 목적으로 Java 8부터 제네릭이 출현하였습니다.

정식적으로 제공된 것은 Java 5부터 였으나, Java 8부터 주목받기 시작했습니다.

 


 

 

제네릭을 학습하기에 앞서, 알아야할 용어를 정리하였습니다.

 

제네릭 타입 :
제네릭 타입은 제네릭 인터페이스와 제네릭 클래스을 의미합니다.


제네릭 메소드 :
메소드에도 제네릭 문법( <> )이 적용 가능합니다.


타입 파라미터(Type Parameter, 타입 매개변수) :
타입 파라미터는 전달인자로 "참조타입의 이름"을 받는 목적의 파라미터입니다. 기본타입은 없습니다.

- 다음은 타입 파라미터의 문법입니다. 타입 파라미터는 최소 1개 이상 선언해야 합니다.
  EX) <E>, <T>, <E, T>

- 다음은 타입 파라미터의 예시입니다.
  EX)
  class ArrayList<E>
  여기서 다이아몬드 기호에 할당되는 단대문자 'E'가 바로 타입 파라미터입니다.

 

타입 파라미터의 예시 코드입니다.

 

class ArrayList<E> { // E : Element
    // sample code
    
    List<String> list = new ArrayList<String>(); // 좌, 우항 모두 타입 파라미터는 같아야 함.
}

 


 

제네릭은 참조타입 간의 강제 형 변환을 하는 것이 주 목적입니다.

간단한 예제로 살펴보겠습니다.

 

Box 클래스

@NoArgsConstructor
@Getter @Setter
public class Box<T> {
    private T t;
	
} // end class

 

실행 클래스

 

@Log4j2
public class BoxExample {

	
    public static void main(String[] args) {
        // 1. 제네릭 클래스로부터 상자를 생성
        Box<String> box = new Box<>();
		
        // 2. 상자에 객체를 넣음
        box.setT("hello");
		
        // 3. 상자에서 다시 꺼냄
        String str = box.getT();
		
        // 4. 꺼낸 객체를 출력
        log.info("str : {}", str);
        
    } // main
	
} // end class

 

제네릭을 사용하게 되면 컴파일 시 강한 타입 체크가 가능하고,

가장 큰 이점은 더 이상 형 변환할 필요가 없다는 것입니다.

 

 

 

 

 

 

 

 

pom.xml은 Maven Project의 설정 파일입니다.

Maven Project를 생성하고 pom.xml을 수정해야 합니다.

VScode에서 XML 확장자 설치 후 편집하시면 편합니다.

XML 열기 -> pom.xml 파일을 열고 우클릭 후 Open With -> Other -> External programs -> Code Worksapce Source File

 

** 추천 확장자 **

더보기

- XML

- XML Tools

- XML Format

- XML to JSON

 

 


 

 

 

Maven을 생성 후 pom.xml의 최상단에 다음의 DOCTYPE 태그를 추가해야 합니다.

 

<?xml version = "1.0" encoding = "UTF-8"?>

 

그 후 <project> 태그의 속성을 가독성 있게 정리합니다.

 

<project
	xmlns="http://maven.apache.org/POM/4.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

 

 

그 아래 태그들은 넘어갑니다.( groupId, artifactId, version )

 

 

<packaging> 태그는 Apache Maven을 통해 진행한 프로젝트의 최종 파일의 확장자를 결정합니다.

여기서 pom.xml은 jar 확장자로 되어 있습니다. 

웹앱 프로젝트에서는 war 확장자로 되어 있습니다.

 

<packaging>jar</packaging>
<!-- <packaging>war</packaging> -->

 

- <name> 태그는 진행하는 프로젝트의 이름입니다.

- <name> 태그 아래의 <url>은 프로젝트의 주소를 입력하는 곳인데 일반적으로 잘 사용하지 않습니다.

 

 

<properties> 태그는 속성을 정의합니다.

<properties> 가 감싸고 있는 부분은 자바 버전, 자바의 환경변수를 세팅합니다.

태그의 이름은 사용자가 임의로 지을 수 있습니다.

 

  <!--  현재 프로젝트에 필요한 속성을 정의하는 태그-->
  <properties>
    <java-version>17</java-version>
    <java-home>${env.JAVA_HOME}</java-home>
    
    <!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> defualt -->
  </properties>

 

그리고 <properties> 태그 위 아래로 두 칸씩, 사용자 정의 속성과 Encoidng은 1칸씩 공백을 두어 가독성을 높입니다.

 

 

그 아래 <dependencies> 태그는 필요한 라이브러리, 즉 의존성을 정의합니다.

의존성은 Maven Repository에서 <dependency> 태그로 넣으시면 됩니다.

추가된 의존성은 Maven Project 내부에 Maven Dependencies에서 확인할 수 있습니다.

 

자세한 의존성 정의 방법은 추후에 다루겠습니다.

저는 junit5와 lombok 의존성을 추가하였습니다.

 

  <dependencies>
  
    <!-- 테스트 코드 api -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
    
    <!-- 추가된 롬복 의존성 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <!-- 의존성의 버전 -->
      <version>1.18.28</version>
      <!-- scope의 provided는 컴파일에 필요하며 Runtime일 때 제거한다는 의미 -->
      <!-- scoop 태그를 삭제하면 default가 compile -->
      <!-- 롬복은 런타임 시에도 필요하므로 scope 태그 제거 -->
      <!-- <scope>provided</scope> -->
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.20.0</version>
    </dependency>
    
  </dependencies>

 

의존성이 잘 정의됐는지 Dependency Hierarchy로 계층 구조를 확인합니다.

 

Dependency Hierarchy

 

log4j-core 의존성을 추가하면 log4j-api는 자동으로 추가됩니다.

 

 

마지막으로 <build> 태그를 정의합니다.

<build> 태그는  eclipse의 기능을 확장시키는 <plugin> 태그를 사용하기 위함입니다.

만약 웹앱 프로젝트로 생성하였다면 war 플러그인도 추가합니다.

 

  <build>
	  
    <finalName>/</finalName>

    <plugins>
       <!-- 웹앱 프로젝트 추가 플러그인 -->
<!--  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.4.0</version>
      </plugin> -->
      
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <version>2.10</version>

          <configuration>
              <downloadSources>true</downloadSources>
              <!-- <downloadJavadocs> == 자바 공식문서 다운로드 결정 -->
              <downloadJavadocs>false</downloadJavadocs>
          </configuration>
      </plugin>

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.11.0</version>

          <configuration>
            <release>${java-version}</release>
          </configuration>
      </plugin>

    </plugins>

  </build>

</project>

 

 

pom.xml을 단 1글자라도 수정하면 Maven project를 무조건 업데이트해야 합니다.

Maven Project를 선택하고 상단 Project 메뉴에 "Update Maven Project"로 진행합니다.

단축키는 "Alt + F5"를 누르시면 됩니다.

 

 

 

 

 

'Spring boot > Maven' 카테고리의 다른 글

Maven Dependency List  (0) 2023.09.01
JUnit5  (0) 2023.08.23
JUnit4  (0) 2023.08.22
Maven dependency 추가하기  (0) 2023.08.21

 

 

 

모든 Error와 Exception은 java.lang.throwable에 의해 만들어집니다.

Exception은 Cheched Exception(일반 예외)과 Runtime Exception(실행 예외)이 있는데, 

Checked Exception은 컴파일러가 사용자에게 알려주지만 RuntimeException은 관여하지 않기 때문에 유의해야 합니다.

 

 


 

□ Runtime Exception

Runtime Exception은 Exception 처리 코드를 생략하더라도 컴파일이 되는 Exception을 뜻합니다.

 

다음은 Runtime Exception의 대표적인 종류입니다.

 

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • ClassCastException
  • NumberFormatException

 


 

1. NullPonterException

NullPonterException은 객체 참조가 없는 상태에서의 Exception입니다.

null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생합니다.

 

다음은 예시 코드입니다.

 

@Log4j2
public class NullPointerException {

	
    public static void main(String[] args) {
//      String data = null;
//      log.info(data.toString());
		
    } // main
    
} // end class

 

위의 코드를 실행하면 아래와 같은 오류 코드가 발생합니다.

 

NullPointerException

 

첫번 째 줄에서 왼쪽은 Exception 이름, 오른쪽은 Exception이 발생하게 된 이유입니다.

두번 째 줄은 Stack Trace입니다.

Stack Trace은 프로그램의 실행 경로를 역순으로 나열해서 콘솔 뷰에서 보여주는데,

Bottom-Up으로 읽은게 일반적이며, Runtime Exception을 처리할 때 사용됩니다.

 

 

 

2. ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException은 배열에서 인덱스 범위를 초과해서 사용할 경우 발생합니다.

 

다음은 예시 코드입니다.

@Log4j2
public class ArrayIndexOutOfBoundsException {

	
    public static void main(String[] args) {
        if(args.length == 2) {
            String data1 = args[0];
            String data2 = args[1];
            String data3 = args[2];
			
            log.info("args[0] : ", data1);
            log.info("args[1] : ", data2);
            log.info("args[2] : ", data3);
        } else {
            log.info("[ 실행 방법 ]");
            log.info("java ArrayIndexOfBoundsException   ");
            log.info("값1 값2");
        } // if - else
		
    } // main
	
} // end class

 

args의 배열 길이가 2일 경우에만 log.info로 출력하게 하였고,

그 외의 경우는 실행 방법을 출력해서 예외 처리를 하였습니다.

 

위의 코드를 컴파일할 경우 다음과 같은 오류 코드가 발생합니다.

 

ArrayOutOfBoundsException

 

 

 

3.ClassCastException

ClassCastException은 타입 변환이 되지 않을 경우 발생합니다.

 

다음은 예시 코드입니다.

 

 

@Log4j2
public class ClasscastException {

    public static void main(String[] args) {
        Dog dog = new Dog();
        ClasscastException.chageDog(dog);
		
        Cat cat = new Cat();
        ClasscastException.chageDog(cat);
		
    } // main
	
	
    public static void chageDog(Animal animal) {
        if(animal instanceof Dog) {
            Dog dog = (Dog) animal; // ClassCastException 발생 가능
        } else if(animal instanceof Cat) {
            Cat cat = (Cat) animal;
        } else {
            throw new IllegalArgumentException(String.format("값이 잘못 들어왓습니다."));
        }
		
    } // changeDog

} // end class

class Animal{;;}
class Dog extends Animal{;;}
class Cat extends Animal{;;}

 

Animal 부모 클래스를 생성하고, 

Animal 클래스를 extends하는 Dog, Cat클래스를 각각 생성합니다.

실행 클래스에서 Dog와 Cat의 인스턴스를 생성하고 changeDog 메서드를 호출해서 타입변환을 시도합니다.

changeDog 메서드는 Animal 타입의 파라미터를 받고 각 파라미터의 타입을 instanceof로 비교해서 맞는 타입으로 변환합니다.

 

위의 코드는 문제가 없지만 만약 Cat으로 변환하는 else가 없다면 ClassCastException이 발생합니다.

 

ClassCastException

 

ClassCastException이 발생할 경우 IlleageArgumentException을 발생시켜 값이 잘못 들어왔음을 알려줍니다.

 

 

 

4. NumberFormatException

NumberFormatException은 데이터 타입의 타입 변환이 불가할 때 발생합니다.

 

다음은 예시 코드입니다.

 

@Log4j2
public class NumberFormatException {
	
	
    public static void main(String[] args) {
        // 최초 입력 데이터는 문자열
        String data1 = "100";
        String data2 = "a100";
		
        // 위의 문자열 중, 숫자 형태의 문자열을 Int타입으로 변경
        int value1 = Integer.parseInt(data1);
        int value2 = Integer.parseInt(data2);
		
		
        int result = value1 + value2;
        log.info("{} + {} + = {}", data1, data2, result);
    } // main
	
} // end class

 

위의 코드를 실행시키면 NumberFormatException이 발생합니다.

 

NumberFormatException

 

a100에 문자 'a'가 있기 때문에 NumberFormatException이 발생했으며, 콘솔에서도 확인할 수 있습니다.

 

 

 

 

 

 

'Java' 카테고리의 다른 글

보조 스트림  (0) 2023.08.17
파일 클래스  (0) 2023.08.17
Exception  (0) 2023.07.27
익명구현객체  (0) 2023.07.26
인터페이스 다중 상속  (0) 2023.07.26

 

 

 

개발 환경을 구축하실때 유용한 프로그램들을 정리했습니다.

 

 

 

필수

- Eclipse, VScode, Idea ( eclipse-java, vscode, idea ), 개발 환경에 맞는 도구 선택
- 코레토 ( corretto-jdk, 자바 킷 ), 테무린 ( temurin-jdk, 자바 킷) 등, 필요에 따라 search로 버전 검색 후 설치
- VisualVM( 애플리케이션 모니터링 툴 ), VisualVM 설치방법
- JMC( Java Mission Control, 오라클 자바 진단 툴 ) - scoop install jmc

 

 

권장

- 모질라 파이어폭스( Mozilar FireFox, 웹 브라우저 ) - scoop install firefox
- 서브라임 텍스트 ( Sublime-Text, 텍스트 편집기 ) - scoop install sublime-text
- 고우 ( Gow, Unix 명령줄 도구 패키지 ) - scoop install gow
- 카카오톡 ( KakaoTalk, 메신저 ) - scoop install kakaotalk

- 메이븐 ( Maven, 프로젝트 빌드 ) - scoop install maven
- 시스인터널 ( Sysinternals, 윈도우 시스템 유틸리티 ) - scoop install sysinternals

 

 

기타 프로그램은 "scoop search"로 검색해서 설치하시면 됩니다.

 

 

 

'개발자 환경설정 > Scoop' 카테고리의 다른 글

스쿱 설치  (0) 2023.07.27

[ 최종 수정일 : 2023년 09월 20일 ]

 

 

 

scoop은 PowerShell로 개발 환경을 구축하고 관리할 수 있는 도구입니다.

 

 

 

 

https://scoop.sh/

 

scoop.sh

 

위의 사이트에 들어가면 다음과 같은 화면이 나옵니다.

 

Scoop Homepage

 

위 화면에서 QuickStart라는 메뉴에 있는 두 줄의 명령어를 차례로 입력하면 됩니다.

본인이 설치하고 싶은 디렉터리로 이동 후 입력합니다.

 

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex

 

위의 명령어를 입력해서 PowerShell에 다음 명령어가 출력되는 것을 확인합니다.

 

PowerShell


 

□ scoop 설치 이후 초기 설정

 

 

PowerShell에 다음 명령어를 입력합니다.

 

scoop install git

 

scoop은 git을 통해 프로그램 버전 관리를 하기 때문에 git을 먼저 설치해야 합니다.

 

scoop으로 깃 설치 완료

 

설치가 완료되면 Notes가 뜨는데,

Notes는 사용자가 작업해야 하는 목록들을 보여줍니다.

 

위의 화면에서는 다음과 같은 명령어가 있습니다.

 

Set Git Credential Manager Core by running: "git config --global credential.helper manager"

To add context menu entries, run 'C:\app\scoop\apps\git\current\install-context.reg'

To create file-associations for .git* and .sh files, run 'C:\app\scoop\apps\git\current\install-file-associations.reg'

 

Notes에 적힌 명령어들을 콘솔창에 입력하고 레지스트리(reg) 또한 등록 해줍니다.

 

 

이후 다음의 명령어를 순서대로 입력합니다.

 

scoop bucket add main
scoop bucket add extras
scoop bucket add versions
scoop bucket add java

 

bucket은 패키지 저장소입니다. bucket에는 설치할 수 있는 패키지의 목록과 각 패키지의 설치 정보가 포함되어 있습니다.

 

  • "main bucket"은 개발 도구 등의 다양한 패키지를 제공합니다.
  • "extra bucket"은 main bucket에 없는 추가적인 소프트웨어를 제공합니다.
  • "versions bucket"은 구버전같은 특정 버전의 프로그램을 제공합니다.
  • "java bucket"은 temurin이나 corretto같은 jdk 패키지를 제공합니다.

 


 

□ scoop 기본 명령어

 

 

scoop search :

scoop에서 설치 가능한 모든 패키지 목록을 제공합니다. 만약 특정 프로그램을 검색하고자 한다면 search 뒤에 프로그램 이름을 입력하면 됩니다.
예를 들어,
"scoop search corretto"
"scoop search eclipes"
뒤에 붙인 단어를 포함하는 모든 패키지 목록를 제공하게 됩니다.

 

 

scoop install, uninstall 이름 :

search를 통해 찾은 패키지의 이름을 입력하면 설치, 삭제할 수 있습니다.

 

 

scoop update :

scoop과 설치된 패키지들을 업데이트합니다. update 뒤에 패키지 이름을 붙여 특정 패키지만 업데이트할 수 있습니다.

 

 

scoop list :

scoop으로 설치한 패키지들의 목록을 제공합니다.

 

 

scoop help :

이 외에 추가적인 명령어들을 제공합니다.

 

 

 

 

 

'개발자 환경설정 > Scoop' 카테고리의 다른 글

스쿱 기본 프로그램  (0) 2023.07.27

 

 

예외는 CheckecdException(일반 예외)와 RuntimeException(실행 예외)가 있습니다.

RuntimeException은 Exception에 포함되어 있지만

컴파일러는 RuntimeException에 개입하지 않습니다.

 

 


ChechedException은 체크를 당하는 예외이며 컴파일 당하게 됩니다. 

대표적인 일반 예외는 다음과 같습니다.

java.lang.ClassNotFoundException

java.lang.InterruptedException

 

RuntimeException은 컴파일이 체크에 개입하지 않습니다. 정확히는 컴파일러가 예외를 무시하게 됩니다.

대표적인 실행 예외는 다음과 같습니다.

java.lang.NullPointerException

java.lang.ArrayIndexOutOfBoundsException

java.lang.ClassCastException

java.lang.NumberFormatException

 

 


 

1. NullPointException

객체 참조가 없는 상태, null 값을 갖는 참조변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생합니다.

 

NullPoinException

 

NullPointException-consoleView

 

첫 줄을 보시면 예외의 타입, 예외의 원인을 보여주고 있습니다.

 

두번째 줄은 stacktrace입니다.

stacktrace는 시스템에서 보내는 오류 메세지인데, 예외가 발생한 시점에서의 메소드 호출 스택을 보여줍니다.

stacetrace가 길어지면 호출의 흐름을 Bottom-Up으로 읽는게 일반적입니다.

그렇다면 위의 메세지에서의 메소드 호출 스택은 "NullPointerException.java:12" 이 됩니다.

즉, "data"가 "null"이므로 String.toString()을 invoked(호출)할 수 없다는 뜻입니다.

 

 

 

2.  ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과해서 사용할 경우 발생합니다.

 

ArrayIndexOutOfBoundsException

 

Run Configuration에서 args에 값을 넣어주지 않으면 else에서 예외를 처리하게 됩니다.

 

ArrayIndexOutOfBoundsException 발생

 

args에 값을 할당하게 되면 정상적으로 동작합니다.

 

 

 

3. ClassCastException

형 변환이 잘못되었을 때 발생합니다.

 

ClassCastException

 

위의 코드에서 Dog 타입의 dog를 changeDog 메서드의 Animal 타입 파라미터로 던져주고,

changeDog 메서드는 instanceof로 받은 파라미터가 Dog 타입인지 확인합니다.

이후 Dog 타입이면 animal 타입의 파라미터인 dog를 Dog타입으로 강제 형 변환합니다.

 

만약 Cat 타입의 cat 객체가 changeDog 메서드의 파라미터로 던져지게 되면, instanceof에서 필터링하고

changeDog 메서드에서 cat의 강제 형변환이 실행되지 않게 됩니다.

 

만약 cat도 강제 형 변환을 하고 싶다면 다음과 같이 코드를 작성할 수 있습니다.

@Log4j2
public class ClasscastException {

    public static void main(String[] args) {
        Dog dog = new Dog();
        ClasscastException.chageDog(dog);
		
        Cat cat = new Cat();
        ClasscastException.chageDog(cat);
		
    } // main
	
	
    public static void chageDog(Animal animal) {
        if(animal instanceof Dog) {
            Dog dog = (Dog) animal; // ClassCastException 발생 가능
        } else if(animal instanceof Cat) {
            Cat cat = (Cat) animal;
        } else {
            throw new IllegalArgumentException(String.format("값이 잘못 들어왓습니다."));
        }
		
    } // changeDog

} // end class

class Animal{;;}
class Dog extends Animal{;;}
class Cat extends Animal{;;}

 

 

 

4. NumberFormatException

 

NumberFormatException

data1은 문자열 타입의 숫자라서 Integer.parseInt로 타입 변환이 가능하지만,

data2는 문자 a가 섞여 있어서 Int로의 타입 변환이 불가능합니다.

 

위 코드를 실행하면 다음과 같은 오류 메세지가 출력됩니다.

NumberFormatException

 

 

 


 

 

이러한 Eception들은 try-catch-finally 블록을 이용해서 Exception 코드를 처리할 수 있습니다.

'Java' 카테고리의 다른 글

파일 클래스  (0) 2023.08.17
Exception Handling  (0) 2023.07.28
익명구현객체  (0) 2023.07.26
인터페이스 다중 상속  (0) 2023.07.26
패턴 매칭 연산자  (0) 2023.07.26

 

 

 

EQUI JOIN은 두 개 이상의 테이블에서 같은 값이 있는 행을 합치는 방식입니다.

 

 


 

EQUI는 "equal"의 줄임말로 "같다"라는 뜻을 가지고 있습니다.

즉, EQUI JOIN은 공통의 칼럼에서 값이 "같은" 행을 결합한다는 뜻입니다.

 

다음은 EQUI JOIN에 대한 간단한 SQL 쿼리입니다.

 

-- Oracle JOIN --

SELECT
    employee_id,
    department_name
FROM
    employees t1,
    departments t2
WHERE
    t1.department_id = t2.department_id;


-- Ansi JOIN --

SELECT
    employee_id,
    department_name
FROM
    employees t1 INNER JOIN departments t2
    ON t1.department_id = t2.department_id;

 

 

 

Oracle은 두 테이블을 결합하고 WHERE절에서 체크조건으로 필터링합니다.

Ansi는 INNER JOIN으로 두 테이블을 결합하고 ON절로 필터링합니다.

 

 

저는 개인적으로 Oracle 문법이 직관적이어서 특별한 환경이 아니라면 Oracle 문법을 사용합니다.

 

 

 

'Database > SQL' 카테고리의 다른 글

그룹화  (0) 2023.08.17
인라인 뷰  (0) 2023.08.17
외래 키  (1) 2023.08.16
데이터 사전  (0) 2023.08.16
크로스 조인  (0) 2023.08.10

+ Recent posts