블로그에 굉장히 오랜만에 포스팅을 하게 되었다. 오늘은 요즘 학교에서 교양 시간에 배우고 있는 언어인 SQL에 대해 포스팅하면서 복습을 해보기로 한다. 포스팅한 코드 대부분과 자료 일부분은 수업시간에 배운 자료를 그대로 가져왔다.
SQL : 데이터베이스를 만들고 관리하는 언어
SQL은 쉽게 말하면 정보를 저장하고 처리하기 위해 데이터베이스를 관리할 때 사용하는 언어이다. 여기서 쿼리란, 데이터베이스에 정보를 요청하는 행위를 의미한다. 아무튼 SQL이 데이터베이스와 관련된 언어라는 것만 알고 넘어가자.
데이터베이스의 개념
데이트베이스의 개념은 위와 같다. 데이터베이스 - 스키마 - 테이블의 구조로 이루어져 있는데, SQL은 데이터베이스와 스키마를 동급취급한다고 한다. 즉 데이터베이스 - 테이블 구조인 셈이다. 테이블이란 고객의 정보가 담겨 있는 표라고 해석하면 될 것 같다. 그리고 데이터베이스는 이런 표들이 많이 담겨 있어 고객의 정보를 다룰 수 있는 저장공간으로 해석 가능하다.
데이터베이스 생성하고 함수 사용해보기
수업시간에 배운 기초적인 함수를 다루어보도록 하겠다.
1) 데이터베이스 생성
1
|
create database shop;
|
cs |
이런 함수로 shop이라는 이름의 database를 생성할 수 있다.
위 코드를 실행하고 (SQL에서는 쿼리를 실행한다는 표현을 쓴다.) 왼쪽 탭에서 Schema 탭으로 넘어가면 shop이라는 스키마, 즉 데이터베이스가 생겼음을 확인할 수 있다.
2) 데이터베이스에 정보 저장하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
use shop;
create table goods
(
goods_id char(4) not null, #char : 4자리고정
goods_name varchar(100) not null, #varchar : 0~100자리
goods_classify varchar(32) not null,
sell_price integer,
buy_price integer,
register_date date, #상관없으면 비워둠
primary key (goods_id) #메인이되는 키 설정
);
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');
insert into goods values ('0006', '포크', '주방용품', 500, NULL, '2020-09-20');
insert into goods values ('0007', '도마', '주방용품', 880, 790, '2020-04-28');
insert into goods values ('0008', '볼펜', '사무용품', 100, NULL, '2020-11-11');
|
cs |
우선 use shop; 으로 shop이라는 데이터베이스를 사용할 것이라고 요청한다.
그 다음 create table goods 를 통해 goods 라는 이름의 테이블을 하나 생성해준다.
그리고 고객의 정보가 담길 형식을 선언해놓는다.
위의 코드에선 id는 4자리 고정, 이름은 최대 100자리, 분류는 최대 32자리로 제한을 걸어놓고, 가격에 대해선 제한을 걸어놓지 않았다. 이건 열의 제약이라고 볼 수 있다.
그리고 파이썬에서 index에 해당하는 부분을 여기선 primary key로 선언해놓는다. 이 행은 테이블의 제약이라고 볼 수 있다.
마지막으로 insert into goods values 를 통해 정보를 테이블에 저장하면 된다.
3) SQL 기초구문 사용해보기
가장 기초인 select 함수를 사용해보자.
1
2
|
select goods_id, goods_name, buy_price
from goods;
|
cs |
select 함수를 실행한 뒤 뒤에 table에서 불러오고 싶은 열의 이름을 쉼표로 구분하여 적는다. 그리고 마지막에 from goods로 goods라는 table에서 불러오고 싶다는 쿼리를 보내면, 사진처럼 테이블에서 원하는 열만 선택하는 것이 가능하다.
1
2
3
4
|
select goods_id as id,
goods_name as name,
buy_price as price
from goods;
|
cs |
이런 식으로 열의 이름을 간단하게 바꿔서 불러올 수도 있다.
1
2
3
4
5
6
7
8
9
|
select '상품' as category,
38 as num,
'2022-01-01' as date,
goods_id,
goods_name,
sell_price,
buy_price,
sell_price - buy_price as profit
from goods;
|
cs |
추가로 이런 식으로 함수처럼 사용할 수도 있다.
distinct 함수는 중복된 값을 제거하고 고유한 값만 보고 싶을 때 사용하는 함수다.
1
2
|
select distinct goods_classify
from goods;
|
cs |
goods_classify를 선택했으나 앞에 distinct를 적어줌으로써 고유한 값만 나타남을 확인할 수 있다.
where 함수는 특정 열의 값 중 조건에 부합하는 값만 보고 싶을 때 사용하는 함수다.
1
2
3
|
select *
from goods
where goods_classify = '의류';
|
cs |
select *은 모든 열을 선택한다는 의미이다. from 뒤에 where 로 조건을 걸면 조건에 해당하는 값만 출력됨을 알 수 있다.
1
2
3
|
select goods_name, goods_classify, register_date
from goods
where register_date < '2020-09-27';
|
cs |
where 함수는 논리 연산자를 적용하여 이런식으로도 응용이 가능하다. SQL의 연산자 대부분은 파이썬과 같은 것으로 보인다.
SQL은 데이터베이스를 관리하는 언어답게, 파이썬의 Pandas처럼 표를 다루는 함수들이 기본적으로 내장되어 있었다.
우선 행을 셀 때는 count 함수를, 열의 합계를 구할 때는 sum 함수를, 열의 산술평균을 구할 때는 avg 함수를 사용한다. max 와 min 같은 함수도 있다. 이런 함수들은 select 와 연결해서 쿼리를 보낼 수 있다.
1
2
3
4
5
|
select count(*)
from goods;
select sum(sell_price)
from goods;
|
cs |
이런식으로 어렵지 않게 사용이 가능하다.
4) group_by 함수
데이터를 그룹으로 나누어서 처리해야 할 필요가 있을 때는 group_by 함수를 사용할 수 있다. from 함수 뒤에서 호출하면 된다.
1
2
3
|
select goods_classify, count(*)
from goods
group by group_classify;
|
cs |
이렇게 group by와 count(*)를 이용하면 상품의 종류별로 몇 개의 상품이 있는지 체크할 수 있다.
group by와 where 함수를 섞으면 데이터를 선택하고 그룹으로 묶는 것이 가능해진다.
1
2
3
4
|
select buy_price, count(*)
from goods
where goods_classify = '의류'
group by buy_price;
|
cs |
구매가와 개수를 선택, 상품 분류가 의류로 속하는 것들을 구매가를 기준으로 그룹화해서 보여준 것이다. 다만 여기선 물건의 개수가 하나이다 보니 큰 의미는 없다.
순서의 차이이긴 한데, group by를 먼저 하고 조건을 걸 때는 having 이라는 함수를 사용하면 된다.
1
2
3
4
|
select goods_classify, avg(sell_price)
from goods
group by goods_classify
having avg(sell_price) >= 2500;
|
cs |
마지막으로 정렬을 해주는 order by 함수를 살펴보겠다.
1
2
3
|
select *
from goods
order by register_date;
|
cs |
등록일을 기준으로 order by 를 해주어 출력한 결과다. 만약 등록일이 같은 제품이 여러 개인 경우 쉼표로 구분한 뒤 2차, 3차로 정렬 기준을 설정해줄 수 있다. SQL 이 참 편한 언어라고 생각되는게 웬만한 건 쉼표와 괄호로 처리가 되어 배우기 쉬운 것 같다.
주의할 점은 where, group by, having, order by 모두 from 함수 뒤에 호출되어야 한다는 것이다. 순서가 다르면 실행이 안 되니 조심해야 한다.
여기까지 수업시간에 배운 기초적인 SQL을 정리해보았다.
'SQL' 카테고리의 다른 글
SQL - 기초적인 함수 사용해보기 (3) - 함수 (0) | 2023.04.01 |
---|---|
SQL - 기초적인 함수 사용해보기 (2) - 뷰, 서브쿼리 (0) | 2023.03.24 |