DB/SQL

CRUD와 다양한 SELECT 검색조건에 대해서 자세하게 알아봅시다![DISTINCT, LIKE, IN, BETWEEN 등]

세기루민 2021. 7. 21. 23:23
728x90

예전에 취준생을 하면서 최종면접 때 받았던 질문이 하나 있었다.

"혹시 CRUD에 대해서 잘 다룰 줄 아는지?"

그때는 무조건 잘 다룬다고 자만했었고 CRUD쯤이야 뭐가 어렵겠어 라는 생각이였다.

그렇지만 현실은 CRUD를 접근하는 것은 쉽지만 생각보다 논리구조에 많이 걸리게 된다.

그러면 오늘 CRUD에 대해서 간단히 알아보도록 하자 

"실습은 임시로 만든 airtest라는 임시로 만든 데이터베이스로 진행하겠습니다." 


1. CRUD란?

"생성, 읽기, 변경, 삭제를 통칭하는 말로 기본적인 데이터 처리에 사용된다"

CRUD의 경우 웹 개발에서 예를 들어보면 

DB에 있는 값을 생성하거나 가져오거나 변경하거나 삭제하는 과정들을 CRUD라고 하고 

이를 쿼리로 보면 Select, Insert, Update, Delete를 말할 수 있다. 


  • Select 구문 

- Select 구문은 쿼리에서 기본적으로 사용되며 원하는 데이터를 검색하는데 사용된다. 

SELECT	열이름
FROM	테이블 명
WHERE	조건
(ORDER / GROUP) BY 열이름

위와 같은 형식으로 사용되기도 합니다. 

 

실습은 임시로 만든 airtest라는 데이터베이스로 진행하겠습니다. 

use airtest

SELECT * 
FROM seat;

 

가장 기본적으로 사용되는 쿼리는 위와 같습니다. 

여기서 "*"은 모든 열 값을 검색해오라는 의미를 가지지만 

실제로 "*"로 사용하는 것보다 실제 컬럼을 입력하는 것을 추천드립니다

 

 

  •  DISTINCT
SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE;

 

여기서 DISTINCT란 중복 된 값이 존재할 때 1개만 출력해줍니다. 

 

  • LIKE
SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE
WHERE AIRLINENAME LIKE '대%';

LIKE란 같은 값을 모두 가져오는 것을 말합니다. 

여기서 %를 이용하여 "대"로 시작하는 모든 값을 출력해올 수 있습니다. 

  • BETWEEN
SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE
WHERE STIME BETWEEN '06:40' AND '10:00';

BETWEEN이란 연속된 값을 검색하는데 자주 사용됩니다.

따라서 날짜를 검색하거나 시간을 검색할 때 자주 사용되며 

BETWEEN을 위와 같이 사용했을 경우 시작시간이 6:40분에서 10:00 사이의 값을 검색해올 수 있습니다.

 

  • IN
SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE
WHERE STIME IN ('06:40', '10:05');

IN이란 WHERE 조건에서 하나의 열에서 다수의 검색 조건이 필요할 때 사용합니다.

예를 들어서 BETWEEN은 사이의 모든 값을 검색하지만 

IN은 해당 6:40분과 10:05분에 대한 값들만 검색해옵니다. 

즉 IN은 이산적인 값을 검색하기 위해서 사용됩니다.

 

  • ORDER BY 
SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE
WHERE STIME IN ('06:40', '10:05')
ORDER BY FTIME;

ORDER BY는 결과물에 영향을 미치지는 않지만 출력되는 순서를 정렬해줍니다. 

ORDER BY와 GROUP BY는 추후에 따로 다루겠습니다. 

  • LIMIT 
SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE
WHERE STIME IN ('06:40', '10:05')
ORDER BY FTIME
LIMIT 1;

LIMIT는 출력 개수를 제한하기 위해서 사용된다. 

SELECT DISTINCT 
ROUTENO, AIRLINENAME, STARTPOINT, FINISHPOINT, STIME, FTIME, MIDDLEPOINT, AIRPORTNO
FROM ROUTE
WHERE STIME IN ('06:40', '10:05')
ORDER BY FTIME
LIMIT 1, 3;

 

LIMIT는 위와 같이 사용한 경우 3개를 출력할 수 있다. 


이번 포스팅은 SELECT 구문에서 자주 사용되는 것들을 위주로 다뤄봤습니다.

다음 포스팅에서는 집계함수와 ROLLUP에 대해서 다시 다루도록 해보겠습니다. 

다음에는 더 유익한 정보로 찾아오겠습니다.

728x90