내일배움캠프 Spring 3기/SQL 실무 기초

SQL 실무형 기초 (1) - 데이터베이스 이해 / SELECT, FROM, WHERE문 이용하기

yokxim 2024. 8. 7. 21:54

학교에서도 많이 배웠던 SQL이었는데.. ㅋㅋ 여기서 이렇게 다시 정리를 하게 될줄은 몰랐다. 아무튼 SQL에 대해 알아보자~

먼저 SQL이란, 데이터베이스와 대화를 하기 위한 언어를 뜻한다! 마치 사용자가 데이터베이스에게 A라는 친구의 정보를 달라고 요청한다거나, 구체적으로는 202X년 11월 26일 저녁 시간대에 30000원 어치 이상 메뉴를 주문해서 먹고 간 남자 손님들의 전화번호를 알려달라고 요청하는 상황이 생길 때(실제에서는 이렇게 구체적으로 알 수 없지만)! 사용한다.

 

데이터베이스에게 질문하는 것을 Query라고 한다. 

 

이번에는 DBeaver라는 프로그램을 사용해서 SQL Query를 조작해보았다! 이 프로그램 설명은 따로 하지 않겠다..

 

 

먼저 데이터를 요청할 때 필수적으로 사용되는 SELECT와 FROM에 대해 알아보자!

SELECT와 FROM은 간단하게 말해 '어느 테이블에서 어떤 데이터를 가져올까'에 대한 명령어다. 아주 기본적이고 필수적인 친구들이다.

 

SELECT: 데이터를 가져오는 기본 명령어; 데이터를 조회하는 모든 Query에 사용됨

FROM: 데이터를 가져올 테이블을 특정해주는 명령어

* : 모든 Column을 가져온다는 명령어

 

예를 들어서 

select *

from food_orders

라는 Query를 적었다고 하면, [food_orders]라는 데이터베이스에서 모든 Column값을 가져온다.. 라고 할 수 있겠다.

 

food_orders 라는 데이터베이스에는 정말 다양한 Column들이 있다.

이렇게 주문 ID, 고객 ID, 레스토랑 이름, 어느 나라 음식인지, 가격, 수량, ... 등등 많은 정보가 포함된걸 볼 수 있는데,

항상 이렇게 많은 데이터를 가져와야만 할 필요는 없다. 가독성을 위해서라도.

 

그래서 필요한 Column만 쏙 빼서 가져올 필요가 있을 경우엔, select * 대신 Column 이름을 집어 넣어준다!

이렇게.

 

select restaurant_name, rating

from food_orders

 

이렇게 검색하면, 내가 평점과 레스토랑 이름만 확인해서 어느 레스토랑에 가야 할지 알 수 있다.

그리고 이렇게도 쓸 수 있는데,

 

select restaurant_name as '음식점', rating '평점'

from food_orders

 

이렇게 쓰면 표시되는 Column에 별명을 줄 수도 있다. [Column_Name] as [별명] 혹은 [Column_Name] [별명]으로 작성한다!

 

그리고 이번엔 조건문을 살펴보자.

내가 이 레스토랑이 주말에 여는지, 아니면 주중에만 하는지 확인해 봐야 하지 않겠는가? 막상 갔는데 문을 안열면 슬프잖아..

 

그럴 때는 WHERE 구문을 사용해서 조건을 넣어 주면 된다.

 

select restaurant_name, rating, day_of_the_week

from food_orders

where day_of_the_week = 'Weekend'

 

이렇게 검색하면, 주말에 문을 여는 레스토랑들의 평점들을 알수 있게 된다. 휴! 이제 힘들게 갔는데 문을 닫았을 경우를 생각하지 않아도 되겠다.

 

WHERE 구문에 유용하게 쓰이는 몇가지 기술들이 있는데.. BETWEEN, IN, LIKE와 같은 비교 연산문이다.

 

예를 들어서 주말에 지방에서 알고 지내던 친구가 한명 오는데, 오랜만에 만나는 친구라서 비싼 음식을 대접하고 싶지만 또 너무 비싼건 내 지갑 사정이 여의치 않아서 못 산다고 가정하자. 내가 사줄 수 있는 요리는 삼만원! (난 원래 10만원까지 투자하려고 했는데, 제공받은 데이터베이스에 한끼에 사만원이 넘어가는게 없더라. 이건 절대 내가 쩨쩨한게 아니다)

이 경우에는 어떻게 Query를 적어야 할까?

 

select restaurant_name, rating, day_of_the_week, price

from food_orders

where day_of_the_week = 'Weekend' AND price BETWEEN 30000 AND 35000;

 

 

이렇게 조건문이 여러개일 경우에는 다 만족해야 하는 경우엔 AND를, 하나만 만족해도 괜찮은 경우엔 OR를 사용한다.

그리고 BETWEEN이 사용되었는데, 30000원에서 35000원어치 저녁을 사줄 수 있을 정도로 내가 대인배라는 사실을 입증할 수 있는 기회가 주어졌다.

 

내가 덜도 말고 더도 말고 딱 20000원어치 음식과 30000원어치 음식만 조회해 보고 싶다면 price in [20000, 30000]이라는 코드를 적으면 된다! 그리고 LIKE는 이럴 때 사용한다.

select DISTINCT restaurant_name

from food_orders

where restaurant_name LIKE "%RED%"

 

지난번에 먹었던 레스토랑 이름이 기억이 잘 안나는데, 가게 이름에 어렴풋이 RED가 들어갔던거 같다! 싶을때 사용하는 명령어이다. %를 앞이나 뒤나 추가하면 RED로 끝나는 문자, RED로 시작하는 문자, 혹은 둘다 사용하면 중간에 RED가 들어가는 모든 레스토랑의 이름을 조회할 수 있다. 이렇게.

그리고 중복을 피해 고유한 레스토랑 이름만 조회하고 싶으면 DISTINCT 키워드를 추가한다. 

 

1주차 내용은 여기까지인데, Query를 적었을 때 오류가 나면 어떻게 처리할 지 한번 짚고 마무리하자.

 

예를 들어 Query를 실행했는데 이런 문구가 나온다면, (물론 오류는 가지각색이겠지만)

 

select DISTINCT restaurant_name,

from food_orders

where restaurant_name LIKE "%RED%"

 

에러메시지가 나타나면 처음 만나는 친구들의 관상에 당황해 할 수 있지만,

겁 먹는 것보다 더 먼저 확인해야 할 내용은 바로 '왜 에러가 났는가'이다.

 

저 에러 메시지의 You have an error 문구를 보면, 이 문구 바로 뒤에 내 코드 'from food_orders where restaurant_name LIKE "%RED%" at line 2에 오류가 있다고 한다.

아니 내가 그렇게 틀린 코드를 많이 썼다고..? 라고 좀 자세히 보면, 첫번째 줄에 restaurant_name 뒤에 콤마를 붙인걸 확인할 수 있는 것처럼 말이다.

 

콤마를 없애면 정상적으로 코드가 돌아간다.

 

2주차에는 더 자세한 상황에 대비해서 Query를 작성하는 법을 알아보자!