SQL강의 내용정리 1주차(feat MySQL)

권태형·2023년 6월 26일
0

SQL

목록 보기
1/6
post-thumbnail

본 포스팅은 스파르타 코딩클럽 SQL강의를 참고하였습니다.

저번 SQL SELET 포스팅은 유튜브 무료동영상의 짧은 예시를 기반으로 작성하였는데 이번에 스파르타 코딩클럽 SQL강의듣고 실제 DB에서 사용해보면서 SQL에 익숙해 져 보고자 이렇게 포스팅을 작성한다.

이 강의에서는 DBeaver라는 프로그램으로 MySql에 접속하여 RDS에 SQL을 이용해서 데이터를 조회했는데, 나는 어짜피 워크벤치를 쓰고 있고 호스트와 엔트포인트 등 모두 가르쳐 주기때문에 워크벤치를 이용해서 SQL연습을 해 보았다.

SQL을 작성해보기 전에

워크벤치에서 스키마 포커싱

일단 내가 원하는 스키마(schema)를 사용하기 위해서 워크벤치는 use 스키마이름 을 한번 실행해줄 필요가 있다. use 스키마이름 은 MySQL 내장 문법으로 어떤 DB에서 SQL을 실행할지 선택할 수 있다.

아직 use 스키마이름을 실행하기 전이다. 좌측에 sparta라는 스키마가 활성화가 안 되어있지만, use 스키마이름 실행하고 나면 아래와 같이 sparta스키마가 진하게 포커싱됨을 확인할 수 있다.

이후 부터 다른 SQL을 실행해서 동작을 확인할 수 있다.

show tables

show tables 또한 MySQL 내장 문법으로 중 하나 이다. 이는 각 RDBMS마다 고유의 문법을 가지고 SQL과 같이 사용될 수 있는 문법들 이다. show tables와 같은 내장 문법을 실행하면 아래와 같이 현재 스키마에 들어있는 테이블들의 리스트를 확인할 수 있다.

ANSI SQL

반대로 모든 RDBMS에서 사용할 수 있는 공통적인 표준 SQL을 ANSI SQL이라고 부른다.

미국국가 표준협회(ANSI)에서 SQL표준에 대해서 관리하기 시작하면서 사용된 용어로, SQL표준의 구현 방법을 규정하기 때문에 대부분의 RDBMS에서 ANSI SQL은 사용이 가능하다.

SQL 연습

기본 SELECT

  • 테이블 내 모든 정보 가져오기

    SELECT * FROM tableName

checkins 테이블의 모든 정보를 조회하였다.

  • 테이블 내 일부 데이터만 가져오기

    SELET column1, column2, column3, ... FROM tableName

checkins테이블에서 user_id와 week, comments, likes만 뽑아왔다.
다만 user_id와 likes와 달리 week, comments에만 폰트색이 들어있는 것을 확인할 수 있다. week, comments는 앞서 말한 USE 나 SHOW tables와 같은 MySQL의 내장함수와 이름이 똑같기 때문에 폰트색이 나올 뿐이지 동작은 정상적으로 이루어지기 때문에 그대로 사용해도 무방하나, 보기 불편하다면 ''으로 각 컬럼이름을 감싸주어도 동작시키는데 문제 없다.

Where절

where절은 select쿼리문으로 가져올 데이터에 조건을 걸어줄 수 있다.

orders 테이블에서 필요한 정보만 가져와 보자

  1. orders 테이블 결제를 카카오 페이로 진행한 데이터만 가져오기

    WHERE * FROM orders WHERE payment_method = 'kakaopay'

여기서 kakaopay에 ''를 넣어줘야하는 이유는 문자열 데이터 이기 때문이다. 앞의 orders나 payment_method는 각각 테이블과 컬럼명(필드명)을 의미하기 때문에 문자열일 필요가 없으나 kakaopay와 같이 verchar형식으로 들어간 데이터는 ''의 문자열 처리가 필요하다.

❗❗SQL을 작성하면서 중요한 점은 나중에 조건이 여러개 추가되었을 때 문장의 내용을 구분하기 힘들기 때문에 기준을 가지고 줄을 맞추어 주어야한다. 일반적인 SQL줄맞춤은 회사마다 다르지만, 기준을 잡고 어떻게 줄을 맞춰서 보기쉽게 구분을 해 주어야 한다는 것을 유념해야 한다.

  1. point_users 테이블에서 point가 5000점 이상인 데이터만 가져오기

    SELECT * FROM point_users WHERE point >= 5000

위와같이 where절 안에서 > < = != 과 같은 연산자를 통해 조건 컨트롤 또한 가능한다.

  1. orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져오기

    select * from orders where course_title = '앱개발 종합반' AND payment_method = 'CARD'

Where절에 추가적인 조건을 걸기 위해서 AND나 OR절을 이용할 수 있다.


06-27일 추가

현재까지 WHERE절 연습문제

  1. 포인트가 20000점보다 많은 유저만 뽑아보기!
  2. 성이 황씨인 유저만 뽑아보기
  3. 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!

😀위 연습을 시작하기 전에 어떤 테이블에서 어떤 데이터를 뽑아오기가 아닌 그냥 어떤 데이터를 뽑아오기가 목표였다. 왜?? 어떤 테이블에서 뽑아와야하는지 알지 못하면 FROM을 작성할 수 없는데?

😀생각해보면 일을 할 때 어떤 테이블에 어떤 데이터가 있다고 일일히 다 가르쳐주지 않는다. 직접 눈으로 확인하고 아 이곳에 있으니까 여기서 빼오면 되겠구나! 직접 생각하고 행동해야한다.

  1. 포인트가 20000점보다 많은 유저만 뽑아보기!
  • show tables 를 이용해 어떤 테이블에 포인트정보가 있을 것 같은지 확인
  • 의심되는 point_users 테이블을select * from point_users로 point필드가 존재하는지 확인
  • 확인 후 where절을 이용해서 데이터 조회
  1. 성이 황씨인 유저만 뽑아보기!
  • show tables 를 이용해 어떤 테이블에 유저정보가 있을 것 같은지 확인
  • 의심되는 users 테이블을select * from users로 name필드가 존재하는지 확인
  • where절을 이용해서 데이터 조회
    ❗ 위의 문제는 where like를 사용해서 풀 수도 있지만, 해당강의에서 아직 진도가 진행되지 않았기 때문에, =로 해결
  1. 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!
  • show tables 를 이용해 어떤 테이블에 결제정보가 있을 것 같은지 확인
  • orders테이블을 확인하고 where절로 데이터 조회

where절과 자주 같이 쓰는 문법

  1. 같지 않음(부등)

    • ! = 연산자를 이용
    • select * from orders where course_title != '웹개발 종합반'
  2. 범위 조건

    • BETWEEN을 이용해서 사이값을 가져올 수 있음
    • select * from orders where created_at between "2020-07-13" and "2020-07-15"
  3. 포함 조건

    • in 을 이용해서 같은 컬럼(필드)에서 원하는 데이터만 가져올 수 있음
    • select * from checkins where week in (1, 3);
    • week컬럼의 데이터가 1주차와 3주차인 데이터들만 꺼내옴
  4. 패턴조건

    • like * % 를 이용해서 일정 패턴을 가진 데이터만 뽑아올 수 있음
    • 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로 끝나는 모든 데이터
  5. 제한조건

    • limit를 이용해서 일부 데이터만 가져올 수 있음
    • select * from orders where payment_method = "kakaopay" limit 5;

이외로 유용한 문법들

  1. 중복제외
    • Distinct를 이용해서 특정 컬럼에서 중복된 데이터를 제외하고 가져올 수 있음
    • select distinct(payment_method) from orders;
    • payment_method컬럼의 중복되지 않는 데이터만 가져오기에 정확한 종류를 확인할 수 있음
  2. 갯수세기
    • Count를 이용해 원하는 데이터의 수를 확인할 수 있음
    • select count(*) from orders
profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글