1. SQL
대소문자 구분 없음 (문자열 데이터는 구분)
각 명령은 세미콜론으로 구분
SQL의 구성은 정의어 DDL, 조작어 DML, 검색어 쿼리, 제어어 DCL 로 구성
2. DDL
2-1. CREATE TABLE
제약조건에 작성하는 조건들이다
속성 이름과 자료형 옆에 제약 조건을 명시해도 되지만
CONSTRAINT {제약조건의 이름} {조건} ({조건을 부여할 속성}) 형태로 제약조건을 부여할 수도 있다
제약 조건에 이름을 부여하는 것은 선택이지만 중복이 있으면 안 된다
다만 CONSTRAINT 로 부여할 수 있는 제약 조건은 제한적이라 NOT NULL은 할 수 없다
외래키를 설정할 때는
FOREIGN KEY(<속성이름>) REFERENCES <부모테이블이름>(<부모테이블에서의 속성이름>)
형태로 적어주어야 하고 둥근 소괄호는 생략이 아니고 작성해야하는 괄호
참조 무결성 제약 조건은 자식이 참조하면 부모에서 삭제 못하고 부모에 없으면 자식이 참조할 수 없다는 것
부모에서의 삭제나 변경은 대부분 거절되지만 동작을 지정할 수 있음
자식에서의 삽입이나 변경은 제약 조건에 위배되지 않는 한 가능
2-2. ALTER TABLE
스키마를 수정할 때는 ALTER TABLE {테이블명} 으로 테이블을 선택한 후 뒤에 하단의 조건을 붙인다
2-3. DROP TABLE
테이블을 삭제하는 것으로
DELETE가 아님
참조관계가 있다면 순서에 주의해야함
참조하고 있는 자식 테이블부터
3. 기본 명령어
4. DML
4-1. INSERT
입력하는 값의 순서대로 삽입됨
DEFAULT 설정 값을 따르고 싶은 속성은 값만 생략하는 것이 아니라 앞에 속성도 생략해주어야 함
4-2. DELETE
WHERE 조건을 만족하는 행이 여러 개라면 모두 삭제
WHERE 조건을 만족하는 행이 없어도 에러는 아님
WHERE 조건을 명시하지 않으면 모든 튜플이 지워지고 빈 테이블만 남음
테이블 자체를 삭제하고 싶다면 DROP 문을 사용해야 함
4-3. UPDATE
WHERE 조건을 만족하는 행이 여러 개라면 모두 삭제
WHERE 조건을 만족하는 행이 없어도 에러는 아님
WHERE 조건을 명시하지 않으면 모든 튜플에 업데이트를 수행함
5. DRL
5-1. SELECT
5-1-1. SELECT
출력할 컬럼이름들은 , 로 구분
와일드 카드 문자는 모든 컬럼을 출력한다는 의미
중복을 제거하고 싶을 때 DISTINCT를 사용
- 단일 컬럼 : 컬럼의 값이 중복되는 행은 하나만 출력
- 다중 컬럼 : 해당 컬럼의 조합이 같아야 중복으로 간주, 하나만 같으면 다른 것으로 취급
5-1-2. ROW functions
개별 행 데이터 변환이나 조작에 사용
5-1-3. GROUP functions
여러 행을 그룹화해서 집계된 결과를 반환할 때 사용
5-2. WHERE 조건 지정
5-2-1. 수식 조건, 구문 조건
연산자로 수식 조건을 지정하거나 구문 포함 조건을 지정할 수 있다
수식 처리할 때 한글은 한글자를 3으로 영어는 1로 인식한다
NULL 값은 IS / IS NOT으로 확인할 수 있고 등호나 부등호로는 처리하면 안 된다
구문 포함 조건을 지정할 때는 LIKE 키워드와 %를 포함한 문자열을 사용하는데
공백도 포함하니 주의해야한다
5-2-2. UNION
두 이미지는 동일한 결과를 출력한다
OR 연산자를 이용해 하나의 WHERE 문에서 처리할 수도 있고
각각의 WHERE로 분리해서 결과를 만든 후 결과들을 UNION으로 합칠 수도 있다
UNION은 테이블 합 연산을 수행한 후 중복된 행은 표현하지 않는다
다만 ALL 을 붙이면 중복이어도 보여준다
5-2-3. INTERSECTION 구현
INTERSECTION 연산자는 존재하지 않기 때문에
A를 만족하는 튜플이 B를 만족하는 테이블 안에도 있으면 출력하는 방식으로 구현한다
이때 SELECT의 결과가 임시 테이블로 사용할 수 있음을 확인할 수 있다
IN 연산자로 접근하기 때문
5-2-4. difference of sets 구현
difference of sets 차집합에 대한 연산자도 존재하지 않기 때문에
A를 만족하는 튜플이 B를 만족하는 테이블에는 없도록 출력한다
5-3. ORDER BY (정렬)
오름차순 ASC 는 명시하지 않아도 되지만
내림차순 DESC 는 반드시 명시해야한다
컬럼명 대신 컬럼 번호를 작성하면 작성한 컬럼의 순서대로 넘버링되어
해당 번호에 조건이 적용된다
정렬 기준은 여러 개 작성할 수 있으나
앞에 있는 내용을 기준으로 정렬한 후 같은 경우에 뒤에 있는 내용을 기준으로 정렬하니
순서를 잘 고려해야함
5-4. JOIN
조인 연산을 통해 여러 테이블과 연결해서 데이터를 조합하고 원하는 결과를 얻을 수 있음
기본적인 원리는 두 개 이상의 테이블의 공통 속성을 기준으로 일치하는 값을 찾고 그 값에 해당하는 행들을 결합하는 것
추가적인 원리에 따라 종류를 나눌 수 있음
FROM 에 결합할 해당 테이블과 조인할 테이블을 작성하고
조인할 기준을 ON 이후에 작성한다
위처럼 속성들만 작성하기 보다는
JOIN에 참여하는 속성들이 어느 테이블 소속의 속성인지 명시하는 것이 좋다
각 테이블의 별칭을 임시로 설정하면 코드를 작성하기 더 쉽다
많은 테이블과 조인하는 경우 모두 적어주면 되는데
주문 테이블과 책 테이블을 도서번호 기준으로 조인하고
(= 많은 책 중 고객이 주문한 도서의 도서 번호를 기준으로 책의 정보와 결합, 주문 테이블에 주문한 책의 정보가 추가)
첫 번째 조인의 결과물을 고객번호 기준으로 조인
(= 많은 고객 정보 중 주문한 고객의 고객 번호를 기준으로 고객 정보와 결합, 주문 테이블에 주문한 고객의 정보가 추가)
5-4-0. (Just) JOIN
그냥 조인이라고만 쓰면 모든 쌍을 출력하기 때문에
10개의 튜플을 가진 테이블과 20개의 튜플을 가진 테이블을 그냥 조인하면
200개의 튜플이 출력된다
5-4-1. NATURAL JOIN
겹치는 속성명이 하나인 경우 자연조인을 사용하면 자동으로 조인된다
하나가 아닌 경우도 동일한 이름을 가진 것끼리 자동으로 조인한다
그래서 ON이나 USING이 불필요하다
겹치는 속성명이 없으면 사용할 수 없고
중복된 컬럼은 하나로만 출력된다
출력 결과는 두 테이블에 공통적으로 가진 속성에 대해
해당 속성의 값이 같은 경우에만 출력된다.
5-4-2. LEFT OUTER JOIN
왼쪽 테이블 기준으로 자연조인
자연조인에 실패한 투플도 보여주는데
(= 기준 속성에 해당하는 값이 오른쪽에 없어도 왼쪽에 있으면 보여줌)
값이 없어서 실패했다면 NULL을 채워서 반환
5-4-3. RIGHT OUTER JOIN
오른쪽 테이블 기준으로 자연조인
자연조인에 실패한 투플도 보여주는데
(= 기준 속성에 해당하는 값이 왼쪽에 없어도 오른쪽에 있으면 보여줌)
값이 없어서 실패했다면 NULL을 채워서 반환
5-4-4. FULL OUTER JOIN
양쪽 테이블 기준으로 자연조인
자연조인에 실패한 투플도 보여주는데
(= 기준 속성에 해당하는 값이 한쪽에 없어도 반대쪽에 있으면 보여줌)
값이 없어서 실패했다면 NULL을 채워서 반환
5-5. GROUPING
특정 속성이 같은 튜플끼리 그룹지어주기
SELECT문의 그룹함수와 사용하면 GROUP BY는 그룹함수가 적용될 범위 (행)을 결정해주는 역할
그냥 그룹함수를 적용하면 모든 행에 대해 적용되기 때문에 주의
예시)
주문 테이블과 책 테이블의 조인 (여기에는 ON이 없지만 주로 책 번호로 조인할 것, 고객 주문에 대한 주문정보 테이블에 주문한 책에 대한 정보가 포함)
책의 제목을 기준으로 그룹화 (같은 제목의 책에 대한 주문 횟수는 하나로 묶어서 보여주기)
테이블에서 책의 제목과 행의 개수를 출력한다 (행의 개수는 해당 제목 그룹에 속한 주문 개수를 카운트)
'[ Computer Science ] > Database_sql' 카테고리의 다른 글
[Database/MySQL] subquery 활용 연습 (2) from 조건에 중첩 (0) | 2024.11.07 |
---|---|
[Database/MySQL] subquery 활용 연습 (1) where 조건에 중첩 (0) | 2024.11.06 |
[Database/MySQL] 기초 쿼리문 연습 (1) | 2024.10.22 |
[Database/midterm] 데이터베이스 설계 (개념적, 논리적) (2) | 2024.10.19 |
[Database/MySQL] 실습을 위한 초기 데이터 생성 (4) | 2024.10.17 |
[프로그래머스/MySQL] Lv. 1 평균 일일 대여 요금 구하기 (SELECT) (7) | 2024.10.17 |
[프로그래머스/MySQL] Lv. 1 역순 정렬하기 (SELECT) (0) | 2024.10.17 |