SQL 1주차 일지

최창수·2023년 2월 21일
0

SQL

목록 보기
1/5
post-thumbnail

들어가기 앞서

왜 DB와 SQL을 사용하는가?

많은 양의 데이터를 효과적으로 저장/수정/사용

  1. 많은 데이터 중 필요한 데이터를 비교적 빠르게 불러올 수 있음
  2. DB에 접근하는 여러 사용자 간의 충돌을 방지

C.R.U.D.

여럿이 함께 데이터를 보관, 정리하기 위한 기능 'CRUD'

C-reate: 데이터 생성하여 저장하기
R-ead: 저장된 데이터 불러오기
U-pdate: 저장된 데이터를 변경하기
D-elete: 저장된 데이터 삭제하기

강의에서는 이중 R(ead)만을 다룬다.

SQL(Structured Query Language)이란

DB에 query를 보내 원하는 데이터를 불러오는(read) 언어

데이터 불러오기를 편리하게 하는 도구
데이터 분석과 정리를 위한 기능 지원

예시 1

show tables

DB에 존재하는 모든 table들의 목록을 표시.

예시 2

select * from orders

orders라는 table의 모든 field를 선택해 불러오기.

  • table: excel의 sheet와 같이 특정 주제의 데이터 모음인 2차원 표.
  • field: excel의 column(열)과 동일. 각 Record에 대한 개별 속성값.
  • Record: excel의 row(행)와 동일. field에서 지정된 속성값을 가지고 DB에 저장되어있는 개별 데이터들.

SQL syntax 01 - select & where

0. 줄 바꿈?

의미의 차이는 없으나, 적절한 줄 바꿈을 통해 가독성을 늘릴 수 있다.

select * from orders where email like '%naver.com' and course_title = '웹개발 종합반' and payment_method = 'kakaopay'

이것보다는

select * from orders
where email like '%naver.com'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'

이게 보기 좋다.

1. select

select [field명...] from [table명]

table로 부터 원하는 field의 데이터를 선택해 불러오는 구문.
'*'표시는 '모두'를 의미하므로 field명에 입력시 전체 table을 출력한다.

예시 1

select * from users

users table의 모든 field의 데이터 불러오기

예시 2

select payment_method, email from orders

orders table의 데이터 중 payment_method, email field의 데이터만 불러오기

2. where

select [field명...] from [table명] where [조건문]

select가 가저올 데이터에 조건을 걸어, 해당 조건을 만족하는 데이터만 불러오게한다.

등식/부등식 조건문 : '=' '!=' '>=' '<='

A에 field명, x에 원하는 값을 대입한다.
'A=x': A값이 x와 같을 때
'A!=x': A값이 x와 같지 않을 때
'A>=x', 'A<=x': A값이 x보다 클/작을 때

!!!주의 사항!!!

x에 들어갈 값이 문자열일 경우 반드시 작은 따옴표('')로 감싸야 한다.
그렇지 않을 경우 문자열이 아닌 field 명으로 인식하여 오류가 발생한다.

예시

select * from users
where name !='황**';

users 테이블에서 name의 값이 황**이 아닌 record의 모든 field의 값 불러오기.

여러 조건 걸기 : and, or

P와 Q에 각각의 조건문이 들어간다.
'P and Q': P와 Q가 모두 참일 때
'P or Q': P와 Q 둘중 하나가 참일 때
여러개의 and와 or를 사용할 경우 괄호를 이용해 우선순위를 정할 수 있다.

예시

select updated_at from orders
where (course_title !='앱개발 종합반' or created_at <='2020-07-12') and payment_method ='CARD';

orders 테이블에서 course_title 값이 앱개발 종합반이 아니거나 created_at 값이 2020-07-12 이전임을 만족하는 동시에 payment_method가 CARD인 레코드 record의 updated_at field의 값 불러오기.

범위 조건: between ~ and ~

A에 field명, x와 y에 각각의 값이 들어간다.
[A] between [x] and [y]

!!!주의 사항!!!

point between 10 and 20

위와 같이 입력할 경우, 조건을 만족하는 point값은 10부터 20 까지가 아닌 10 부터 19 까지 이다.

예시

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

2020년 7월 13일, 2020년 7월 14일에 생성된 주문 데이터만 불러오기

포함 조건: in

in 다음에 원하는 값의 목록을 괄호로 감싸 입력한다. 원하는 field의 값이 이 목록안에 존재하는지 본다.

예시

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

checkins의 데이터중 week 값이 1, 3중 하나인 데이터만 불러온다.

패턴 조건: like

like 뒤에 주어진 문자열 패턴을 만족하는 값들만 불러올 수 있다.

예시 - gmail을 사용하는 user 정보만 보고 싶다

select * from users 
where email like '%gmail.com';

'%'는 wildcard와 같은 역할을 한다. 따라서 'email'의 문자열 값 중 앞에 무엇이 오든 상관없이 gmail.com으로 끝나는 문자열이면 조건을 만족한다.

예시 - email주소가 s 로 시작하고 gmail을 사용하는 유저의 정보만 보고 싶다

select * from users 
where email like 's%gmail.com';

's'와 gmail.com 사이에 무엇이 오든 s로 시작하고 gmail.com로 끝나기만 하면 조건을 만족한다.

3. 기타 유용한 문법들

limit: 데이터 중 일부만 가져오기(갯수 제한)

출력할 데이터의 갯수를 제한한다. 데이터가 너무 많을 경우 본격적으로 분석, 정리하기 전 대략적인 형태를 파악할 때 사용하기 좋다.

select * from users 
where email like 's%gmail.com'
limit 5

조건을 만족하는 데이터 중 5개의 데이터만 보여준다.

distinct: 중복 제거하기

field에 어떤 값들이 존재하는지 볼 때, 일일히 읽을 필요 없이 중복되는 값을 제거하여 보여준다.

select distinct(name) from users;

count: 갯수 세기

출력될 record 대신 그 record들의 갯수를 출력한다.

select count(*) from orders

전체 주문 record 개수를 출력한다.

profile
Hallow Word!

0개의 댓글