0. 개요

오늘은 SQL 의 아주 기본적인 내용들에 대해서 정리해보았다.


1. SQL

데이터베이스에서 원하는 정보를 뽑기위해서 사용하는 언어 중 하나 (파이썬, 자바 스크립트 등)

2. 데이터 베이스와 테이블과 칼럼

데이터 베이스의 정의 : 여러 테이블(=정보)가 모여 있는 저장소
테이블 : 칼럼들이 데이터화 되어 저장되어 있는 저장소
칼럽(혹은 필드) : 개별적인 데이트들이 열과 행으로 구성되어 있는 것

2. SQL 조회 방법

 1) Select | From 쿼리문
: Selcet - 데이터베이스 중 어떤 데이터를 조회할 건지 요청하는 명령어
(Ex. 칼럼 1, 칼럼 2 / * 후에 배울 Count 등의 함수)
: From - 가져올 테이블을 특정하는 용도로 데이터 테이블이 들어간다.
[Note : From 칸에는 항상 '테이블'이 들어간다.]

TIP) 만약에 모든 데이터 베이스를 보고 싶은 경우에는 * 를 사용하여 데이터를 조회한다.

Ex)
Select *
From food_orders
말로 해설 : 모든 데이터 베이스를 가져오며, 그 중에서도 음식 주문 테이블을 가져오시오.

Select restaurant_name
From food_orders
말로 해설 : 레스토랑 이름의 칼럼에서 데이터를 가져오며, 그 중에서도 음식 주문 테이블에서 가져오시오.

  3) as 구문
: as 칼럼에 해당 이름 외에 다른 '별명(alias)'를 붙여달라고 지시하는 것

 - 방법 1 : 칼럼 1 as 별명 1
 - 방법 2 : 칼럼 2 별명 2

Note : 그러나 별명을 지을 때에는 언어에 따라서 반드시 유의해야하는 것이 있다.
가령, 1) 영문과 언더바로 구성된 경우 : Order_Num -> 바로 사용하는 데에 지장이 없다.
 EX) Select Order_id as Order_Num (가능) / Select Order_id Order_Num (가능)

그러나 언더바가 없고, 특수문자, 한글이 있는 경우에는 반드시 ""(큰따옴표)를 사용하여 넣어줘야 한다.

EX) Select Order_id as 주문번호 (X)
Select Order_id as "주문번호" (O)
Select Order_id "주문번호" (O)

EX) From Price as Price id (X)
From Price as "Price id" (O)
From Price "Price id"(O)

 4) Where 절 명령어
: Where : 사용자가 원하는 데이터를 필터링 할때, '어디서' 데이터를 필터링 할 지 가져오는 것.
(비슷한 개념 : 엑셀의 필터링, 조건문 서식과 같은 절)

사용 방법 (예시와 함께 적어서 설명한다.) 

Select *
From Food_Orders
Where Gender='Female'

TIP) 문자를 사용하여 WHERE 구절을 사용할 경우, ''(작은 따옴표)를 사용해서 이를 적는다.

Select *
From Food_Orders
Where Price = 20,000

 5) WHERE 절의 필터링

WHERE 절의 필터링은 연산자와 조건문 등을 통해서 이를 해결할 수 있다.

[비교 연산자]

비교 연산자 의미 예시
= 같다 Select *
From food_orders
Where payment = 'card' 
(카드를 쓴 사람을 해당 테이블에서 찾는다.)
<> 같지 않다 (다르다) Select *
From food_orders
Where gender <> 'male'
(남자가 아닌 사람을 테이블에서 찾는다.)
> 크다, 초과한다 Select *
From food_orders
Where price > 20,000
(20,000원을 초과의 음식을 조회한다.
결론적으로 20,000원은 포함되지 않는다.)
>= 크거나 같다, 이상이다 Select *
From food_orders
Where price >= 20,000
(20,000원 이상의 음식을 조회한다.
결론적으로 20,000원은 포함된다.)
< 작다, 미만이다 Select *
From food_orders
Where price < 20,000
(20,000원 미만의 음식을 조회한다.
결론적으로 20,000원은 포함되지 않는다.)
<= 작거나 같다, 이하이다 Select *
From food_orders
Where price > 20,000
(20,000원 이상의 음식을 조회한다.
결론적으로 20,000원은 포함된다.)

[조건문, 논리 연산자]

논리연산자 의미 예시
AND 그리고 Select *
From food_orders
Where gender = 'female' and age>20
-> 나이가 20세 이상이고, 여성인 여성만 출력
-> 둘다 모두 만족해야만 출력된다.
OR 또는 Select *
From food_orders
Where gender = 'female' or age>20
-> 나이가 20세 이거나 여성인 사람만 출력
-> 나이가 20세 이상(남성도 무관) 혹은 여성인 사람은 모두 출력한다.
-> 20세 미만의 사람은 미출력됨
NOT 아닌 Select * 
From food_orders
Where not gender = 'female'
-> 여성이 아닌 사람들은 모두 출력한다.
-> 모든 남성을 출력하시오.

HW. 1주차 숙제 

 문제 1) 상품 준비시간이 20~30분 사이인, 한국음식점의 식당명과 고객번호 조회하기

풀이 해결과정
1. 일단 칼럼을 좁혀본다.
 -> 식당명과 고객번호 (restaurnt_name)과 (customer_id) 칼럼 선택
 -> 여기랑 다음 과정에서 헤맸다. 어디서 뭘 가져와야하는 지 모르겠어서.
 -> 일단은 다음과 같이 썼다.

 Select restaurant_name,customer_id

2. 가져올 테이블을 선택한다.
 -> 기존에 가져왔던 여러 테이블들 중 자료를 확인해본다.
 -> 어디서 가져와야 할지 몰라서 계속 쓰던 food_orders를 사용했다.
아니 애초에 거기서도 잘 안나와서 그냥 다시한번 Select * from food_orders 로 다시 확인했다.

한국 음식 타입과 음식 준비 시간에 대한 칼럼은 찾았는데... 일단은 여기서 확인해서 다시 1번 지문으로 돌아갔다.
그 다음에서야 3번째 풀이를 시작했다.

3. 조건문에 맞춰서 서술한다.
 -> 조건 1. 한국 음식점 일것 cuisine_type='Korean'(여기서 소문자 쓰면 에러난다.)
 -> 조건 2. 상품 준비시간이 20분에서 30분 차이일것 food_preparation_time=between 20 and 30
 -> 그런데 이 2가지를 모두 만족할 것 이니까 And 가 두번 들어가겠구나.
일단은 이렇게 써봤다.

앗...! 근데 오류가 떠서 잠시 살펴봤다. between 20 and 30 에서 오류가 났다고...? 흐음...
혹시 = 을 넣었던게 잘못이었을까?

다시 수정했다. 결과는...

아, 결과값이 출력 됐다! 이렇게 하는 거구나... 아.. 너무 어려웠다.
그래서 최종적으로 답을 이렇게 제출 했다.

select restaurant_name,customer_id
from food_orders
Where cuisine_type='Korean'and food_preparation_time between 20 and 30

최종적으로 내일배움 캠프에서 제공한 SQL 기초 강의 1주차를 모두 들었다.
개인적으로는 여기까지 쉽다고는 하는데 난 아직도 큰 어려움을 느꼈다.

특히, SQL 은 어떤 데이터를 가지고 있는지 아예 확인이 안되기 때문이다.
적어도 내가 배운 지식인 Select 로는 확인이 안되더라... 그래서 어떻게 써야할지 되게 많은 고민을 해야만 했다.
마지막 문제를 쓰면서 칼럼을 써야하는데, 코딩에 있는 칼럼이 없었더라면 난 어떻게 써야하는 지도 모른채로
계속 막막했을 거 같다.

다음주에 들어야할 강의를 쭉 훑어 봤는데 COUNT 랑 AVERAGE 막 이런것도 나와서 살짝 들었는데
무슨 말인지 하나도 모르겠더라.. 그래서 꼭 TIL 을 작성해서 다시 한번 복습해야겠다는 생각이 들었다.

일단은 오늘 일지 작성 완료!
다음주 2/17 부터 시작되는 본 캠프에서 어떻게 해야할지 고민이 된다.
잘 따라올 수 있을지 고민 되지만 최선을 다해서 하는 수 밖에...

myo