[DATABASE] SELECT, FROM 그리고 WHERE의 사용

Uhan33·2023년 12월 26일
0

TIL

목록 보기
3/72

DATABASE

데이터베이스는 쉽게 말하면 '데이터가 저장되어있는 큰 폴더' 라고 생각하면 된다.
데이터베이스 안에는 여러 데이터들이 테이블 별로 나뉘어져 있고, 우리는 테이블을 골라 원하는 데이터를 뽑아낸다.

그러기 위해 우리는 SQL이라는 언어를 사용한다.
데이터베이스를 동작하기 위한 언어로, 특정 요청을 SQL을 통해 질의하게 되는데 이를 Query문이라고 칭한다.

  • SQL(Structured Query Language) : 데이터베이스에 정보를 저장하고 처리하기 위한 언어

  • Query문 : 데이터베이스에 정보를 요청하는 행위

SQL

SQL에는 기본 문법이 있다.
크게 나눠보자면 CREATE, SELECT, UPDATE, DELETE 로 생성, 조회, 수정, 삭제인데
이런 기본적인 기능들을 총칭하여 CRUD라고한다 (CREATE, READ, UPDATE, DELECT)

오늘은 SELECT 그것도 가볍게 몇가지만 짚어보도록 하자.


SELECT

기초적이면서 가장 많이 사용되는 구문이다.
기본적인 문법으로는 아래와 같다.

SELECT 컬럼명 FROM 테이블 [WHERE 조건 GROUP BY 그룹화할 컬럼명 HAVING 그룹화 조건 ORDER BY 정렬할 컬럼명 (ASC | DESC)]

WHERE 부터는 생략이 가능하다.
하지만 원하는 데이터를 조회하기 위해선 생략 가능한 조건식들을 사용할 수 밖에 없다.

SELECT로 조회하고 싶은 데이터를 선택한다.
테이블 내 모든 컬럼을 보고싶다면 컬럼명 자리에 *을 입력해주고,
특정 컬럼을 보고 싶다면 해당 컬럼명을 입력해준다.
물론 여러 개의 컬럼을 입력해주는 것도 가능하다.

그 후엔 FROM으로 조회할 테이블을 입력해준다.

// 멤버 테이블에서 이름과 나이를 조회.
SELECT name, age
FROM member

기본은 끝났다. 이번엔 여러 조건을 알아보자.

WHERE

WHERE은 조회할 데이터에 조건을 걸어주는 테이블 필터링의 역할이라고 보면 된다.
기본적으로 부등호를 사용하여 비교해주는 방법이 있다.

비교연산자의미예시
=같다age = 21
!= or <>같지 않다 (다르다)age != 21, name <> '철수'
>크다age > 21
>=크거나 같다age >= 21
<작다age < 21
<=작거나 같다age <= 21

추가적으로 다양한 조건의 종류도 있다.

BETWEEN : A와 B 사이
기본 문법으로 컬럼명 BETWEEN A AND B 라고 사용하며
A와 B 사이에 있는 데이터를 말한다.

ex) WHERE age BETWEEN 10 AND 20 // 나이가 10살 ~ 20살 사이


IN : 포함 조건
기본 문법으로 IN (A, B, C, ...) 로 사용한다.
IN 안에 들어있는 내용이 포함된 데이터를 말한다.

ex) WHERE IN (29, 39, 49) // 나이가 29세, 39세, 49세인 슬픈사람들


LIKE : 특정 문자가 포함된 값을 찾는 조건
기본 문법은 세 가지의 경우로 나뉘는데

  • 특정 문자로 시작하는 경우 LIKE '문자%'
  • 특정 문자를 포함하는 경우 LIKE '%문자%'
  • 특정 문자로 끝나는 경우 LIKE '%문자'

ex) WHERE name LIKE '엄%' // 성이 엄으로 시작하는 사람 이름


여러 개의 조건을 함께 사용할 수도 있다.

논리연산자의미예시
AND그리고age >= 20 AND name LIKE '김%' ---> 20세 이상의 김씨 성을 가진 사람
OR또는age >= 20 OR age < 40 ---> 20~30대
NOT아닌NOT NAME = '김철수' ---> 김철수 빼고

WHERE 까지만 했는데 꽤 여러개를 다룬 것 같다. GROUP BY HAVING, ORDER BY는 다음 시간에 다루도록 하겠다.

(스포 : GROUP BY와 HAVING 사이에 쉼표가 없는 이유가 있다.)


마치며

SQL은 결국 저런 기본적인 문법으로
얼마나 효율적인 쿼리문을 작성하는지가 포인트인 것 같다.
1만개의 데이터에서 10개를 찾는데 1만개 하나하나씩 찾는다면 너무 비효율적이지 않을까?
적절한 조건문을 사용하여 효과적인 쿼리문을 만들 수 있도록 열심히 공부해야겠다.

0개의 댓글