오래 못 할 짓 하지 않기

[ DB ] 3. SQL ( DML ) 본문

3학년 1학기/데이터베이스(DB)

[ DB ] 3. SQL ( DML )

쫑알bot 2024. 3. 18. 12:31
728x90

SELECT   { Attribute } 

FROM { Table } 

Where { Condition }

 

쿼리의 구조는 다음과 같다.

 

Select나 가장 처음에 오는 부분에는 Attribute나 세부적인 데이터가 들어간다.

FROM 뒤에는 사용/참조할 Table을 적고

Where 뒤에는 조건을 적는다. 

 

이에 실행 순서들을 보면 From → Where → SELECT순서로 실행시킨다.

 

From 에 있는 Table에서 ▶ Where Condition에 맞는 Tuple의 ▶ Attribute를 Select 해서 보여준다.

 

Select 특)

● 정렬 안 함 ( Order by로 가능 )

● 중복허용 ( DISTINCT 로 중복 제거 가능 )

 

출력될 때 내가 원하는 Column 이름으로 바꿀 수 있음

 

Where

a> 10 and a<15 대신

where a BETWEEN  10 and 15 로 할 수 있음

 

 

From

 

 

이렇게 하면 여기서 가능한 조합 다 보여줌 = Cartesian-product

 

Cartesian-product + 조건 = Join

 

Set Operation

UNION ALL = 다 합침

INTERSECT ALL = 교집합

EXCEPT ALL = 차집합

 

 

 

* INTERSECT 는 SQL에서 지원하지 않는다.

대신 Join ~~ On [ 두 개 id가 같은 곳 ] . 으로 하면 된다.

 

 

* EXCEPT 는 SQL에서 지원하지 않는다.

대신 NOT IN [ EXCEPT 시킬 영역의 조건 ] 으로 한다.

 


String Operation

 

- Percent (%) -  일치하는 Substring 이 있으면 됨

- Underscore(_) - 일치하는 Char가 있으면 됨

 

ex) Select name

   From students

  Where name Like '%ri%'

= 이름 중간에 ri가 들어가는 사람 이름 찾아라

 

 

예외 : % 도 넣고싶은데 기능으로 인식하면 어떡함

▶ ESCAPE character를 사용한다.

  ex) 100% 가 들어간 걸 찾고싶다?

   LIKE '100 \%' ESCAPE '\'

 

 


ORDERING

SELECT DISTINCT name

FROM instructor

ORDER BY name 

 

▶ Instructor Table에서 이름으로 정렬하는데 중복 허용 X

 

 

SELECT dept_name, name

FROM instructor

ORDER BY dept_name, name 

 

▶ Instructor Table에서 부서명과 이름으로 정렬하는데, 앞에 있는 걸 먼저 정렬함. 중복 X

부서별로 정렬 후, 같은 부서면 사람 이름으로 정렬

 


Aggregate Functions

 

컴공에서 일하는 사람들의 평균연봉 구하기
2018 봄학기에 강의한 사람의 ID 개수(중복 X)

● Group By

해당 Attribute의 값이 같은 Tuple끼리 묶어서 보여준다. (묶어서 연산도 가능)

 

근데 Select에서도 다 묶은 채로 시작하기 때문에 주의해서 써야한다.

 

● 실행 순서

From

> Group By 

> Select에 만들어둔 연산 한다.

 

이러면 ID값에 이상한 값들만 들어감

 

Grouping을 할 때, ID와 사람 이름같이 개인의 값도 같이 select를 하게 되면

우리가 원하는 값이 출력되지 않는다.

 

+ Having

Group By에 있는 Where 절이라고 생각하면 된다.

Group By해서 나온 결과에서 Having의 조건만 통과하는 Tuple들만 골라낸다는 의미

 

● 차이점: 

- Where : Group 전에 사용

- Having  : Group 후에 사용

 

 


Other DML

● Insert

INSERT INTO tablename
VALUES ( col1값 , clo2값 , ...)

 

* 순서 중요함

 

 

● Select 해서 나온 결과를 INSERT할 수도 있다.

 

 

● Update

Update tablename
Set Col1_이름 = Col1_새로운 값 , Col2_이름 = Col2_새로운 값 , ...;

(Where 조건)

 

연봉이 모자란 사람들에게 연봉 인상을 시켜준다. 

 

근데 Update문을 두 개 만들었을 때, 두 개 다 조건에 맞을 수도 있음. 이런 경우를 잘 나눠야 한다.

 

위 명령어는 첫 Update 조건에 걸려서 증가되고, 그 뒤 조건에도 걸릴 정도로 인상이 되어 3퍼 오르고 5퍼도 또 오를 수 있다.

 

조건문 바로 투입

 


Scalar Subqueries

 

 


Delete

 

 

(출처)

한동대학교 홍참길교수님 - 데이터베이스

'3학년 1학기 > 데이터베이스(DB)' 카테고리의 다른 글

[ DB ] 5. E-R Model  (0) 2024.04.08
[ DB ] 4. More SQL  (0) 2024.03.31
[ DB ] 2. R - DBMS(2)  (0) 2024.03.11
[ DB ] 1. R - DBMS  (0) 2024.03.07
[ 데이터베이스 ] 24. Index  (0) 2024.02.20