내가 배달음식점의 사장이라면?
자, 배달음식점 사장이 되었다고 상상해봅시다!
아직까지는 규모가 크지 않아서, 혼자서 이렇게 엑셀 시트에 주문내역을 정리하고 있어요.
그런데 어느날, 장사가 엄청 잘 되기 시작했어요!
이제는 혼자서는 힘들어져서, 주문을 기록해주고 일을 도와줄
직원 여러명을 채용했어요.
그런데 문제가 생겼어요!
데이터가 많아지면서 엑셀 시트가 점점 느려지고, 여러사람이 작업하는 내용이 충돌하면서 취소된 주문에 배달이 나가는 등의 문제가 생겨나기 시작했어요.
고민을 하다가, 데이터베이스에 모든 주문데이터를 저장하기 시작했어요.
1) 필요한 데이터만 불러와서 작업할 수 있어서 속도는 빨라졌고
2) 충돌이 생겼을 경우 에러를 띄우는 기능을 추가해서 충돌로
생기는 문제도 사라졌어요.
아주 작은 회사에서는 불필요하겠지만, 많은 양의 데이터를 효과적으로 저장/수정/사용하기 위해서는 데이터베이스가 필요합니다. 그래서 거의 모든 회사의 데이터는 데이터베이스에 저장되어 있어요.
데이터베이스 기초 개념
C (Create): 데이터의 생성을 의미합니다
R (Read): 저장된 데이터를 읽어오는 것을 의미해요
U (Update): 저장된 데이터를 변경!
D (Delete): 저장된 데이터를 삭제하는 것을 의미해요
SQL이 왜 필요할까?
SQL은 왜 필요할까요?
데이터를 읽어오는 과정인 "R (Read)"를 엄청나게 편하게 만들어줍니다. 그리고, 데이터를 손쉽고 깔끔하게 정리/분석하는 기능도 지원한답니다!
SQL은 Structured Query Language의 약자인데요,
결국 데이터베이 스에 요청 (Query)을 날려서 원하는 데이터를 가져오는 것을 도와주는 언어라는 의미에요!
💡 짧은 SQL 쿼리 한 줄이면 저장된 데이터를 이렇게 간단히
가져올 수 있어요!
Select 쿼리문의 개념
쿼리(Query)문이란? 쿼리는 질의를 의미하죠. 데이터베이스에 명령을 내리는 것을 의미합니다.
여기서 Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미입니다.
Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성됩니다.
테이블과 필드가 뭘까요?
스파르타 데이터베이스의 테이블 보기
show tables;
orders 테이블의 데이터 가져와보기
select * from orders;
orders 테이블의 특정 필드만 가져와보기
select created_at, course_title, payment_method, email from orders;
스파르타 데이터베이스의 구조
Where 절의 개념
💡 Where 절은, Select 쿼리문으로 가져올 데이터에 조건을
걸어주는 것을 의미해요.
예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!
예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!
예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!
Select 쿼리문에 Where 절 함께 써보기
select * from orders
where payment_method = "kakaopay";
만약 "kakaopay"가 아니라 kakaopay라고 쓰면?
당연히 에러가 납니다! 🥳
[Unknown column 'kakaopay' in 'where clause'] 에러문구를 천천히 읽어볼까요?
👉Where 절에 있는 kakaopay라는 컬럼은 없다! 는 뜻이에요. 여기서 컬럼은 필드를 의미해요. 정말, kakaopay라는 글자를 컬럼(필드명)으로 인식해버렸죠?
여러 조건을 걸어주기 위해서는?
select * from orders
where course_title = "앱개발 종합반" and payment_method = "kakaopay";
Select 쿼리문에 Where 절 함께 써보기 연습
select * from point_users
where point > 20000;
select * from users
where name = "황**";
select * from orders
where course_title = "웹개발 종합반" and payment_method = "CARD";
[꿀팁🍯] 이렇게 쿼리를 작성하면 편해요!
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select from 테이블명
쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 조건을 걸 필드를 찾기
5) select from 테이블명 where 조건 이렇게 쿼리 완성!
Where 절과 자주 같이쓰는 문법 배우기
select * from orders
where course_title != "웹개발 종합반";
'범위' 조건 걸어보기
select * from orders
where created_at between "2020-07-13" and "2020-07-15";
'포함' 조건 걸어보기
select * from checkins
where week in (1, 3);
'패턴' (문자열 규칙) 조건 걸어보기
select * from users
where email like '%daum.net';
결제수단이 CARD가 아닌 주문데이터만 추출해보기
select * from orders
where payment_method != 'CARD';
20000~30000 포인트 보유하고 있는 유저만 추출해보기
select * from point_users
where point between 20000 and 30000
이메일이 s로 시작하고 com로 끝나는 유저만 추출해보기
select * from users
where email like 's%com';
이메일이 s로 시작하고 com로 끝나면서 성이 이씨인 유저만 추출해보기
select * from users
where email like 's%com' and name = "이**";
일부 데이터만 가져오기: Limit
select * from orders
where payment_method = "kakaopay"
limit 5;
중복 데이터는 제외하고 가져오기: Distinct
1) orders 테이블을 모두 불러와서, 한줄한줄씩 읽으며 어떤 결제수단들이 있는지 확인한다
2) distinct 기능을 사용해서 한 방에 본다
select distinct(payment_method) from orders;
몇 개인지 숫자 세보기: Count
1) orders 테이블의 데이터를 모두 불러와서, 한줄한줄씩 센다
2) count 기능을 사용해서 한방에 본다
select count(*) from orders
Distinct와 Count를 같이 써보기
select distinct(name) from users;
이렇게 하면 성씨가 쭉 나오죠?
SELECT count(distinct(name)) from users;
그리고, 여기에 count를 입혀주면 몇 개의 성씨가 있는지 알 수 있습니다.