728x90

앞에서는 조회와 정렬에 대해서 볼 수 있었다. 이번엔 데이터를 필터링하여 중복 제거, 조건 설정 등 쿼리를 제어해보자.

  • Clause
    1. SELECT DISTINCT
    2. WHERE
    3. LIMIT
  • Operator
    1. LIKE
    2. IN
    3. BETWEEN

 

목차

  1. SELECT DISTINCT
  2. WHERE clause
  3. LIKE Operator
  4. IN Operator
  5. BETWEEN Operator
  6. LIMIT clause

 

1. SELECT DISTINCT clause

 

SELECT DISTINCT select_list FROM table_name;
  • "Remove duplicate rows in the result"
  • 조회 결과에서 중복된 행을 제거
  • DISTINCT 절은 SELECT에서 선택적으로 사용할 수 있는 절
  • 문법 규칙
    1. DISTINCT 절은 SELECT 키워드 바로 뒤에 나타나야 함
    2. DISTINCT 키워드 뒤에 컬럼 또는 컬럼 목록을 작성

 

모든 지역 조회하기

 

SELECT country FROM users;

 

중복없이 모든 지역 조회하기
SELECT DISTINCT country FROM users;

 

지역 순으로 오름차순 정렬하여 중복 없이 모든 지역 조회
SELECT DISTINCT country FROM users ORDER BY country;

 

이름과 지역이 중복 없이 모든 이름과 지역 조회하기
SELECT DISTINCT first_name, country FROM users;
  • 각 컬럼의 중복을 따로 계산하는 것이 아니라 두 컬럼을 하나의 집합으로 보고 중복을 제거

 

※ 참고 - NULL with DISTINCT

  • SQLite는 NULL 값을 중복으로 간주
  • NULL 값이 있는 컬럼에 DISTINCT 절을 사용하면 SQLite는 NULL 값의 한 행을 유지

2. WHERE clause

SELECT column_list FROM table_name
WHERE search_condition;

 

  • "Specify the search condition for rows returned by the query"
  • 조회 시 특정 검색 조건을 지정
  • WHERE 절은 SELECT 문에서 선택적으로 사용할 수 있는 절
    • SELECT 문 외에도 UPDATE 및 DELETE 문에서 WHERE 절을 사용할 수 있음
  • FROM 절 뒤에 작성

 

※ 작성 형식 

left_expression COMPARISION_OPERATOR right_expression
-- 예시

WHERE column_1 = 10
WHERE column_2 LIKE 'KO%'
WHERE column_3 IN (1,2)
WHERE column_4 BETWEEN 10 AND 20

 

SQLite comparison operators(비교 연산자)
  • 두 표현식이 동일한지 테스트
    • =
    • <> or !=
    • <
    • >
    • <=
    • >=

 

SQLite logical operators(논리 연산자)
  • 일부 표현식의 truth를 테스트할 수 있음
  • 1, 0 또는 NULL 값을 반환
  • SQLite는 Boolean 데이터 타입을 제공하지 않으므로 1은 TRUE를 의미하고 0은 FALSE를 의미
  • ALL, AND, ANY, BETWEEN, IN, LIKE, NOT, OR

 

나이가 30살 이상인 사람들의 이름, 나이, 계좌 잔고 조회하기
SELECT first_name, age, balance FROM users
WHERE age >= 30;

 

나이가 30살 이상이고 계좌 잔고가 50만원 초과인 사람들의 이름, 나이, 계좌 잔고 조회
SELECT first_name, age, balance FROM users
WHERE age >= 30 AND balance > 500000;


 

3.  LIKE operator

 

  • SQLite는 패턴 구성을 위한 두 개의 와일드카드(wildcards)를 제공

 

  1. % (percent)
    • 0개 이상의 문자가 올 수 있음을 의미
  2. _ (underscore)
    • 단일(1개) 문자가 있음을 의미

 

% wildcard 예

 

  • '영%' 패턴은 영으로 시작하는 모든 문자열과 일치 (영, 영미, 영미리 등)
  • '%도' 패턴은 도로 끝나는 모든 문자열과 일치 (도, 수도, 경기도 등)
  • '%강원%' 패턴은 강원을 포함하는 모든 문자열과 일치

 

'_' wildcard 예시

 

  • '영_' 패턴은 영으로 시작하고 총 2자리인 문자열과 일치 (영미, 영수, 영호 등)
  • '_도' 패턴은 도로 끝나고 총 2자리인 문자열과 일치 (수도, 과도 등)

 

※ 참고 - wildcards character

  • 파일을 지정할 때, 구체적인 이름 대신에 여러 파일을 동시에 지정할 목적으로 사용하는 특수 기호
    • *, ? 등
  • 주로 특정한 패턴이 있는 문자열 혹은 파일을 찾거나, 긴 이름을 생략할 때 쓰임
  • 텍스트 값에서 알 수 없는 문자를 사용할 수 있는 특수 문자로, 유사하지만 동일한 데이터가 아닌 여러 항목을 찾기에 매우 편리한 문자
  • 지정된 패턴 일치를 기반으로 데이터를 수집하는 데도 도움이 될 수 있음

 

이름에 '호'가 포함되는 사람들의 이름과 성 조회하기
SELECT first_name, last_name FROM users
WHERE first_name LIKE '%호%';

 

서울 지역 전화번호를 가진 사람들의 이름과 전화번호 조회하기
SELECT first_name, phone FROM users
WHERE phone LIKE '02-%';

 

전화번호 중간 4자리가 51로 시작하는 사람들의 이름과 전화번호 조회하기

 

SELECT first_name, phone FROM users
WHERE phone LIKE '%-51__-%

 

4. IN operator

 

  • "Determine whether a value matches any value in a list of values"
  • 값이 값 목록 결과에 있는 값과 일치하는지 확인
  • 표현식이 값 목록의 값과 일치하는지 여부에 따라 true 또는 false를 반환
  • IN 연산자의 결과를 부정하려면 NOT IN 연산자를 사용

 

경기도 혹은 강원도에 사는 사람들의 이름과 지역 조회하기
SELECT first_name, country FROM users
WHERE country IN ('경기도', '강원도');

 

  •  IN 연산자 대신 OR 연산자를 사용하여 동일한 결과 반환 가능
SELECT first_name, country FROM users
WHERE country = '경기도' OR country = '강원도';

 


5. BETWEEN operator

 

test_expression BETWEEN low_expression AND high_expression

 

  • "Test whether a value is in a range of values."
  • 값이 값 범위에 있는지 테스트
  • 값이 지정된 범위에 있으면 true를 반환
  • SELECT, DELETE, 및 UPDATE 문의 WHERE 절에서 사용할 수 있음
  • BETWEEN 연산자의 결과를 부정하려면 NOT BETWEEN 연산자를 사용

 

나이가 20살 이상, 30살 이하인 사람들의 이름과 나이 조회하기
SELECT first_name, age FROM users
WHERE age BETWEEN 20 AND 30;

 

  • AND 연산자를 사용하여 이전 쿼리와 동일한 결과를 반환 가능
SELECT first_name, age FROM users WHERE age >= 20 AND age <= 30;

 

  • 단, NOT BETWEEN의 경우 AND가 아닌 OR로 동일한 결과 반환 가능
SELECT first_name, age FROM users
WHERE age NOT BETWEEN 20 AND 30;

SELECT first_name, age FROM users WHERE age < 20 OR age > 30;

 


 

6. LIMIT clause

SELECT column_list FROM table_name LIMIT row_count;

 

  • "Constrain the number of rows returned by a query."
  • 쿼리에서 반환되는 행 수를 제한
  • SELECT 문에서 선택적으로 사용할 수 있는 절
  • row_count는 반환되는 행 수를 지정하는 양의 정수를 의미

 

첫 번째부터 열 번째 데이터까지 rowid와 이름 조회하기
SELECT rowid, first_name FROM users LIMIT 10;

 

계좌 잔고가 가장 많은 10명의 이름과 계좌 잔고 조회하기
SELECT first_name, balance FROM users
ORDER BY balance DESC LIMIT 10;

  • ORDER BY 절과 함께 사용하여 지정된 순서로 여러 행을 가져 올 수도 있음
  • LIMIT 절에 지정된 행 수를 가져오기 전에 결과를 정렬하기 때문

 


7. OFFSET keyword

  • LIMIT 절을 사용하면 첫 번째 데이터부터 지정한 수만큼의 데이터를 받아올 수 있지만,
  • OFFSET과 함께 사용하면 특정 지정된 위치에서부터 데이터를 조회할 수 있음

 

11번째부터 20번째 데이터의 rowid와 이름 조회하기
SELECT rowid, first_name FROM users
LIMIT 10 OFFSET 10;
728x90

'CS > Database with SQLite' 카테고리의 다른 글

[DB] N:1 realationship  (0) 2022.10.06
[DB] DML3 - Grouping, Changing data  (1) 2022.10.05
[DB] DML1 - simple query, Sorting rows  (0) 2022.10.05
[DB] DDL2 - ALTER, DROP TABLE  (0) 2022.10.05
[DB] DDL1 - create table  (0) 2022.10.04