2024. 4. 2. 22:54ㆍ데이터베이스
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
'데이터베이스' 카테고리의 다른 글
| 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 |