Day05_SQL_21‐28 - bonniekwon0721/Dataanalytics-study GitHub Wiki
14/Feb/2024
- 테이블의 각 레코드를 식별
- 중복되지 않은 고유값을 포함
- NULL 값을 포함할 수 없음
- 테이블 당 하나의 기본키를 가짐
…
CONSTRAINT constraint_name
PRIMARY KEY (column1, column2, …)
…
- 하나의 혹은 여러개의 컬럼이 기본키로 설정된 경우
ALTER TABLE person
DROP PRIMARY KEY;
ALTER TABLE tablename
ADD PRIMARY KEY (column1, column2, …);
한 테이블을 다른 테이블과 연결해주는 역할이며, 참조되는 테이블의 항목은 그 테이블의 기본키(혹은 단일값)
…
CONSTRAINT constraint_name
FOREIGN KEY (column3, column4, …) REFERENCE REF_tablename(REF_column)
…
SHOW CREATE TABLE tablename;
ALTER TABLE table name
DROP FOREIGN KEY FK_constraint;
ALTER TABLE tablename
ADD FOREIGN KEY (column) REFERENCES REF_table(REF_column);
| Function | Description |
|---|---|
| COUNT | 총 갯수를 계산해주는 함수 |
| SUM | 합계를 계산해주는 함수 |
| AVG | 평균을 계산해주는 함수 |
| MIN | 가장 작은 값을 찾아주는 함수 |
| MAX | 가장 큰 값을 찾아주는 함수 |
| FIRST | 첫번째 결과값을 리턴하는 함수 |
| LAST | 마지막 결과값을 리턴하는 함수 |
SELECT UCASE(string);
SELECT LCASE(string);
SELECT MID(string, start_position, lenth);
- string: 원본 문자열
- start: 문자열 반환 시작 위치. (첫글자는 1, 마지막글자는 -1)
- length: 반환할 문자열 길이
SELECT LENGTH(string);
SELECT ROUND(number, decimals_place);
- number: 반올림할 대상
- decimals: 반올림할 소수점 위치 (Option)
SELECT NOW();
SELECT FORMAT(number, decimal_place);
하나의 SQL문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
메인쿼리가 서브쿼리를 포함하는 종속적인 관계다.
- 서브쿼리는 메인쿼리의 칼럼 사용 가능
- 메인쿼리는 서브쿼리의 칼럼 사용 불가
- Subquery는 괄호로 묶어서 사용
- 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
- Subquery 에서는 order by 를 사용 안한다.
- 스카라 서브쿼리(Scalar Subquery) - SELECT 절에 사용
- 인라인 뷰(Inline View) - FROM절에 사용
- 중첩 서브쿼리 (Nested Subquery) - WHERE 절에 사용
- SELECT 절에 사용하는 서브쿼리. 결과는 하나의 Column이어야 한다.
SELECT column1, (SELECT column2 FROM table2 WHERE condition)
FROM table1
WHERE condition;
- FROM 절에 사용하는 서브쿼리. 메인쿼리에서는 인라인 뷰에서 조회한 Column 만 사용 가능하다.
SELECT a.column, b.column
FROM table1 a, (SELECT column1, column2 FROM table2) b
WHERE condition;
- 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 제로베이스 데이터 분석 스쿨