방식
- 대화식 SQL : workbench, datagrip 등에서 직접 DBMS에 접근해 질의를 작성하여 실행
- 삽입 SQL : python, java 등의 언어로 작성된 application에 들어가서 DB와 소통
분류
- 데이터 정의어 DDL (Data Define Language) : 테이블 생성 / 변경 / 제거에 사용하는 명령어
- 데이터 조작어 DML (Data Manipulate Language) : 데이터 삽입 / 삭제 / 변경/ 수정/ 검색에 사용하는 명령어
- 데이터 제어어 DCL (Data Controll Language) : 데이터에 접근 권한 부여 및 취소하는 명령어
데이터 조작어 DML
데이터 삽입 INSERT
- 속성값을 지정한 후 넣는 경우
- VALUES에 들어가는 값과 INTO 속성이 1:1 대응해야 함
- INSERT INTO 고객(고객아이디, 고객이름, 등급, 주소) VALUES ('gyun', '균', 1, '서울시 서울동 서울아파트');
- 테이블을 대상으로 넣는 경우
- VALUES에 들어가는 값과 테이블의 속성들이 1:1 대응해야 함
- INSERT INTO 고객 VALUES ('gyun', '균', 1, '서울시 서울동 서울아파트');
- 부속 질의문을 이용하여 넣는 경우
- 다른 테이블에서 검색한 값을 테이블에 넣는 경우
- INSERT INTO 우수고객 SELECT 고객아이디, 이름, 등급, 주소 FROM 고객 WHERE 등급 = 1;
데이터 수정 UPDATE
- 속성값 일괄 수정
- 테이블 소속 모든 튜플의 속성값을 전체 수정
UPDATE 고객 SET 등급 = 등급 + 1;
- 속성값 지정 수정
- 테이블 소속 튜플 중 하나의 속성 값 수정
UPDATE 고객 SET 등급 = 1, 주소 = '부산시 부산구 부산동' WHERE 고객아이디 = 'gyun';
- 부속 질의문을 통한 수정
- 다른 테이블에서 추출한 값들을 가지고 테이블의 내용을 수정 ex) 주문자이름 '균'이 주문한 주문 상태 '배송중'으로 변경
UPDATE 주문 SET 상태 = '배송중' WHERE 고객아이디 IN((SELECT 고객아이디 FROM 고객 WHERE 고객이름='균');
데이터 삭제 DELETE
- 테이블 튜플 전체 삭제
DELETE FROM 주문
- 조건에 따른 테이블 튜플 삭제
DELETE FROM 주문 WHERE 주문일 = '2019-11-04');
- 부속 질의문을 사용한 테이블 튜플 삭제
DELETE FROM 주문 WHERE 고객아이디 IN(SELECT 고객아이디 FROM 고객 WHERE 이름='균');
데이터 검색 SELECT
SELECT [ALL|DISTINCT] 속성1, 속성2, 속성3 FROM 테이블
- ALL (DEFAULT) - 결과가 중복을 허용
- DISTINCT - 결과가 중복 허용하지 않고 제거 되어서 나옴
- AS - 결과테이블에서의 속성 이름 출력 바꿔주기(별칭주기)
- SELECT 고객이름 AS 이름, 주소 FROM 고객
- 조건에 따라 결과 테이블 만들기
- SELECT 고객이름, 고객아이디 FROM 고객 WHERE 등급 >=2;
- 부분적으로 일치하는 데이터 검색하기 LIKE
- % - 0개 이상의 문자 의미
- _ - 1개의 문자 의미
- SELECT 고객아이디 FROM 고객 WHERE 고객이름 LIKE 'g%'
- 'g%' - g로 시작하는 이름이거나 g인 경우
- '%g%' - g를 포함하는 이름
- '%g' - g로 끝나거나 g인 경우
- '_ _ _ g' - g로 끝나는 네글자 단어
- '_ _ _ g%' - g로 끝나는 네글자이거나 네번째 글자가 g인 단어
- NULL 사용
- IS NULL - NULL인 것
- IS NOT NULL - NULL 아닌 것
- SELECT 고객아이디 FROM 고객 WHERE 주소 IS NOT NULL;
- 정렬된 결과로 검색 ORDER BY
- DESC - 내림차순
- ASC - 오름차순
SELECT 고객아이디 FROM 고객
WHERE 주소 IS NOT NULL
ORDER BY 등급 DESC;
# 등급으로 내림차순, 동일 등급은 이름으로 오름차순
SELECT 고객아이디, 고객이름 FROM 고객
ORDER BY 등급 DESC, 고객이름 ASC
- 집계 함수 이용
- COUNT - 속성 값의 개수
- MAX - 속성 값의 최댓값
- MIN - 속성 값의 최솟값
- SUM - 속성 값의 합계 (숫자에만 사용가능)
- AVG - 속성 값의 평균 (숫자에만 사용가능)
SELECT AVG(등급) FROM 고객 # 고객들의 등급 평균
SELECT COUNT(*) FROM 고객 # 고객의 수
SELECT COUNT(DISTINCT 등급) FROM 고객 # 고객의 등급 개수
#DISTINCT 같은 경우 집계함수 안에 넣어서 해당 속성의 중복값을 제거하고 계산할 수 있도록 함
- 그룹별 검색 GROUP BY - HAVING
- GROUP BY - 특정 속성들 혹은 속성의 값이 같은 튜플을 모아 그룹을 만듬
- HAVING - 그룹에 대한 조건
SELECT 상품고유번호, SUM(수량) AS 총주문수량 FROM 주문
GROUP BY 상품고유번호;
# 총주문수량이 10개 이상인 상품과 총주문수량
SELECT 상품고유번호, SUM(수량) AS 총주문수량 FROM 주문
GROUP BY 상품고유번호 HAVING SUM(수량)>=10;
SELECT 등급, COUNT(*) AS 고객수 FROM 고객
GROUP BY 등급;
# 해당 등급의 고객수가 10명 이상인 등급과 고객수
SELECT 등급, COUNT(*) AS 고객수 FROM 고객
GROUP BY 등급 HAVING COUNT(*)>=10;
# 주문 제품과 주문 고객에 따른 분류
SELECT 상품고유번호,, 고객아이디 SUM(수량) AS 총주문수량 FROM 주문
GROUP BY 상품고유번호, 고객아이디
- 테이블을 Join 하여 검색
- 여러개의 테이블을 연결하여 데이터 검색 -> 외래키를 통해서 join 진행
- WHERE 절을 통해 join 조건을 제시
- 테이블별로 속성을 구분하기 위해 점(.) 앞에 해당 속성 소속 테이블명 명시
- SELECT 주문.상품고유번호, 주문.주문일 FROM 주문, 고객 WHERE 고객이름='gyun' AND 주문.고객아이디 = 고객.고객아이디;
- 부속질의문을 통한 검색
- 상위 질의문 + 하위 질의문 결합을 통한 쿼리 작성
- 하위질의문의 결과가 1개 인 경우 : '=' 사용 가능
- 하위질의문의 결과가 다수인 경우 : IN 사용
SELECT 고객이름, 등급 FROM 고객
WHERE 등급 = (SELECT MAX(등급) FROM 고객);
# 3등급인 고객들의 주문 내역 뽑기
SELECT 상품고유번호, 수량, 고객아이디 FROM 주문
WHERE 고객아이디 IN (SELECT 고객아이디 FROM 고객 WHERE 등급=3);
# 3등급이 아닌 고객들의 주문 내역 뽑기
SELECT 상품고유번호, 수량, 고객아이디 FROM 주문
WHERE 고객아이디 NOT IN (SELECT 고객아이디 FROM 고객 WHERE 등급=3);
# 고객 아이디가 gyun인 사람이 하나라도 있는 경우 주문 정보
SELECT 상품고유번호, 수량, 고객아이디 FROM 주문
WHERE EXISTS(SELECT * FROM 고객 WHERE 고객이름='gyun')
- IN - 결과값 중 일치하는 것이 있으면 있는 것들 조건으로 사용
- NOT IN - 결과값 중 일치하지 않는 것들만 조건으로 사용
- EXISTS - 결과값이 하나라도 존재시, 조건 참
- NOT EXISTS - 결과값이 존재하지 않으면 조건 참
- ALL - 결과값 모두와 비교한 결과가 참이면 조건으로 사용 - 비교연산자 필수
- ANY / SOME - 결과값 중 하나라도 결과가 참이면 조건으로 사용 - 비교연산자 필수
'데이터베이스 Database' 카테고리의 다른 글
데이터베이스 - 뷰 View (0) | 2021.12.10 |
---|---|
SQL (Structured Query Language) - DDL 총정리 (0) | 2021.12.09 |
관계 데이터 모델 (Relation) (0) | 2021.12.08 |
데이터 모델링 Data Modeling (0) | 2021.12.07 |
데이터 베이스 구조 - DataBase Structure (0) | 2021.12.07 |