Day05_SQL_21‐28 - bonniekwon0721/Dataanalytics-study GitHub Wiki

14/Feb/2024


Primary Key (기본키)

  • 테이블의 각 레코드를 식별
  • 중복되지 않은 고유값을 포함
  • NULL 값을 포함할 수 없음
  • 테이블 당 하나의 기본키를 가짐

CONSTRAINT constraint_name

PRIMARY KEY (column1, column2, …)

Primary Key 삭제

  • 하나의 혹은 여러개의 컬럼이 기본키로 설정된 경우

ALTER TABLE person

DROP PRIMARY KEY;

Primary Key 생성

ALTER TABLE tablename

ADD PRIMARY KEY (column1, column2, …);

Forein Key (외래키)

한 테이블을 다른 테이블과 연결해주는 역할이며, 참조되는 테이블의 항목은 그 테이블의 기본키(혹은 단일값)

CONSTRAINT constraint_name

FOREIGN KEY (column3, column4, …) REFERENCE REF_tablename(REF_column)

CREATE TABLE 에서 FOREIGN KEY 를 지정하는 경우, CONSTRAINT 를 생략할 수 있다.

자동 생성된 CONSTRAINT 를 확인하는 법

SHOW CREATE TABLE tablename;

FOREIGN KEY 삭제 문법

ALTER TABLE table name

DROP FOREIGN KEY FK_constraint;

Table이 생성된 이후에도 ALTER TABLE을 통해 FOREIGN KEY를 지정할 수 있다

ALTER TABLE tablename

ADD FOREIGN KEY (column) REFERENCES REF_table(REF_column);

Aggregate Functions (집계함수)

Function Description
COUNT 총 갯수를 계산해주는 함수
SUM 합계를 계산해주는 함수
AVG 평균을 계산해주는 함수
MIN 가장 작은 값을 찾아주는 함수
MAX 가장 큰 값을 찾아주는 함수
FIRST 첫번째 결과값을 리턴하는 함수
LAST 마지막 결과값을 리턴하는 함수

UCASE

SELECT UCASE(string);

LCASE

SELECT LCASE(string);

MID

SELECT MID(string, start_position, lenth);

  • string: 원본 문자열
  • start: 문자열 반환 시작 위치. (첫글자는 1, 마지막글자는 -1)
  • length: 반환할 문자열 길이

LENGTH

SELECT LENGTH(string);

ROUND

SELECT ROUND(number, decimals_place);

  • number: 반올림할 대상
  • decimals: 반올림할 소수점 위치 (Option)

NOW

SELECT NOW();

FORMAT

SELECT FORMAT(number, decimal_place);

SQL Subquery

하나의 SQL문 안에 포함되어 있는 또 다른 SQL 문을 말한다.

메인쿼리가 서브쿼리를 포함하는 종속적인 관계다.

  • 서브쿼리는 메인쿼리의 칼럼 사용 가능
  • 메인쿼리는 서브쿼리의 칼럼 사용 불가

Subquery 사용시 주의

  • Subquery는 괄호로 묶어서 사용
  • 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
  • Subquery 에서는 order by 를 사용 안한다.

Subquery 종류

  • 스카라 서브쿼리(Scalar Subquery) - SELECT 절에 사용
  • 인라인 뷰(Inline View) - FROM절에 사용
  • 중첩 서브쿼리 (Nested Subquery) - WHERE 절에 사용

스카라 서브쿼리 (Scala Subquery) - 값 형태

  • SELECT 절에 사용하는 서브쿼리. 결과는 하나의 Column이어야 한다.

SELECT column1, (SELECT column2 FROM table2 WHERE condition)

FROM table1

WHERE condition;

인라인 뷰 (Inline View) - 테이블형태

  • FROM 절에 사용하는 서브쿼리. 메인쿼리에서는 인라인 뷰에서 조회한 Column 만 사용 가능하다.

SELECT a.column, b.column

FROM table1 a, (SELECT column1, column2 FROM table2) b

WHERE condition;

중첩 서브쿼리 (Nested Subquery)

  • Single Row - 하나의 열을 검색하는 서브쿼리
  • Multiple Row - 하나 이상의 열을 검색하는 서브쿼리
  • Multiple Column - 하나 이상의 행을 검색하는 서브쿼리

Single Row Subquery

서브쿼리가 비교연산자 (=, >, ≥, <, ≤, <>, ≠)와 사용되는 경우,

서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다. (두개 이상인 경우 에러)

SELECT column_names

FROM table_name

WHERE column_name = (SELECT column_name FROM table_name WHERE condition)

ORCER BY column_name;

Multiple Row - IN (행 단위)

서브쿼리 결과 중에 포함 될 때

SELECT column_names

FROM table_name

WHERE column_name IN (SELECT column_name FROM table_name WHERE condition)

ORDER BY column_names;

Multiple Row - EXISTS (행 단위)

서브쿼리 결과에 값이 있으면 반환

SELECT column_names

FROM table_name

WHERE EXISTS (SELECT column_name FROM table_name WHERE condition)

ORDER BY column_names;

Multiple Row - ANY (행 단위)

서브쿼리 결과 중에 최소한 하나라도 만족하면 (비교연산자 사용)

SELECT column_names

FROM table_name

WHERE column_name = ANY (SELECT column_name FROM table_name WHERE condition)

ORDER BY column_names;

Multiple Row - ALL (행 단위)

서브쿼리 결과를 모두 만족하면 (비교연산자 사용)

SELECT column_names

FROM table_name

WHERE column_name = ALL (SELECT column_name FROM table_name WHERE condition)

ORDER BY column_names;

Multi Column Subquery - 연관서브쿼리 (열 단위)

서브쿼리 내에 메인쿼리 칼럼이 같이 사용되는 경우.

SELECT column_names

FROM tablename a

WHERE (a.column1, a.column2, …) IN (SELECT b.column1, b.column2, … FROM tablename b WHERE a.column_name = b.column_name)

ORDER BY column_names;


Studied from 제로베이스 데이터 분석 스쿨

⚠️ **GitHub.com Fallback** ⚠️