MySQL로 배우는 데이터베스 - 04장 책 정리
2021. 2. 10. 22:55ㆍMySQL/MySQL로 배우는 데이터베이스 개론과 실습
반응형
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 뷰이름
반응형