2020. 6. 20. 01:40ㆍBACKEND/Database
안녕하세요.
지난 포스팅에서DML이 무엇인지, SELECT, INSERT, UPDATE, DELETE에 대해 알아보았습니다.
이번에는 SELECT문에 대한 다양한 필터링을 알아보도록 하겠습니다.
***************** INDEX *****************
[ 1장 ]
1. 조건 & 관계 연산자
2. BETWEEN...AND
3. IN
4. LIKE
[ 2장 ]
5. GROUP BY - HAVING
6. ORDER BY
7. DISTINCT
8. LIMIT
********************************************
지난 포스팅에서 SELECT문을 소개했습니다.
다시 한 번 볼까요❓
SELECT <select_columns>
FROM <table>
[ WHERE condition ]
[ GROUP BY <column_name | expr | position> ]
[ HAVING condition ]
[ ORDER BY <column_name | expr | position> ];
위와 같은 모습이었던 것, 기억하시나요❓
사실 SELECT ... FROM ... WHERE 만 기억하시는 분들이 더 많을 것 같아요.
가장 자주 사용하는 키워드이기 때문이죠.
오늘은 WHERE절에서 사용할 수 있는 조건문, GROUP BY - HAVING 절과 ORDER BY에 대해 알아볼 예정입니다.
첫 번째, 조건 & 관계 연산자
조건을 걸고 검색을 할 때, 조금 더 정확한 데이터를 뽑고 싶을 때가 있습니다.
그럴 때, 조건 & 관계 연산자를 사용하게 되는데요.
함께 살펴보도록 하겠습니다 〰️
✔️ 조건 연산자
조건 연산자는 =,<,>,<=,>=,<>,!=등이 있는데요.
위의 [TEST DATA 1] 를 사용해서 테스트 해볼까요❓
지금부터 나이가 37세 이상인 사람을 추출해봅시다 〰️
SELECT * FROM user WHERE age >= 37;
위와 같이 입력하면 어떻게 될까요❓
간단하죠 〰️
조건 연산자는 모두 어렵지 않게 사용할 것 같아요.
✔️ 관계 연산자
그럼 이번엔 관계 연산자를 알아볼까요❓
관계 연산자에는 NOT,AND,OR등이 있습니다.
먼저 OR를 사용해볼까요❓
짧게 설명을 드리자면, 나이가 20세 미만이거나 37살 초과인 사람의 데이터를 뽑아내는 쿼리입니다.
SELECT * FROM user WHERE age > 37 OR age < 20;
위와 같은 쿼리문을 실행시키면 어떤 결과를 얻을 수 있을까요❓
아래와 같은 결과를 얻을 수 있습니다.
AND는 OR과 비슷하게 사용하면 돼서 별로 어려운 점은 없을 것 같아요.
자, 이번에는 관계 연산자 중에 NOT을 한 번 사용해볼까요❓
NOT은 조건 앞에 붙어 키워드 그대로 조건에 반하는 데이터를 뽑습니다.
아래는 나이가 39세가 아닌 사람들의 데이터를 뽑는 쿼리입니다.
SELECT * FROM user WHERE NOT age = 39;
위와 같은 쿼리를 실행하면 어떤 결과값이 나올까요❓
보면 id가 8인 데이터를 필터링해서 보여줍니다.
마지막으로 AND 연산자가 있을텐데요.
AND 연산자는 키워드가 알려주는대로 '~이고' 라는 뜻을 가지죠.
이번에는 조건 연산자나 관계 연산자 이외의 연산자를 알아보고자 합니다.
BETWEEN... AND 과 IN 연산자, 그리고 LIKE 연산자가 있습니다.
두 번째, BETWEEN...AND
먼저 BETWEEN...AND 연산자부터 보도록 할까요❓
BETWEEN...AND 는 데이터가 숫자로 구성되어 있어 연속적인 값 검색합니다.
[TEST DATA 1] 에서 나이가 20살 이상부터 30살 이하인 사람들을 한 번 추출해볼까요❓
SELECT * FROM MOCK_DATA WHERE age BETWEEN 20 AND 30;
이런 모양으로 보여집니다. WHERE 조건절에 적용시킬 column을 적고 숫자의 범위를 적어주죠.
그럼 아래와 같은 결과값을 보여줄 수 있습니다.
세 번째, IN 연산자
이 번엔 IN 연산자를 알아보겠습니다.
IN 연산자는 이산적인Discrete값 검색합니다.
WHERE 문의 긴 OR를 대체할 수 있죠.
데이터를 조금 추가해서 테스트를 해보겠습니다.
user 데이터에 user가 속한 국가 코드를 포함해보도록 하겠습니다.
[TEST DATA 2] 에서 국적이 한국인 사람(KO)과 미국(US)인 사람을 골라내고 싶으면 어떻게 해야할까요❓
SELECT * FROM user WHERE country_code IN ("KO", "US");
/* AND를 사용했을 경우
SELECT * FROM user WHERE country_code = "KO" OR country_code = "US";
*/
위와 같이 특정 문자열이나 숫자만을 뽑아오고 싶을 때 사용할 수 있습니다.
조건이 많아지면 OR로는 길고 중복되는 스트링을 확인할 수 있습니다.
위의 쿼리문은 아래와 같은 결과값을 갖습니다.
country_code가 KO와 US인 데이터만 출력된 것을 확인하셨나요❓
네 번째, LIKE 연산자
이 번엔 LIKE 연산자를 알아보겠습니다.
LIKE 연산자는 조건을 가지고 유연하게 문자열의 내용 검색할 수 있습니다.
만약, 검색하고자 하는 문자열의 한 글자만 무관하게 검색하고 싶다면 ' _ ' 기호를 사용하면 됩니다.
예를 들어 한국인의 이름들 중에서 성과는 상관없이 '태현' 이라는 이름을 가진 사람을 검색하고 싶을 때 적절하죠
SELECT * FROM user WHERE name LIKE "_태현";
예를 들면 위와 같겠죠❓
혹은, 여러 문자열을 무시하고 검색하고 싶을 때엔 어떻게 해야할까요❓
이번엔 반대로 이름과는 상관없이 '박'씨 성을 가진 사람을 검색하고 싶을 때 어떻게 해야할까요❓
SELECT * FROM user WHERE name LIKE "박%";
위와 같이 입력하면 이름의 길이와 값에 상관없이 박씨 성을 가진 모든 사람을 검색해냅니다.
추가로, [TEST DATA 2] 에서 연습해봅시다.
이번에는 user 데이터 중에서 도메인이 .net으로 끝나는 사용자들을 검색해보겠습니다.
SELECT * FROM user WHERE email LIKE "%net";
위와 같은 쿼리문을 실행하면 아래와 같은 결과값을 얻을 수 있습니다.
많은 곳에 도움이 되겠죠 〰️
오늘은 정말 간단한 연산자들을 확인해보았습니다.
한 번 알아두면 그 때 그 때 찾아볼 수 있어서 일단 알아두면 큰 도움이 될 것 같아요 ❗️
'BACKEND > Database' 카테고리의 다른 글
ERD, 어렵지 않게 만들기 (12) | 2020.06.26 |
---|---|
SQL SELECT, 제대로 사용하기 (0) | 2020.06.23 |
정규화, 어렵지 않게 시작하기 (6) | 2020.06.15 |
SQL, 어렵지 않게 사용하기 - Constaint (0) | 2020.05.11 |
SQL, 어렵지 않게 사용하기 - DML (0) | 2020.05.10 |
Backend Software Engineer
𝐒𝐮𝐧 · 𝙂𝙮𝙚𝙤𝙣𝙜𝙨𝙪𝙣 𝙋𝙖𝙧𝙠