4. Modern SQL

2024. 4. 2. 22:54데이터베이스

728x90

Aggregates function(집계함수)

 

 

위의 4개의 집계함수 모두 같은 결과를 반환한다.

 

- count(1): 조건을 만족하는 행은 1을 반환 -> 1의 개수를 세기

- count(1+1+1): 조건을 만족하는 행은 1+1+1을 반환 -> 3의 개수를 세기

 

 

 

 

중복된 튜플(행)은 제거하고 싶을 때

 

 

 

문자열 연산(sql 표준)

 

1. LIKE :  매칭되는 문자열을 찾고 싶을 때 사용

  • %: 여러 문자(empty도 가능)
  • _: 한 글자(무조건)

 

2. || : 문자열을 이어 붙히고 싶을 때 사용

 

 


 

output redirection(다시 지시)

: 원하는 열들만 모아서 새로운 테이블을 생성

 

표준

select distinct cid into courseIds
from enrolled;

 

MySQL

create table coureseIds(
select distinct cid from enrolled);

 

 

 


 

ORDER BY 1

: 1번째 행을 기준으로 오름차순 정렬

 

*혼합해서 쓰는 것도 가능

order by grade desc, 1 asc

 

 

 

LIMIT 10 : 상위 10개 

LIMIT 20 OFFSET 10: 처음 10개는 무시하고 상위 20개 

select sid, name frome student
where login like '%@cs'
limit 20 offset 10;

 

 

 


select max(e.sid), s.name
from enrolled as e, student as s
where e.sid=s.sid;

-> DBMS마다 작동되는 것도 있지만 이렇게 쓰면 안 된다.

 

집계함수는 행을 1개만 반환하기 때문에 오류가 발생

다음과 같이 작성해야 한다.

select sid,name 
from student
where sid in(
	select max(sid) 
    from enrolled);

 


Window 함수

 

1. ROW_NUMBER(): 행 번호 출력

select *, row_number() over() as row_num
from enrolled

 

 

cid별로 행 번호 출력

select cid,sid,row_number() over(partition by cid)
from enrolled
order by cid

 

 

 

cid를 기준으로 정렬한 후 행 번호 출력

select *, row_number() over (order by cid)
from enrolled
order by cid

* over이후 괄호 안을 비워두면 cid를 기준으로 정렬이 되고 행번호는 뒤죽박죽으로 출력이 된다.

(원래 행번호 대로)
-> 괄호안을 order by cid로 해두면 행번호도 정렬순서에 맞게 출력이 된다.

 

 

2. RANK() : 순위 출력

 

select * 
from(
	select *,rank() over (partition by cid order by grade asc) as rank
    from enrolled) as ranking
where ranking.rank=2;

-> cid별로 묶은 후 grade를 기준으로 오름차순 정렬 한 걸 순위를 매겨서 

2등 출력

 


WITH: 임시 테이블 생성하고 싶을 때 사용

with cteName as(
	select 1)
    
select * from cteName

 

열 이름 지정하고 싶다면

with cteName (col1,col2) as(
	select 1,2)
    
select * from cteName

 

 

 

728x90

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

6. Normalization  (0) 2024.04.16
5. E-R model  (0) 2024.04.08
3. Intermediate SQL  (2) 2024.03.26
2. Introduction to SQL  (0) 2024.03.18
1. relational model  (0) 2024.03.07