ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 1주차
    SQL 2023. 5. 6. 15:51

    https://teamsparta.notion.site/SQL-1-635747d60e3c42cbb0d7a2fb582388c5#fc5a8c9a4e8f4655a127d3c85f47a8a5

    • 테이블: orders라는 엑셀 시트명 보이시죠? 테이블은 데이터가 담긴 엑셀 시트와 동일합니다. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 되겠죠.
    • 필드: order_no, created_at, course_title, user_id, payment_method, email 각각이 필드입니다.

     

     

    show tables : (SQL문 실행 = show 폴더 보기)
    select * from orders : (SQL문 실행 = orders 폴더 전체보기 *은 전체라는 뜻)
    select order_no, created_at, user_id, email from orders : (SQL문 실행 : 특정항목만 보기) crtl + Enter눌러도 됨

     

    스파르타 데이터베이스

     

    checkins: 여러분이 강의실 들어오시며 남기는 '오늘의 다짐'이 들어있어요
    courses: 스파르타의 개설 강좌 정보가 들어있어요
    enrolleds: 유저별 강좌 등록정보가 들어있어요
    enrolleds_detail: 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있어요
    orders: 주문 (수강등록) 정보가 들어있어요
    point_users: 유저별 포인트 점수가 들어있어요
    users: 유저 정보가 들어있어요

     

    Where 절은, Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것

     

    예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!

    예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!

    예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!

    ( '그리고' = 'and', '또는' = 'or' )

     

    1) select * from orders 

    where payment_method = 'kakaopay'

     

    2) select * from point_users

    where point >= 5000

     

    3) select * from orders

    where course_title : '앱개발 종합반' and payment_method : 'CARD'

     

    1. '같지 않음' 조건  != 

    '!=' 에서 ! (느낌표)는 부정 (not)을 의미합니다. '='는 같음을 의미하니, '!='는 같지 않음이겠죠!

    Ex)

    select * from orders
    where course_title != "웹개발 종합반";

     

    2. '범위' 조건 between A and B

    7월 13일, 7월 14일의 주문 데이터만 보고 싶어졌어요 (7/15 00시 00분 전까지이므로 7/15까지 걸어줌)

    Ex)

    select * from orders
    where created_at between "2020-07-13" and "2020-07-15";

     

    3. '포함' 조건  in

    1, 3주차 사람들의 '오늘의 다짐' 데이터만 보고 싶어졌어요.

    Ex)

    select * from checkins 
    where week in (1, 3);

     

    4. '패턴' (문자열 규칙)  like

    다음 (daum) 이메일을 사용하는 유저만 보고 싶어졌어요. 어떻게 하죠? 

    select * from users 
    where email like '%daum.net';

    -> 퍼센트(%) 앞에 있으면 그문자로 시작하는것, 퍼센트 뒤에 문자가 있으면 그 문자로 끝나는 것.
     
    ex)  A%T = A로 시작해서 T로 끝나는 것
    ex)  A% = A로 시작하는 것 
    ex)  %T = T로 끝나는 것

     

     

    [퀴즈] 결제수단이 CARD가 아닌 주문데이터만 추출해보기
    [퀴즈] 20000~30000 포인트 보유하고 있는 유저만 추출해보기
    [퀴즈] 이메일이 s로 시작하고 com로 끝나는 유저만 추출해보기
    [퀴즈] 이메일이 s로 시작하고 com로 끝나면서 성이 이씨인 유저만 추출해보기

     

    1. select * from orders

    where payment_method != 'CARD'

     

    2. select * from point_users

    where point between 20000 and 30000

     

    3. select * from users

    where email like 's%com'

     

    4. select * from users

    where email like 's%com' and name like '이**'

     

    그외 문법

     

    1. limit  = 일부 데이터만 가져오기.

     

    Ex) 카카오페이로 결제한 유저중 5명.

    select * from orders (payment_method)

    where payment_method = 'kakaopay'

    limit 5

     

     

    2. Distinct = 중복 데이터는 제외하고 가져오기

     

    Ex) 결제방식의 유형 중복제외하고 추출하면?

    select distinct (payment_method) from orders

     

     

    3. Count = 몇개인지 숫자 세보기

     

    Ex) 카카오페이 지불유저 숫자는?

    select count (*) from orders

    where payment_method = 'kakaopay'

     

     

    4. 응용. Distinct와 Count를 같이 써보기.

     

    Ex) user들의 총 성씨 (Family name)의 갯수는?

    이름에서 중복을 먼저 제거하고, 수를 셈. 이름이 다 김**, 이**, 박** 이렇게 되어있기때문에 가능.

    select count (distinct (name)) from users

     

     

    에러메시지 해석

    Unknown column 'kakaopay' in 'where clause' 이라고 나옴.

     

    Where 절에 있는 kakaopay라는 컬럼(필드)가 알려지지 않았다 (컴퓨터는 알지 못한다) 라는 것입니다. 즉, kakaopay라는 글자가 '컬럼(필드)' 이름으로 인식되어서 발생한 에러에요.

     

    kakaopay를 'kakaopay'로 바꿔주면 되겠죠? 글자를 ''로 감싸면 변수가 아닌, 문자열(값)로 인식하겠다는 의미입니다. 결제수단이 kakaopay라는 값을 가진 데이터만 불러오기 위해서는, kakaopay를 문자열(값)으로 지정해 줘야겠죠!

     

    두번째 에러에서는 3번째 줄 name = "이**"이 앞의것과 and로 연결하든 or로 연결하든 해야 함.

     

    <퀴즈>

    1. 성이 남씨인 유저의 이메일만 추출하기
    2. Gmail을 사용하는 2020/07/12~13에 가입한 유저를 추출하기
    3. Gmail을 사용하는 2020/07/12~13에 가입한 유저의 수를 세기

     

    1. select email from users

    where name = '남**';

     

    2. select * from users

    where created_at between '2020-07-12' and '2020-07-14'

    and email like '%gmail.com'

     

    3. select count(*) from users

    where created_at between '2020-07-12' and '2020-07-14'

    and email like '%gmail.com';

     

     

    숙제 : naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기

    select * from orders

    where email like '%naver.com'

    and course_title = '웹개발 종합반'

    and payment_method = 'kakaopay'

    'SQL' 카테고리의 다른 글

    SQL 기본  (0) 2023.05.16
    SQL 4주차(2)  (0) 2023.05.08
    SQL 4주차(1)  (0) 2023.05.08
    SQL 3주차  (0) 2023.05.07
    SQL 2주차  (0) 2023.05.07

    댓글

Designed by Tistory.