logo
Search검색어를 포함하는 게시물들이 최신순으로 표시됩니다.
    Table of Contents
    [SQL] WHERE와 LIKE : 조회의 필터링

    이미지 보기

    [SQL] WHERE와 LIKE : 조회의 필터링

    • 22.03.14 작성

    • 읽는 데 4

    TOC

    WHERE 절

    • SELECT, DELETE 등의 작업에서 필터링
    • 여러 조건인 경우 AND 연산자로 연결
    -- 일반 조회
    SELECT * FROM users;
    
    -- 나이가 30세 이상인 사람 조회
    SELECT * FROM users WHERE age >= 30;
    
    -- 나이가 30세 이상인 사람의 first_name 조회
    SELECT first_name FROM users WHERE age >= 30;
    
    -- 나이가 30세 이상이고 김씨인 사람들의 나이와 first_name 조회
    SELECT age, first_name FROM users
    WHERE age >= 30 AND last_name = '김';
    

    집계 함수 : Aggregate function

    • SELECT 구문에서만 사용

    종류

    COUNT()

    • 그룹의 항목 수
    SELECT COUNT(*) FROM users;
    

    SUM() / AVG()

    • 모든 값의 합계/평균 계산

    MAX() / MIN()

    • 그룹의 모든 값의 최대/최솟값

    SELECT SUM(col) FROM [table_name];
    SELECT AVG(col) FROM [table_name];
    SELECT MAX(col) FROM [table_name];
    SELECT MIN(col) FROM [table_name];
    

    위의 함수들은 해당 컬럼(col)이 INTEGER인 경우에만 사용 가능


    함수 사용 예시

    30세 이상인 사람들의 평균 나이

    SELECT AVG(age) FROM users WHERE age>=30;
    

    계좌 잔액(balance)이 가장 높은 사람과 그 액수 조회

    SELECT first_name, MAX(balance) FROM users;
    

    balance가 가장 높은 record의 정보를 WHERE 조건절 없이 조회 가능


    나이가 30 이상인 사람의 계좌 잔액 평균

    SELECT AVG(balance) FROM users WHERE age>=30;
    

    LIKE

    • 패턴 일치를 기반으로 데이터를 조회
    • SQLite는 패턴 구성을 위한 2개의 wildcards 제공
    • whilecard : '%', '_'

    whildcard

    • 구체적인 이름 대신에 여러 파일을 동시에 지정할 목적으로 사용하는 특수 기호
    • 특정한 패턴이 있는 문자열 혹은 파일 탐색, 긴 이름 생략 시 사용
    • 텍스트 값에서 알 수 없는 문자를 사용할 수 있도록 한다.
    • 지정된 패턴 일치를 기반으로 데이터를 수집하는 데 도움

    % (percent sign)

    • 0개 이상의 문자
    • 이 자리에 문자열이 있을 수도, 없을 수도 있다.

    _ (underscore | underbar)

    • 임의의 단일 문자
    • 이 자리에 반드시 단 하나의 문자가 존재

    wildcard pattern 예시

    2%            : 2로 시작함
    %2            : 2로 끝남
    %2%           : 2를 포함
    _2%           : 아무 값이 하나 있고, 두 번째가 2로 시작
    1___          : 1로 시작하고 총 4자리
    2_%_% / 2__%  : 2로 시작하고, 적어도 3자리
    

    SQLite에서 wildcards의 사용 예시

    문법

    SELECT * FROM [table_name] WHERE col LIKE '와일드카드패턴';
    

    users 테이블에서 나이가 20대인 사람

    SELECT * FROM users WHERE age LIKE '2_';
    

    users 테이블에서 지역 번호가 02인 사람

    SELECT * FROM users WHERE phone LIKE '02-%';
    

    wildcard pattern을 '02%'로 하면 023 지역번호도 포함되므로 범위를 정확히 할 필요가 있다.


    users 테이블에서 이름이 '준'으로 끝나는 사람

    SELECT * FROM users WHERE first_name LIKE '%준';
    

    users 테이블에서 중간 번호가 5114인 사람

    SELECT * FROM users WHERE phone LIKE '%-5114-%';
    
    profile

    FE Developer 박승훈

    노력하는 자는 즐기는 자를 이길 수 없다