SFW 쿼리
SELECT <열>
FROM <테이블 이름>
WHERE <조건>
이를 관계 대수로 표현하면 다음과 같습니다:
- FROM - 어떤 테이블인가?
- WHERE - 어떤 행에 관심이 있는가?
- SELECT - 어떤 속성을 찾고 있는가?
예) CS 학과의 모든 강사 중 급여가 70,000달러보다 많은 사람들의 이름을 찾으시오.
SELECT i.name
FROM Instructor i
WHERE i.deptName='CS' and i.salary>70000
유용한 연산자들
DISTINCT
쿼리 결과에서 중복을 제거합니다.
ORDER BY
쿼리 결과를 일부 속성에 따라 정렬합니다.
SELECT
FROM
WHERE
ORDER BY {속성} DESC, {속성} ASC
ASC - 오름차순 정렬 (기본값)
DESC - 내림차순 정렬
LIKE
간단한 문자열 패턴 매칭을 위해 사용합니다.
SELECT
FROM
WHERE {속성} LIKE {패턴_매칭}
패턴 매칭을 위한 두 가지 기호:
- % : 0개 이상의 임의의 문자
- _ : 1개의 임의의 문자
대소문자를 구분합니다.
Q. '%' 또는 '_'를 포함한 문자열을 어떻게 찾을 수 있나요?
- 이스케이프 문자를 사용합니다.
- 예) name LIKE 'Michael_JORDAN'
예시:
'a__c': 'a'로 시작하고 'c'로 끝나는 4글자 문자열
'%%%': '%'를 포함하는 문자열
'a%_b': 'a'로 시작하고 'b'로 끝나며 최소 3글자인 문자열
누락된 값 처리, 결측값
NULL
값이 없을 때 NULL을 사용할 수 있습니다.
- 값이 존재하지 않음
- 값이 존재하지만 알 수 없음
- ...
NOT NULL 제약 조건
CREATE TABLE Customer(
ssn CHAR(11) NOT NULL,
..,
..
);
ssn 속성에 NULL 값을 가질 수 없습니다.
NULL과의 비교
- NULL +/%- 는 NULL입니다.
- NULL >≤≥< 는 UNKNOWN이 됩니다.
- NULL = NULL → UNKNOWN
Q. NULL이 있는 행을 어떻게 선택할 수 있나요?
→ "IS NULL"을 사용합니다.
SELECT name FROM students WHERE gpa IS NULL
3가지 값 논리 UNKNOWN 포함
UNKNOWN을 포함한 논리를 이해하는 방법은 TRUE=1, FALSE=0, UNKNOWN=0.5로 생각하는 것입니다.
AND=min
OR=MAX
NOT(X)=1-X
집계 함수
간단한 집계
SELECT agg(열)
FROM <테이블 이름>
WHERE <조건>
agg는 다음과 같을 수 있습니다:
COUNT, SUM, AVG, MAX, MIN, ...
COUNT를 제외한 모든 집계는 단일 속성에 적용됩니다.
- COUNT는 왜 그렇지 않나요?
- COUNT(Ai): 속성 Ai에서 NULL이 아닌 튜플의 수
- COUNT(*): 모든 튜플의 수
집계 함수에서 DISTINCT를 사용할 수 있습니다.
SELECT agg(DISTINCT 열)
FROM <테이블 이름>
WHERE <조건>
GROUP BY
SELECT agg(열)
FROM <테이블 이름>
WHERE <조건>
GROUP BY <열>
해당 열의 값으로 그룹화합니다.
GROUP BY + WHERE
SELECT agg(열)
FROM <테이블 이름>
WHERE gpa>2.5
GROUP BY gender
만약 한 성별이 gpa가 2.5 이상인 사람이 없다면 NULL이 결과로 나올 수 있습니다.
HAVING
관심 있는 그룹을 지정합니다.
그룹에 대한 조건입니다.
SELECT agg(열)
FROM <테이블 이름>
WHERE <조건>
GROUP BY <열>
HAVING <조건>
예) HAVING COUNT(*)>10
그룹에 10개 미만의 속성이 있으면 해당 그룹은 표시되지 않습니다.
평가 순서 (HAVING)
- FROM - 테이블의 교차곱을 생성합니다.
- WHERE - 행을 제거합니다.
- GROUP BY - 레코드를 그룹으로 나눕니다.
- HAVING - 그룹을 제거합니다.
- SELECT - 각 그룹에 대해 하나의 행을 생성합니다.
'컴퓨터공학 > 데이터베이스 DB' 카테고리의 다른 글
SQL 서브쿼리 Subquery (1) | 2024.10.21 |
---|---|
외부 조인과 내부 조인 Inner Join and Outer Join (2) | 2024.10.20 |
데이터베이스 SQL DDL과 DML (5) | 2024.10.18 |
데이터베이스 Relational Algebra 관계 대수 (3) | 2024.10.15 |
관계형 데이터베이스 모델, Relational Data Models (0) | 2024.10.13 |