온보딩 커리큘럼 3주차에 접어드는 이번 주에는 3그룹으로 나누어 공부를 한다. 웹개발 종합반을 재수강하는 웹종 완주팀, 예비 프론트엔드 심화 학습 CSS팀, 예비 백엔드 심화 학습 SQL팀이 있다. 그 중 나는 SQL팀이다. 한 주 동안 항해에서 제공되는 <엑셀보다 쉬운 SQL> 강의를 수강하고, 실습 과제와 SQLD 대비 문제 등을 풀 예정이다.
데이터 베이스란?
: 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통~!
모든 데이터베이스는 CRUD에 해당하는 기능을 지원한다.
C (Create): 데이터의 생성을 의미
R (Read): 저장된 데이터를 읽어오는 것
U (Update): 저장된 데이터를 변경
D (Delete): 저장된 데이터를 삭제하는 것
SQL이란?
: Structured Query Language의 약자. 데이터베이스에 요청(Query)을 날려서 원하는 데이터를 가져오는 것을 도와주는 언어
: 데이터를 가져오는 명령어를 작성하는 것을 'SQL 쿼리를 작성한다'라고 한다.
show tables;
select * from orders;
select created_at, course_title, payment_method, email from orders;
--- 포인트가 20000점보다 많은 유저만 뽑아보기 ---
select * from point_users
where point > 20000;
--- 성이 황씨인 유저만 ---
select * from users
where name = "황**";
---웹개발 종합반이면서 결제수단이 CARD인 주문건만 ---
select * from orders
where course_title = "웹개발 종합반" and payment_method = "CARD";
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블 찾으면, 이번에는 조건을 걸 필드를 찾기
5) select * from 테이블명 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);
--- 패턴 ---
--- users 테이블의 email 필드에서 'daum.net'을 포함하는 데이터 뽑기 ---
select * from users
where email like '%daum.net';
--- like의 다양한 사용법 ---
where email like 'a%' : email 필드값이 a로 시작하는 모든 데이터
where email like '%a' : email 필드값이 a로 끝나는 모든 데이터
where emaili like '%co%' : email 필드값에 co를 포함하는 모든 데이터
where email like 'a%o' : email 필드값이 a로 시작하고 o로 끝나는 모든 데이터
--- 예시 ---
--- 이메일이 s로 시작하고 com으로 끝나면서 성이 이씨인 유저 추출하기 ---
select * from users
where email like 's%com' and name = '이**';
--- 일부 데이터만 가져오기 : Limit ---
--- 5개만 가져옴 ---
select * from orders
where payment_method = "kakaopay"
limit 5;
--- 중복 데이터는 제외하고 가져오기 : Distinct ---
--- 목록 등을 확인하기에 용이함 ---
select distinct(payment_method) from orders;
--- 몇 개인지 숫자 세보기 : Count ---
select count(*) from orders
--- [응용] Distinct와 Count를 같이 써보기 ---
--- 회원들의 성씨가 몇 개인지 확인 ---
select count(distinct(name)) from users;
--- 성씨의 회원수를 Group by로 쉽게 구하기 ---
select name, count(*) from users
group by name;
--- 오름차순 ---
select name, count(*) from users
group by name
order by count(*);
--- 내림차순 ---
select name, count(*) from users
group by name
order by count(*) desc;
--- 웹개발 종합반의 결제수단별 주문건수 세어보기 ---
select payment_method, count(*) from orders
where course_title = "웹개발 종합반"
group by payment_method;
--- Gmail을 사용하는 성씨별 회원수 세어보기 ---
select name, count(*) from users
where email like '%gmail.com'
group by name;
--- course_id별 '오늘의 다짐'에 달린 평균 like 개수 구하기 ---
select course_id, avg(likes) from checkins
group by course_id;