수리통계 분석 코딩 실습

[기본 문법] Select - =, !=, in, not in ,like, where 본문

코딩테스트/SQL

[기본 문법] Select - =, !=, in, not in ,like, where

얼려먹는 요구르트 2025. 1. 3. 12:50
✔️ SQL의 테이블 정보를 불러오는 select를 알아보자 !


[process]

[주석달기] - [select와 기본 문법] -[참고 사이트]

 

 

 

1. 주석달기

 

SQL에서 주석을 다는 방법은 ctrl + / 혹은 /* */를 사용하면 된다. (맥의 경우 command + /)

/* SELECT *
FROM 테이블명 */

처럼 전체 주석을 넣어줘도 되고 드래그해서 ctrl + /를 사용해도 된다.

 

2. select

 

SQL에서 연결된 데이터베이스 테이블을 가져오기 위한 기본 문법은 select 이다.

아래와 같이 from 뒤에 나오는 테이블 명에서 데이터를 추출한다.

 

limit의 경우 테이블의 사이즈가 너무 크면 테이블 값이 갖고있는 열의 이름과 같이 정보를 파악하기 어려우므로 몇개의 행을 잘라서 확인하고자 할 때 사용된다.

SELECT * 
FROM 테이블 명 


LIMIT 보고싶은 행의 수 --ex LIMIT 10개의 행을 보기 --

 

 

 

그렇다면 특정 데이터를 추출하는 것은 어떻게 할까?

조건을 달기 위한 SQL의 기본 구조는 WHERE이 첨가된 형태이다.

보통 WHERE + 조건을 붙이는 데,

SELECT 컬럼명
    FROM 테이블명
    WHERE 조건

의 형태를 띈다고 할 수 있다.

이때, WHERE 자리에 어떤 조건이 오냐? 각 컬럼에 대해 조건을 부여하면 된다. 

 

 

2.1  =  vs != ↔︎ <> 

예를 들어 한 컬럼에 대해 일치하는 조건/ 일치하지 않는 조건을 만족하는 행을 찾아보자

 

아래 화면은 프로그래머스 코딩테스트 창 (서울 ,링크)을 이용해 문제와 상관없이 만족하는 행을 추출하는 연습을 하고 있다. 

REST_INFO라는 아래와 같은 테이블이 있다고 했을 때, REST_INFO의 테이블을 이용해서 연습을 하고자 한다. 

 

이렇게 하는 이유는 원래 SQL을 깔아서 연습해야 하지만 어차피 코테용으로 연습하는 거라, 프로그램을 깔기보다 코테 안의 적당한 테이블을 골라 연습하기로 했다.

 

여기서 FOOD_TYPE 은 음식 종류인 것 같은데 '한식'에 해당하는 행을 추출하기 위해선 

SELECT * 
FROM REST_INFO
WHERE FOOD_TYPE = '한식'

 

를 하면 된다. 

결과

 

!=의 경우 일치하지 않는 행을 추출하는 것이고 

SELECT * 
FROM REST_INFO
WHERE FOOD_TYPE != '한식'

를 하면 한식이 아닌 다른 행들이 추출되는 것을 알 수 있다.

 

 

 

2.2 IN  vs NOT IN

 

그렇다면 여러 종류를 한번에 조회하고 싶으면 어떻게 해야할까?

다시말해, 한식, 중식에 해당하는 행을 보기 위해선?

 

그럴땐 IN을 쓰면 된다.

SELECT *
FROM REST_INFO
WHERE 'FOOD_TYPE' IN ('한식','중식')

 

 

2.3 like % 와 _

 

like의 경우 해당 컬럼의 특정 문자가 포함되어있는 행을 추출하고 싶을 때 사용되는 문법이다!

 

다시말해 like의 경우 문자열에 대해 검색하되, 쓰임에 따라 '%'와 '_' 를 이용해 문자열을 검색할 수 있다. 

  문법 예시
% 특정 문자를 포함해서 모두 검색 - 한%     : '한'으로 시작하는 모든 문자열 
- %한     : '한'으로 끝나는 모든 문자열
- %한%  : '한'을 포함하는 모든 문자열
_ 특정 문자 기준 한글자 검색 - 한_      : '한'으로 시작하는 두글자 ex 한자 
- _한      : '한'으로 끝나는 두글자    ex 극한
- _한_    : '한'을 가운데로 하는 세글자 ex 극한의

 

 

 

예를 들어, 중구 근처에 있는 식당을 찾고 싶으면 ADDRESS에서 중구라는 이름이 포함되어 있는 지를 이용해서 식당이 무엇이 있는 지 살펴봐야한다.

다시말해, 

SELECT * 
FROM REST_INFO
WHERE ADDRESS like '%중구%'

를 이용하면 아래와 같이 ADDRESS 안에 중구라는 글자가 포함되어 있는 모든 행이 다 추출됨을 알 수 있다. 

 

 

또, '%민_'으로 검색할 경우 '대한민국'과 같이 글자도 검색되며 목적에 따라 

특정글자 뒤 한글자를 검색하고 싶으면 '_'를 사용하고 포함해서 검색하고 싶으면 '%'를 쓰면 된다.

 

그런데, %가 어차피 _를 포함하므로 대부분 %를 사용하면 '_'의 검색도 같이 되는 것 같다.

 

📌 유의사항

그렇다면 '_' /'%' 가 포함된 글자를 검색하고 싶으면 어떻게 할까? 구분자로 '_'를 쓸 수도 있고 비율의 경우 '%'를 쓸 수도 있는데 like를 사용하면 '_' 와 '%'의 쓰임이 문자열 그대로 인식되지 않기 때문이다. 

 

그럴땐 ESCAPE을 사용해 해당 특수기호를 문자열로 인식하게 바꾸어주어야한다. 

다시말해, 아래와 같은 테이블이 있다고 가정하자

 

 

 

 

우리의 목표가 '_'를 포함하는 행을 찾고 싶다면, 다시말해 'A_B'와 같은 행을 찾고 싶다면 기존 문법인

SELECT * 
FROM employees 
WHERE name LIKE '%_%'

를 사용할 수 없다. 이 경우  'A1B' 'ACB'를 포함하는 행이 추출될 것이기 때문이다. 따라서 '_'를 문법으로 인식시켜주기 위해 

 

$를 걸고 ESCAPE $를 사용해야한다. 

SELECT * 
FROM employees 
WHERE name LIKE '%$_%' ESCAPE '$';

 

 

또, 만약 비율에 해당하는 100% 와같은 문자열이 포함된 행을 추출하고 싶다면 

SELECT * 
FROM 테이블명
WHERE 컬럼명 like '%$%' ESCAPE '$' -- 100% 와 같은 문자 추출

 

$의 경우 기존 특수기호를 대체하는 단어이기 때문에 검색할 때 유의해서 적용하면 특수기호가 포함된 문자를 추출하기에 용이하다. 

!, #을 쓸 때도 있음.

 

 

2.3.1 regexp '조건1|조건2'

 

여러개의 문자 조건을 추출하고 싶으면 regexp를 사용하면 된다. 

주소(ADDRESS)에 경기나 중구가 들어가 있는 모든 행을 추출한다. 

SELECT *
FROM REST_INFO
WHERE ADDRESS regexp '경기|중구'

 

 

2.4 CASE WHEN 조건 THEN 

 

SELECT를 할 때 모든 열을 추출하는 일은 거의 없다. 

보통 특정 열의 특정 조건을 걸어 보고 싶을 것!

여기선 VIEW의 열에 맞춰서 조회수가 어느정도 넘으면 얼만큼인지를 확인할 수 있다. 

 

이런식을 CASE WHEN 조건 만족시 THEN 값의 형식으로 쓰면 된다. 

 

SELECT VIEWS, 
    CASE WHEN VIEWS > 700 THEN '700이상'
    END AS 'VIEWS2', 
    REST_NAME

FROM REST_INFO
WHERE REST_NAME like '은%'

 

 

여러 컬럼을 보고 싶으면 SELECT 뒤에 쉼표(,)를 이용해서 한번에 볼 수 있다. 

 

3. 참고사이트

SQL의 문법과 형태를 알기 위해선 해당 문법과 사용 예제를 알려주는 사이트를 보면 좋다.

tech on the Net(링크) 이란 사이트에 SQL 문법에 대해 잘 적혀있는 것 같아 추천하고자 한다. 

 

 

'코딩테스트 > SQL' 카테고리의 다른 글

[프로그래머스] Select  (0) 2025.01.03