JOIN, UNION, 데이터베이스 생성하기

2024. 2. 27. 00:46Backend 취업준비/SQL

JOIN 

  • 두개 이상의 테이블을 엮어 결과를 얻어냄
  • 테이블을 연결하려면 키가 있어야 한다
  • 열을 기반으로 데이터 간의 연결을 수행한다. 두 테이블의 속성을 전부 합치고, 속성의 값이 없는 경우 자동으로 null이 할당된다

 

INNER JOIN

  • JOIN만 작성하면 기본적으로 INNER JOIN
  • 두 테이블에서 join condition을 만족하는 튜플들로 결과 테이블을 만듦
    ON 뒤에 오는 join condition을 만족하는 튜플들을 가져온다 (비교연산자 = 말고도 <, >, != 등 가능)
  • 각 테이블의 튜플들을 조합한다
  • 교집합과 비슷한 형태

 

OUTER JOIN 

두 테이블에서 join condition을 만족하는 튜플들도 포함하여 결과 테이블을 만듦

 

UNION

  • 두 개 이상의 SELECT 문의 결과 집합을 결합하여 단일 결과 집합으로 만드는 데 사용
  • 주로 두 개 이상의 테이블이 아닌 단일 테이블에서 여러 조건에 따라 결과를 합치는 데 사용
  • 결과 집합의 중복을 제거하는 DISTINCT와 함께 사용될 수 있다. 이렇게 하면 중복된 행이 제거되고 결과에는 고유한 행만 포함
  • UNION ALL은 UNION과 비슷하지만 중복된 행을 제거하지 않고 모든 결과를 포함
  • 서로 다른 조건에 따른 결과를 단일 결과 집합으로 만드는 데 유용
  • UNION을 쓰기 보다 SELECT문을 잘 작성하여 처리할 수 도 있다

 

 

서브 쿼리

  • select문에서의 사용 : 외부 SELECT 문에서 실행될 때마다 그 결과를 가져와서 각 행에 대해 쿼리의 결과에 포함시킨다
  • from에서의 사용 : FROM절의 서브 쿼리의 경우 서브 쿼리의 결과를 마치 가상의 테이블처럼 사용
  • where에서의 사용 : 서브 쿼리에서 조회한 이름만 필터링, 외부 쿼리의 조건에 의해 내부 쿼리에서 조회한 결과를 제한할 때 사용

 

테이블 생성 

 

DDL

CREATE 새로운 테이블을 생성
ALTER 기존 테이블 구조 변경
DROP 테이블 삭제
RENAME 기존 테이블 이름 변경
TRUNCATE 기존 테이블 초기화

 

예제로 많이 사용했던 학생 정보를 저장할 테이블을 생성하는 SQL 문

CREATE TABLE test_db.students (
  name VARCHAR(255) NOT NULL,
  age INT NOT NULL,
  address VARCHAR(255) NOT NULL
)
데이터베이스 이름 어떤 데이터베이스 하위에 테이블을 생성할 지
테이블 이름 생성하려는 테이블의 이름
열의 이름
데이터 타입 해당 열의 데이터 타입 (ex. 정수, 문자열, 날짜, …)
제약조건 [NOT NULL | DEFAULT | PRIMARY KEY] 등의 옵션을 줄 수 있다

 

 

데이터 타입

 

종류 설명  
정수 정수형 데이터를 저장 INT
부동 소수점 방식 정확하지 않다 FLOAT, DOUBLE
고정 소수점 방식 정확하다 DECIMAL
고정 크기 문자열 최대 몇 개의 문자를 가지는 문자열을 저장할 지 결정
저장된 문자열의 길이가 최대길이보다 작으면 나머지를 space로 채워서 저장
CHAR(n)
가변 크기 문자열 최대 몇 개의 문자를 가지는 문자열을 저장할 지 결정
저장될 문자열 크기 만큼만 저장
VARCHAR(n)
날짜 년 월 일을 저장 (2023-12-01) DATE
시간 시 분 초를 저장 (08:38:27) TIME
날짜와 시간 날짜 시간 같이 표현 (2023-12-01 08:38:27) TIMESTAMP
논리 (true/false/null) BOOL

 

 

제약 조건

NOT NULL
해당 열에 NULL 값을 허용하지 않는다는 의미
DEFAULT
데이터를 입력 시 해당 열에 아무런 값도 입력되지 않은 경우 기본으로 사용할 값 지정
UNIQUE
UNIQUE로 설정된 열에는 중복된 값을 저장할 수 없다.
NULL은 중복 된다(postgresSQL, mySQL 외에 다른 RDBMS에서는 다를 수 있음)
PRIMARY KEY
하나의 테이블에 있는 데이터들을 식별하기 위한 기준입니다.
FOREIGN KEY(외래키)
테이블간에 관계를 나타낼 때 사용하는 Key로, 다른 테이블의 기본키를 참조해 외래키로 사용합니다.
CHECK
속성 값 범위를 제한하고 싶을 때 사용




외래키 설정

기본 : FK와 PK와 도메인이 같아야 하고 PK에 없는 values를 FK가 값으로 가질 수 없다

 

RESTRICT

  • 대부분의 DBMS 시스템에서는 DEFAULT 설정으로 RESTRICT가 적용
  • 일반적으로 데이터 무결성을 유지하기 위해 가장 안전한 옵션
  • 외래키 제약조건이 설정된 경우 참조된 행이 삭제되는 것을 방지하여 데이터 일관성을 유지
  • RESTRICT 제약 조건을 사용하게 되는 경우, 자식 테이블의 모든 레코드를 삭제해야만 부모 테이블의 레코드를 삭제가능
  • 자식 테이블의 행이 부모 테이블의 행을 참조하지 않는 상태가 된다면 부모 테이블의 해당 레코드를 삭제 가능

 

CASCADE

  • 참조된 테이블의 레코드가 삭제될 때, 해당 레코드를 참조하는 다른 테이블의 레코드도 함께 삭제
  • 즉, 부모 테이블의 행(row)이 삭제되면 관련된 자식 테이블의 행도 자동 삭제
  • 자식 테이블의 행을 삭제하는 것은 부모 테이블의 행에 영향을 미치지 않음
  • 자동 삭제가 되기 때문에 의도치 않은 삭제가 되지 않도록 주의해야 한다

 

SET NULL

  • 해당 외래키의 속성값을 null로 대체
  • 원천행이 사라지더라도 그걸 참조하는 행들은 원천행이 사라졌다는 흔적이 남은 채 남아있도록 하기 위해 set null을 사용한다

 

 

외래키 제약 조건에 대한 설명

 

  • 외래키 제약 조건은 의존도를 높여준다
  • 안전하게 테이블을 사용하고 싶을 때 좋은 기능이다
  • 데이터 변경 작업이 예상되는 경우에는 불리할 수 있다

 

 

출처

https://www.inflearn.com/course/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0/dashboard

'Backend 취업준비 > SQL' 카테고리의 다른 글

ALTER, index, DCL, 정규화  (2) 2024.02.28
SQL 기초  (0) 2024.02.24