스파르타 SQL 1주차 일지
1주차 개발일지.
1주차에서는 데이터베이스 (해당 교육과정에서는 MySql 과 DBeaver 에디터를 사용한다) 가 기본적으로 어떤 모양을 하고 있는지,
SQL 문법은 왜 필요한지, 그리고 기본적으로 어떻게 쓰이는지를 배운다.
DBeaver 에서 ‘새 데이터베이스 연결’ 기능을 사용, 스타르타가 교육용으로 제공하는 서버 호스트에서 데이터베이트를 연결받아 사용한다.
데이터베이스의 이름은 sparta.
*** DBeaver 에서 SQL 실행은 control + enter
기본적으로 SQL에서 사용되는 문법의 이름을 쿼리(query)문이라 하는데, 쿼리란 질의를 의미한다.
즉 쿼리문은 데이터베이스에 명령을 내리는 역할이며, ‘select 쿼리문’ 이라 함은 데이터베이스에서 데이터를 선택해 가져오겠다는 뜻이다.
Select 쿼리문은 ‘어떤 테이블에서’ ‘어떤 필드의 데이터를’ 가져올 것인지를 정해야 한다.
——
- 테이블: 테이블은 데이터가 담긴 엑셀 시트와 동일. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 됨.
- 필드: 테이블 내부의 각각의 카테고리들.
——
테이블의 내부 카테고리를 보기 위한 쿼리문.
——
show tables;
——
DBeaver 에디터의 좌측 카테고리에서 sparta DB를 선택한 상태에서 테이블을 열어보기.
——
select * from orders;
——
Order 라는 테이블에서 내가 원하는 필드의 값들만 가져올 수도 있다.
——
select created_at, course_title, payment_method, email from orders;
——
Where
where절은 select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것.
——
select * from orders
where course_title = "앱개발 종합반" and payment_method = "kakaopay";
——
=> course_title 이 ‘앱개발 종합반’ 인 데이터만 가져온다.
조건을 추가로 걸고 싶을 경우 ‘and’ 를 뒤에 붙여주고, 조건을 기입해준다.
Where 절과 함께 쓰이는 쿼리문법들.
!= => 같지 않음을 표현. 예시. select * from orders where course_title != "웹개발 종합반";
Between => 범위 조건. 수치나 날짜 등, 일정 범위 안의 데이터들을 검색. 예시. 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;
** payment_method 필드의 값이 ‘kakaopay’ 인 데이터들이, 예를 들어서 수백 개가 된다.
헌데 나는 이 데이터를, 페이지수를 가진 게시판으로 보여주고 싶다면? 한 페이지마다 데이터 row 갯수를 끊어서 보여줘야 해.
Distinct => 중복 데이터 제거. 예시. select distinct(payment_method) from orders;
** 데이터열의 갯수보다는, 해당 필드에 몇 가지 종류가 있는지 검색하기 용이함.
count => 데이터의 갯수가 몇 개인지 세보기. 예시. select count(*) from orders
Count + distinct 함께 사용해보기.
——
SELECT count(distinct(name)) from users;
——
** name 필드값의 중복을 제거하고 총 몇 종류가 있는지 distinct로 검색, 이것이 총 몇 종류인지 count.
해당 예시에서는 이름의 성 씨 중복을 다 없애고, 총 몇 종류의 성 씨가 있을까 를 출력한 것. 중복을 없애고, 총 종류를 센다.
_______________________________________________________
배운 것들로 퀴즈 풀어보기.
첫 번째. Users 테이블에서 성이 남 씨인 유저의 이메일만 추출하기.
——
select email from users
where name = "남**"
——
=> 성이 “남**” 인 유저만 추출하라. Where name = “남**”
이메일만 추출하라. Select email from users
두 번째. Gmail을 사용하는 2020/07/12 ~ 13 에 가입한 유저를 추춣하라
——
select * from users
where created_at BETWEEN '2020-07-12' and '2020-07-14'
and email like '%gmail.com'
——
users 테이블의 데이터를 가져올거다. 어디? created_at 필드의 값이 07-12 ~ 07-14 사이인 데이터들만.
그리고 email의 패턴이, 문자열 뒤쪽에 gmail.com 이 붙은 애들만 또 가져올거다~
세 번째. Gmail을 사용하는 2020/07/12~13에 가입한 유저의 수를 세기
——
select count(*) from users
where created_at BETWEEN '2020-07-12' and '2020-07-14'
and email like '%gmail.com'
——
두 번째 문제의 답에서, select * 를 select count(*), 즉 count 로 감싸주면 데이터의 전체 갯수를 출력해주겠지.
마지막으로, 1주차 숙제!
숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기. 참고로 해당 데이터들은 orders 테이블에 있어.
——
select * from orders
where course_title = '웹개발 종합반' and payment_method = 'kakaopay'
and email like '%naver.com'
——