SQL
•
작년에 정말 재밌게, 그리고 열심히 수강했던 학교 수업인 기초데이터베이스 수업에서 배웠던 내용들을 리마인드하면서, 코테 SQL 풀이에 꼭 필요해 보이는 것들만 여기에 정리해보겠다.
join, 부속질의
/* 조인질의 나 저래? */
select student.sno, student.sname
from student, enroll
where student.sno = enroll.sno and enroll.cno = 'C102';
/* 본인(투플들)들로 조인된 투플 출력됨 */
select *
from student, enroll
where student.sno = enroll.sno and enroll.cno = 'C102';
/* 부속질의 - exists 나 저거 돼? */
select sno, sname
from student
where exists (select *
from enroll
where student.sno = enroll.sno and enroll.cno = 'C102');
/* 본인(투플)으로 부속질의에서 조인 가능한 student 투플 출력됨 */
select *
from student
where exists (select *
from enroll
where student.sno = enroll.sno and enroll.cno = 'C102');
/* 부속질의 - in 나 저기 속해? */
select sno, sname
from student
where sno in (select sno
from enroll
where cno = 'C102');
/* 본인 투플의 제품번호가 부속질의에서 뽑은 제품번호 집합에 속하는 student 투플 출력됨 */
select *
from student
where sno in (select sno
from enroll
where cno = 'C102');
SQL
복사
DML
(대괄호 안 내용은 생략 가능하단 의미임)
select
SELECT [ALL|DISTINCT] 속성리스트 [AS'출력명']
FROM 테이블리스트
[WHERE 조건]
[GROUP BY 속성리스트 [HAVING 조건]]
[ORDER BY 속성리스트 [ASC|DESC]];
SQL
복사
•
all : 중복 허용(default)
◦
distinct : 중복 허용 X
◦
SELECT COUNT(DISTINCT NAME)
•
집계함수 : 속성리스트 → count/max/min(속성), sum/avg(숫자속성), round(숫자속성,남길소수자리수)
◦
null은 제외하고 계산함
◦
select와 having절에 사용 가능
◦
where절에선 사용 불가능
•
조건
◦
비교(=, <>, <, >, <=, >=), 논리(and, or, not)
◦
like(%, _) → 문자열만 가능. %는 모든 문자. _는 한 글자.
▪
WHER DATE_OF_BIRTH LIKE '%-03-%’
◦
is null: 아직 입력x | is not null: 이미 입력된
▪
null은 다른 값과 크기 비교 시 전부 거짓
•
asc: 오름차순(default) - 점점 커짐
◦
desc: 내림차순 - 점점 작아짐
◦
null은 가장 작은 수로 취급함. 오름차순에서 가장 위.
•
기타 유용한 문법
◦
DATE_FORMAT(변경전, 변경후)
▪
DATE_FORMAT(’1992/03/04’, ‘%Y-%m-%d’) → 1992-03-04
◦
CASE
CASE
WHEN 조건
THEN '반환값'
WHEN 조건
THEN '반환값'
ELSE 'WHEN 조건에 해당 안되는 경우 반환 값' // 없으면 NULL반환
END
SQL
복사
◦
올림/버림/반올림
▪
반올림 : ROUND(변경전, 소수자리수)
▪
올림 : FORMAT(CEIL(변경전 * 10) / 10, 1) → 소수 한 자리수까지
▪
버림 :FORMAT(FLOOR(변경전 * 10) / 10, 1) → 소수 한 자리수까지
▪
1이면 소수 한자리까지(소수 아래 자리 개수). -1이면 십의자리까지 (0의 개수)
참고
insert
insert
into 테이블이름[(속성리스트)]
values(속성값리스트);
SQL
복사
update
update 테이블이름
set 속성이름=속성값,...
[where 조건];
SQL
복사
delete
delete
from 테이블이름
[where 조건];
SQL
복사