본문 바로가기

SQL

[스파르타코딩클럽] SQL 1주차

*시작 전 참고사항 - Mac OS

맥을 사용하는 중인데, DBeaver를 재시작하려니까 You do not have permission to open the application "DBeaver".이라는 문구가 등장했다. (회사 컴퓨터도 아니고 내 컴퓨터인데?!) 

요 놈

그런 경우에는 Terminal을 시행시켜 아래와 같은 문구를 실행시켜주면 간단히 문제가 해결된다.

codesign --force --deep --sign - /Applications/DBeaver.app

 

 

0. Database 기초 개념

DB: 데이터를 담는 통 - 여러 명이 사용할 목적으로!

CRUD: Create Read Update Delete

SQL: Structured Query Language의 Acronym, 여기서 Query는 요청

 

 

1. 테이블과 필드

  • 테이블: 데이터가 담긴 엑셀 시트와 동일, 아래 Example Spreadsheet를 DB에 올리면 Class Data
  • 필드: 아래서는 Student Name / Gender / Class Level / Home State ... 각각이 필드

Google에서 제공하는 Sample Data

맥은 control(^) + enter 키로 execute

show tables: DB 안의 테이블 이름들을 보기

select * from orders: orders 테이블의 모든 필드(*) 가져오기

 

 

2. Where절

원하는 table에서 원하는 조건의 필드 데이터만 추출해보자.

주문건(orders 테이블)에서 주문 날짜가 2022년 1월 12일이고 결제수단은 카드인 것들만 뽑아보자.

select * from orders
where created_at between '2022-01-12' and '2022-01-13' 
and payment_method = 'CARD'

참고. created_at = '2022-01-12' 라고 작성하면 원하는 데이터를 얻을 수 없다.

시간 개념의 연속형 데이터여서 그런지, between을 써야만 값을 얻을 수 있다.

 

*추가: 날짜 데이터는 기본적으로 시분초를 포함하고 있어서, 시분초를 생략하고 날짜만 적게 된다면 '2022-01-12'는 '2021-01-12 00:00:00'으로 자동으로 시분초 값이 채워지게 됨. 정확한 데이터를 얻기 위해서는 시분초 데이터를 같이 기입하는 것이 좋으며, 위 코드에서 '2022-01-13'는 '2022-01-13 00:00:00'을 포함하는데, 이러한 경계값을 얻고 싶지 않다면 '2022-01-12 23:59:59'로 기입하는 것이 좋을 것. 다만 23:59:59.999...같은 세부 소수점은 버린다고 생각하면 됨. (소수점을 명시하고 싶으면 적어주는 것도 좋은 방법)

이런 작은 오차까지 불허한다면, between이 아닌 where crated_at >= '2022-01-12' and created_at < '2022-01-13'으로 적어주면 됨.

select * from orders
where crated_at >= '2022-01-12' and created_at < '2022-01-13'
and payment_method = 'CARD'

 

 

Where절과 자주 쓰는 문법

(1) 같지 않다 !=

(2) 범위 (A와 B 사이 - B 직전까지 포함됨, 즉 B는 포함되지 않음. 주로 날짜나 포인트) between 'A' and 'B'

(3) 포함 (A와 B를 포함하는) in (A,B) 

 

*나의 궁금증: check_ins라는 table의 week 필드가 1 또는 3인 데이터만 가지고오고자 한다. where week in (1,3) 대신 where week = "1" or "3"이라고 쓰면 안 될까?

**실제로 해 보니, where week = "1" or week = "3" 이면 의도한 결과값이 나오나, 기존에 생각한 것처럼 where week = "1" or "3"은 내가 원하는 결과값을 얻을 수 없었다. '3'을 내가 의도한대로 읽지 않아 전체 값이 나온다. and 와 or은 문장을 이어준다고 생각하면 될 듯. 길게 늘여쓰기 보다는 그냥 깔끔하고 쉽게 아래처럼 쓰기로 결정.

SELECT * from check_ins
where week in (1,3);

 

(4) 패턴 (특정 문자열을 패턴으로 가지는) like '%@naver.com'

%는 무엇이 들어가든 상관이 없다는 뜻

ex. a%t => a로 시작해서 t로 끝나는 모든 것

참고.

like는 문자열이 해당 조건과 유사한지를 비교하는 조건문

=는 단순히 값이 같은지 아닌지를 판별

 

 

3. 그 외 유용한 문법

(1) 일부 (설정한 개수의) 데이터만 가져오기: limit

select * from orders
where payment_method = "kakaopay"
limit 7;

이렇게 하면 7개의 데이터만 출력된다.

 

(2) 중복데이터 제외하고 가져오기: distinct

중복된 데이터가 많아 해당 필드에 어떤 데이터가 있는지 확인하기 어려울 때

ex. 주문 내역(orders)에서 메뉴가 몇 개인지 확인하고 싶을 때, 중복 제거를 해서 보여주는 코드

select distinct(menu) from orders;

(3) 몇 개인지 세고 싶을 때: count

select count(*) from orders
where menu = "pizza";

첫번째 줄까지만 쓴다면 orders table의 모든 데이터가 몇 건인지 나올거고,

where문이 붙은 두번째 줄까지 쓰고 실행한다면 menu가 pizza인 주문건만 보일 것이다.

 

*예시: 주문 건(orders)에서 menu의 개수가 몇 개인지 알고 싶을 때

select count(distinct(menu)) from orders;

*마지막으로 " " 와 ' ' 정리하기.

어떤 문법은 string을 " " (double quotes)를 이용해 표기하고, 어떤 문법은 ' ' (single quotes)를 이용해 표기한다.

두 가지의 차이점이 있나 했더니 기본 모드일 경우에는 동일하게 문자열 표기에 쓰인다고 한다.

나처럼 괜히... 맞춰 쓰는 분이 없도록..

*문자 타입 <-> 숫자타입

숫자 타입의 경우는 대소 구분이 가능하고 사칙 연산이 가능한, 비교 가능한 타입

문자열은 말 그대로 문자열: '가'와 '나' 중 뭐가 큰지 구분할 수 없는 것처럼..

 

 

4. 마치며

다음주차는 조금 더 어렵겠지만 1주차는 수월했다.

일지를 적으면서 공부하니, 코드만 따라 작성할 때는 생각하지 못했던 궁금증들이 퐁퐁 솟아난다.

끝까지 재밌게 완주해서 SQL을 조금이나마 이해하고 사용해보자. =)

 

 

스파르타 코딩 클럽 5만원 할인 받고 수업 듣기 (초대 코드)

 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

위 링크를 통해 접속하시면 바로 강의 5만원 할인을 받을 수 있습니다!

'SQL' 카테고리의 다른 글

[스파르타코딩클럽] SQL 2주차  (0) 2022.03.06