데이터베이스란? 데이터를 관리하기 위한 시스템으로, 여러 사람들이 같이 사용할 목적으로 '데이터를 담는 통'이라고 생각하면 쉽다.
원하는대로 데이터를 저장하고 사용하기 위한 통상적인 기능으로 CRUD를 지원한다.
SQL(Structured Query Language) :
DB에서 원하는 데이터를 불러오기 위해 요청(Query)을 날리는 언어
Select, Where절과 자주 쓰는 문법 연습해보기
👉데이터를 불러오고 (Select), 조건에 맞게 필터링 하는 것 (Where) !
SQL을 잘 하기 위해서는 원하는 정보가 어느 테이블에 담겨있는지 잘 찾는 것이 매우 중요하다.
select * from orders
where payment_method = "kakaopay";
※ kakaopay가 아닌 "kakaopay"라고 쓰는 이유 👉 필드명이나 테이블명이 아닌 문자열로 인식시키기 위해!
kakaopay라고 쓴다면? 👉 syntax error가 난다.
[Unknown column 'kakaopay' in 'where clause'] 라는 문구가 뜨는데, [where절에는 kakaopay라는 칼럼(필드명)이 없다]라는 의미!
select * from orders
where course_title = "앱개발 종합반" and payment_method = "kakaopay";
-> orders 테이블에서 수강 과목이 앱개발 종합반이고 결제 수단이 카카오페이인 데이터
select * from point_users
where point >= 5000;
select * from orders
where course_title = "웹개발 종합반" and payment_method = "CARD";
select * from point_users
where point > 20000;
select * from users
where name = "박**";
!=
: 같지 않음 select * from orders
where course_title != '웹개발 종합반';
between
A and B : 범위 select * from orders
where created_at between "2020-07-13" and "2020-07-15";
in
: 포함 select * from checkins
where week in (1, 3);
like
: 패턴(문자열 규칙) select * from users
where email like '%daum.net';
- where email like
'a%'
: email 필드값이 a로 시작하는 모든 데이터- where email like
'%a'
: email 필드값이 a로 끝나는 모든 데이터- where email like
'%co%'
: email 필드값에 co를 포함하는 모든 데이터- where email like
'a%o'
: email 필드값이 a로 시작하고 o로 끝나는 모든 데이터
테이블에 방대한 양의 데이터가 담겨져 있다면, 간단한 조회 혹은 소수의 결과물만 뽑으려 하는데도 시간이 오래 걸릴 수 있다.(당연하다. 조회할 데이터가 많으니까.) 그런 경우를 대비해 limit(제한)를 걸어 일부만 가져올 수 있다.
select * from orders
where payment_method = "kakaopay"
limit 5;
맨 뒤 limit 숫자 작성 시 숫자만큼만 출력된다!
결제 수단의 가짓수를 알기 위해 distinct(구별되는, 별개의)를 이용하여 중복 데이터를 지워준다.
select distinct(payment_method) from orders;
-예상 정답: 4개(kakaopay, CARD, TAXBILL, MONEY)
dbeaver에서 해볼 것.
주문 테이블에서 결제 건수를 세고 싶을 때
select count(*) from orders
⭐응용 문제1
성씨 별 개수가 궁금하다면?
select count(distinct(name)) from orders
중복된 성이 제외 되고(하나씩만 남음) count로 세어준다.
⭐응용 문제2
Gmail을 사용하는 2020/07/12~13에 가입한 유저를 추출하기
select * from users
where email like '%gmail.com'
and created_at between '2020-07-12' and '2020-07-14';
like(패턴) 다양한 문법으로 이용되니 그때그때 필요한 것을 찾아서 쓴다!
('how to use like in sql' 구글링!)
[꿀팁🍯] 이렇게 쿼리를 작성하면 편해요!
- show tables로 어떤 테이블이 있는지 살펴보기
- 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기
- 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
- 테이블을 찾았다! 조건을 걸 필드를 찾기
- select * from 테이블명 where 조건 이렇게 쿼리 완성!
문자열일 때(또는 like문법 '%a'에서) 작은 따옴표 붙이는 걸 자꾸 까먹어서 에러가 뜬다. 에러 문장 자체가 익숙하지 않으니 어떤 에러인지, 어디서 잘못 된건지 뜯어 고치면서 보니까 간단한 쿼리인데도 오래 걸릴 때가 있다. 강사님께서 삽질 해봐야 한다고 하셨는데, 확실히 맨땅에 헤딩으로 혼자 고민하고 해결하는 시간을 가지니 기억에도 잘 남고 스스로 더 깨닫는 부분도 생긴다. 문제는 복잡한 쿼리를 보면 얼마나 더 난해할지..^^ 더 빨리 더 꼼꼼히 작성할 수 있도록 많이 연습해야 겠다.
아래 쿼리가 왜 에러가 뜨는지 이해가 안됐다.
select * from users
where created_at between "2020-07-12" and "2020-07-14"
and email like "%gmail.com";
왜냐면 2020-07-12(14)라는 필드가 숫자로만 이뤄져 있으니 숫자열, 따라서 따옴표를 안붙여도 된다.라고 너무 굳건히 생각해버려서.. 이런 저런 시도를 계속 하다가 결국 정답을 확인하고 나서야 아차 싶었다. 날짜는 2020년 7월 12일(14일)이니까 사실상 데이터타입이 timestamp이므로 ' '를 붙여야 한다. 보이는 것에 현혹되지 말고 본질을 꿰뚫어 봐야 답이 보인다...!