01. 내장 함수
1. SQL 내장 함수
SQL 내장 함수는 상수나 속성 이름을 입력 값으로 받아 단일 값을 결과로 반환한다.
모든 내장 함수는 최초에 선언될 때 유효한 입력 값을 받아야 한다.
숫자 함수
문자 함수
s : 문자열, c : 문자, n : 정수, k : 정수
날짜 ' 시간 함수
2. NULL 값 처리
null은 아직 지정되지 않은 값을 말한다. 0, 빈문자, 공백 등과 다른 특별한 값임을 명심해야 된다.
Null 값에 대한 연산과 집계 함수
- null + 숫자 연산의 결과는 null이다.
- 집계 함수를 계산할 때 null이 포함된 행은 집계에서 빠진다.
- 해당되는 행이 하나도 없을 경우 snum, avg 함수의 결과는 null count 함수의 결과는 0
Null 값 확인하기 - Is Null, Is Not Null
select *
from MyBook
where price Is Null; -- price가 null인지 확인
IFNull 함수 - Null 값을 다른 값으로 대치
select name '이름', IFNULL(phone, '연락처없음') '전화번호'
from customer;
3. 행 번호 출력
MySQL에서 변수는 이름 앞에 @ 기호를 붙이며 치환 문에는 SET과 := 기호를 사용한다.
-- 고객 목록에서 고객번호, 이름, 전화번호를 앞의 두 명만 보이시오.
set @seq:=0;
select (@seq:=@seq+1) '순번', custid, name, phone
from customer
where @seq < 2;
02. 부속 질의
부속 질의는 하나의 SQL 문 안에 다른 SQL 문이 중첩된 질의를 말한다.
대체로 조인을 이용하는 방법보다 부속 질의를 이용하는게 성능상 좋다.
1. 스칼라 부속질의 - Select 부속질의
2. 인라인 뷰 - From 부속질의
3. 중첩 질의 - Where 부속 질의
In, Not In
제공한 결과 집합에 있는지 확인하는 역할
-- 대한민국에 거주하는 고객에게 판매한 도서의 총 판매액을 구하시오.
select sum(saleprice) 'total'
from orders
where custid In (
select custid
from customer
where address like '%대한민국%'
);
ALL, Some(Any)
비교 연산자와 함께 사용하며 All은 모든, Some은 어떠한(최소한 하나라도)이라는 의미를 가진다.
-- 3번 고객이 주문한 도서의 최고 금액보다 더 비싼 도서를 구입한 주문의 주문번호와 판매금액을 보이시오.
select orderid, saleprice
from orders
where saleprice > ALL (
select saleprice
from orders
where custid='3'
);
Exists, Not Exists
데이터의 존재 유무를 확인하는 연산자이다.
-- Exists 연산자를 사용하여 대한민국에 거주하는 고객에게 판매한 도서의 총 판매액을 구하시오.
select sum(saleprice) 'total'
from orders od
where Exists (
select *
from customer cs
where address like '%대한민국%' and cs.custid = od.custid
);
03. 뷰
1. 뷰의 생성
create view 뷰이름
as select 문
-- 주소에 '대한민국'을 포함하는 고객들로 구성된 뷰를 만들고 조회하시오.
create view vw_customer
as select *
from customer
where address like '%대한민국%';
select *
from vw_customer;
2. 뷰의 수정
create or replace view 뷰이름
as select 문
-- vw_customer의 데이터중 대한민국 고객을 영국 주소로 가진 고객으로 변경하시오.
create or replace view vw_customer(custid, name, address)
as select custid, name, address
from customer
where address like '%영국%';
select *
from vw_customer;
3. 뷰의 삭제
drop view 뷰이름