SQL data manipulation language(DML)
DML -> querying and modifying the databases
데이터를 찾거나 수정할 때 사용
basic query structure
SELECT
FROM
WHERE
1. SELECT절
projection시 사용
원하는 attribute 추출 하고 싶을 때, SELECT clause에 적어줘야함!
중복 제거시에는 DISTINCT 사용
SELECT DISTINCT name
FROM instructor;
* => all attributes
AS 사용해서 별칭 부여 가능 -> 열에 별칭 부여
2. WHERE절
조건 부여
원하는 데이터의 조건을 명시 해준다.
logical connective 사용이 가능하다 - AND, OR, NOT
비교 연산자
<> : not equal
BETWEEN 사용 가능 -> 적힌 숫자 모두 포함~
3. FROM 절
from 절에 적힌 테이블의 cartesian-product를 진행한 뒤 정보 뽑아옴
Cartesian-product + selection = join
마찬가지로 AS 사용 가능 -> 테이블을 별칭으로 부르기

Find the names of all instructors who have taught some course and the course_id.
SELECT name, course_id
FROM instructor, teaches
WHERE instructor.ID = teaches.ID;
Find the names of all instructors in the Music department who have taught some course and the course_id
SELECT name, course_id.
SELECT name, course_id
FROM instructor, teaches
WHERE instructor.ID = teaches.ID AND instructor.dept_name = 'MUSIC';
Find the names of all instructors who have a higher salary than some instructor in ‘Comp. Sci.’.
SELECT DISTINCT T.nmae
FROM instuctor AS T, instructor AS S
WHERE T.salary > S.salary AND S.dept_name = 'Comp.Sci.';
SELECT name
FROM instructor
WHERE salary > ANY (
SELECT salary
FROM instructor
WHERE dept_name = 'Comp.Sci.'
);
-> 이렇게도 작성 가능
NULL
null과 수학 연산의 결과는 무조건 NULL
IS NULL -> 해당 조건이 NULL인 애들을 출력
IS NOT NULL -> 해당 조건이 NOT NULL인 애들 출력
ex.
-- 전화번호가 없는 고객 찾기
SELECT name
FROM customer
WHERE phone IS NULL;
-- 이메일이 있는 고객 찾기
SELECT name
FROM customer
WHERE email IS NOT NULL;
SET operations
UNION
INTERSECT
EXCEPT
=> 중복 자동 제거
방지를 위해선 ALL 사용!
1. UNION -> 합집합
합한다음 중복 제거해줌
A 쿼리 결과 + B 쿼리 결과
A집합 + B집합 - AB교집합
2. INTERSECT -> 교집합
AB 교집합
* mysql 지원 안해줌
JOIN을 사용해서 만듦
3. EXCEPT -> 차집합
A와 B의 차집합 (A - B)
*mysql 지원 안해줌
NOT IN 사용
String Operations
% -> 포함
_ -> 글자
Find the names of all instructors whose name includes the substring “ri”.
SELECT name
FROM instructor
WHERE name LIKE '%ri%';
%ri% => ri를 포함하기만 하면 출력
-- %를 문자로 사용하고 싶을 때
LIKE '100\%' ESCAPE '\'
ORDER BY
- DESC -> 내림차
- ASC -> default 오름차
Aggregate functions
AVG
MIN
MAX
SUM
COUNT
NULL을 포함하지 않고, 계산함!
** COUN(*) 은 모든 행의 수 출력 -> NULL 상관없음
GROUP BY
SELECT dept_name, ID, AVG(salary)
FROM instructor
GROUP BY dept_name;
-> 에러 발생
=> ID 값을 처리 안해줌
SELECT 절에서 집계 함수(aggregate function) 외에 다른 일반 열(column)을 사용하려면,
그 열은 반드시 GROUP BY 절에 포함!!!
GROUP BY에 대한 조건 -> HAVING절에서 처리해야함