데이터베이스는 각각의 테이블로 구성되고
테이블의 구성요소는 다음과 같다
create database [데이터베이스 이름]
데이터베이스를 만들고 난 후에는 사용하고자 하는 데이터베이스를 지정해야하며
이는 MySQL을 새로 열때마다 실행해야 한다
use [데이터베이스 이름]
다음으로 데이터베이스 하부에 테이블을 만들어보도록 하자
테이블을 만드는 쿼리 형식은 다음과 같다
create table <테이블명>
(
[열 이름 1] [데이터 형태] [이 열의 제약],
[열 이름 2] [데이터 형태] [이 열의 제약],
[열 이름 3] [데이터 형태] [이 열의 제약],
….
<테이블의 제약 1>, <테이블의 제약 2>, ….
);
ALTER TABLE 문을 사용alter table [테이블명] add column [열 이름] [열 정의];
alter table [테이블명] drop column [열명];
SQL에서 데이터를 등록하는 쿼리는 다음과 같다
insert into [테이블명] values (값);
insert into goods values ('0001', '티셔츠', '의류', 1000, 500, '2020-09-20');
insert into goods values ('0002', '펀칭기', '사무용품', 500, 320, '2020-09-11');
insert into goods values ('0003', '와이셔츠', '의류', 4000, 2800, NULL);
insert into goods values ('0004', '식칼', '주방용품', 3000, 2800, '2020-09-20');
insert into goods values ('0005', '압력솥', '주방용품', 6800, 5000, '2020-01-15');
select - 열 선택select [열 이름 1] , [열 이름 2], … [열 이름 n]
from [테이블명];
as 키워드를 사용하면 열에 별명을 부여할 수도 있다
select [열 이름 1] as [별명]
from [테이블명];
distinct - 중복 제거중복된 데이터가 있는 경우 중복되는 값을 제거하고
고유한 값만 확인하고 싶을 때는 distinct 키워드를 사용한다
select distinct [열 이름]
from [테이블명];
where - 원하는 행 선택여러 데이터 중 조건에 부합하는 행만 선택할 때는
where 키워드를 사용하면 된다
select [열 이름], …
from [테이블명]
where [조건식];
연산자는 SQL 문에서 연산을 수행하기 위해 사용되는
사전에 예약된 단어 또는 문자로써 일반적으로 where 구 안에서 사용된다
흔히 사용되는 연산자는 다음과 같다
여러 레코드(행)를 하나로 집약시키는 기능으로써
대표적인 집약 함수는 다음과 같다
count - 행 숫자를 계산select count(*)
from goods;
sum - 합계를 계산select sum(sell_price), sum(buy_price)
from goods;
avg - 산술 평균을 계산select avg(sell_price)
from goods;
데이터를 특정 기준으로 그룹을 나누어 값을 계산해야 하는 경우가 많은데
이러한 경우 SQL에서는 group by를 사용하여 데이터를 그룹화할 수 있다
또한 검색 결과를 특정 기준으로 정렬할 필요가 있을 경우 order by를 사용하면 된다
그룹화를 위한 쿼리문 형식은 다음과 같다
select [열 이름 1], [열 이름 2], …..
from [테이블명]
group by [열 이름 1], [열 이름 2], ….
만약 group by를 통해 나온 결과에 조건을 지정하려면 어떻게 해야 할까?
이 경우 where이 아닌 having 키워드를 사용해야 한다
select [열 이름 1], [열 이름 2], …
from [테이블 명]
group by [열 이름 1], [열 이름 2], …
having [그룹값에 대한 조건]
SQL에서는 결과가 무작위로 정렬되므로 쿼리를 실행할 때 마다 결과가 변한다
오름차순이나 내림차순으로 결과를 정렬하고자 할 경우에는 order by 구를 사용한다
select [열 이름 1], [열 이름 2], …
from [테이블명]
order by [재정렬 기준 열 1], [재정렬 기준 열 2], …
order by 구는 기본적으로 오름차순으로 데이터를 정렬하는데
만일 내림차순으로 정렬하고자 할 경우 재정렬 기준 뒤에 desc 키워드를 사용한다
select *
from goods
order by sell_price desc;
기초구문 만으로는 복잡한 형태의 데이터분석을 하는게 한계가 있는데
뷰와 서브쿼리를 이용하면 이러한 작업을 쉽게 할 수 있다
뷰는 기본적으로 테이블과 거의 동일하다
그러나 테이블과의 차이는 실제 데이터를 저장하고 있지 않다는 점!
뷰는 데이터를 저장하지 않고 있으며 뷰에서 데이터를 꺼내려고 할 때
내부적으로 쿼리를 실행하여 일시적인 가상 테이블을 만든다
즉, 데이터가 아닌 쿼리를 저장하고 있다고 보면 된다
create view 뷰 이름 ([뷰의 열 이름 1], [뷰의 열 이름 2], ...)
as
[쿼리];
create view GoodSum (goods_classify, cnt_goods)
as
select goods_classify, count(*)
from goods
group by goods_classify;
뷰의 데이터를 확인하는 방법은 테이블의 데이터를 확인하는 방법과 동일하다
select *
from GoodSum;
drop view GoodSum;
서브쿼리란 쿼리 내의 쿼리이며 일회용 뷰를 의미한다
즉, 뷰를 정의하는 구문을 그대로 다른 구 안에 삽입하는 것이다
select goods_classify, cnt_goods
from (
select goods_classify, count(*) as cnt_goods
from goods
group by goods_classify
) as GoodsSum;
스칼라 서브쿼리란 단이 값이 반환되는 서브쿼리다
이를 통해 =, <, > 등 비교 연산자의 입력값으로 사용할 수 있다
select *
from goods
where sell_price > (select avg(sell_price) from goods);
스칼라 서브쿼리는 where 구 뿐만 아니라
select, group by, having, order by 등 거의 모든 곳에 쓸 수 있다
with 문with 문 또한 서브쿼리를 만드는 하나의 방법이다
with [별명] as (
[서브쿼리]
)
with heavy_users as (
select host_id
from PLACES
group by host_id
having count(name) >= 2
)
select *
from heavy_users
...