공부/데이터베이스

SQL data manipulation language(DML)

rlacofls294 2025. 4. 3. 13:39

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절에서 처리해야함