SQL(Structured Query Language) -** RDB를 위한 표준 질의어, 비절차적 데이터 언어
- 유래 : IBM이 개발한 SEQUEL에서 유래, ANSI와 ISO에 의해 현재까지도 표준화 및 용어 통일.
방식 :
- 대화식 SQL : DBMS에 직접 접근해 질의를 작성 및 실행
- 삽입 SQL : 프로그래밍 언어로 작성된 응용 프로그램에 삽입 (MyBatis, Hibernate.. 등)
SQL은 완전한 프로그래밍 언어가 아닌 data sublanguage로 분류
-> 데이터와 메타 데이터에 대해서만 생성하고 처리하는 문법을 가지고 있다.
SQL은 클라이언트/서버 구조로 구성되어 있다.
-> 분산형 구조로 클라이언트에서 질의(요청)를 하면 서버에서 그 질의를 받아 처리하고 응답을 돌려준다.
SQL의 분류
SQL은 그 용도에 따라 세가지로 나눌 수 있다.
- DML(Data Manipulation Lang.) : 데이터 조작어, 데이터의 삽입, 삭제, 검색, 수정 등의 처리를 요구
- SELECT, INSERT, DELETE, UPDATE..
- DCL(Data Control Lang.) : 내부적으로 필요한 규칙이나 기법을 정의. 트랜잭션 제어, 접근권한 제어. 등
- GRANT, REVOKE..
- DDL(Data Definition Lang.) : 테이블을 생성하고 변경, 제어하는 기능을 제공. 테이블이나 관계의 구조를 생성한다.
- CREATE, ALTER, DROP..
- SELECT : 데이터를 검색한다. SELECT 구는 속성을 선택한다.
FROM [테이블명]
WHERE [조건식] : 조건식이 참인 행을 가져온다.
- LIKE : 부분적으로 일치하는 데이터를 검색.
- 패턴매칭 : 와일드카드 '%' : 문자열을 대치, '_' : 문자를 대치
GROUP BY
GROUPING, 특정 속성의 값이 같은 행을 모아 그룹을 만들고, 그룹별로 검색한다.
GROUP BY로 투플을 그룹으로 묶은 후, SELECT 절에는 GROUP BY에서 사용한 속성과 집계 함수만이 올 수 있다!!
ex) SELECT custid,
HAVING : HAVING 키워드를 이용해 그룹에 대한 조건을 명세한다. (그룹별 검색에서 WHERE과 같은 역할)
- HAVING의 조건에는 SUM, AVG, COUNT.. 등 집계 함수가 와야한다.
예제
8000원 이상 도서 두권 이상 구매한 고객별 주문도서 수량
but, 아래의 쿼리는 8000원 이상 도서 두권 이상 구매한 고객의 '8000원 이상 도서 구매수량'을 나타낸다.SELECT custid, COUNT(_) AS `수량` FROM Orders WHERE saleprice >= 8000 GROUP BY custid HAVING COUNT(_) >= 2;
8000원 이상 도서를 구매했고, 총 두권 이상 책을 구매한 히스토리가 있는 사람에 총 도서 구매 수량
SELECT custid, COUNT(*) AS num_purchases FROM Orders WHERE custid IN ( SELECT custid FROM Orders WHERE saleprice >= 8000) GROUP BY custid HAVING COUNT(*) >= 2;
ORDER BY : 결과 행을 정렬해서 가져온다.
- ASC/DESC : 오름차순/내림차순으로 결과행을 정렬한다.
- MySQL에서 NULL 값은 가장 작은 값으로 취급, 오름차순의 경우 가장 먼저 온다.
연산
- IS NULL / IS NOT NULL : 해당 하는 속성 값이 NULL인지 확인. NULL이면 참, 아니면 거짓.
집계함수
집계함수는 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 사용한다.
- 집계함수는 NULL인 값을 제외하고 계산한다.
- WHERE 절에서는 사용 불가, SELECT, HAVING 절에서만 사용 가능하다.
- SUM
- AVG
- MAX
- MIN
- COUNT : 정확한 개수를 계산하기 위해서는, 기본키 속성이나 '*'를 주로 사용한다.
- 'COUNT(DISTINCT attribute) AS 별칭'으로 중복을 제거하면서 COUNT하고 별칭을 붙일 수 있다.
- 질문
- SELECT에서 WHERE -> SELECT -> ORDER BY 순으로 처리, 나머지 LIMIT, GROUP BY, HAVING..의 순서는?
- 내부적으로 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT 순으로 처리된다.
'강의요약 > 데이터베이스' 카테고리의 다른 글
[DB] 6. DDL (0) | 2023.04.17 |
---|---|
[DB] 5. JOIN (0) | 2023.04.11 |
[DB] 3. 관계대수 (0) | 2023.03.20 |
[DB] 2.2 키(key) (0) | 2023.03.20 |
댓글