내일배움캠프_개발일지/SQL

스파르타 SQL 1주차 일지

msdou45 2022. 10. 28. 09:54

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'

——