SQL data manipulation language(DML)

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

 

'공부 > 데이터베이스' 카테고리의 다른 글

Relational Data  (0) 2025.04.29
JOIN: Natural, Inner, Using, On, Outer, LEFT, RIGHT, Full  (1) 2025.04.27
'공부/데이터베이스' 카테고리의 다른 글
  • Relational Data
  • JOIN: Natural, Inner, Using, On, Outer, LEFT, RIGHT, Full
rlacofls294
rlacofls294
아좌잣!~!
  • rlacofls294
    정신채린
    rlacofls294
  • 전체
    오늘
    어제
    • 분류 전체보기 (17)
      • 공부 (15)
        • 코딩테스트 (4)
        • 데이터베이스 (3)
        • 소프트웨어 공학 (7)
        • SQL (1)
      • 애니메이션 (1)
        • 생각정리 (1)
      • 프로젝트 (1)
        • 1 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다이나믹프로그래밍
    알고리즘
    무한성편
    컴공
    소공
    동적 계획법
    DP
    DML
    디비
    귀멸의칼날
    귀칼
    백준
    코테
    database
    Software Engineering
    다이나믹 프로그래밍
    SE
    소프트웨어공학
    코딩테스트
    소프트웨어 공학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
rlacofls294
SQL data manipulation language(DML)
상단으로

티스토리툴바