728x90
앞에서는 조회와 정렬에 대해서 볼 수 있었다. 이번엔 데이터를 필터링하여 중복 제거, 조건 설정 등 쿼리를 제어해보자.
- Clause
- SELECT DISTINCT
- WHERE
- LIMIT
- Operator
- LIKE
- IN
- BETWEEN
목차
- SELECT DISTINCT
- WHERE clause
- LIKE Operator
- IN Operator
- BETWEEN Operator
- LIMIT clause
1. SELECT DISTINCT clause
SELECT DISTINCT select_list FROM table_name;
- "Remove duplicate rows in the result"
- 조회 결과에서 중복된 행을 제거
- DISTINCT 절은 SELECT에서 선택적으로 사용할 수 있는 절
- 문법 규칙
- DISTINCT 절은 SELECT 키워드 바로 뒤에 나타나야 함
- 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)를 제공
- % (percent)
- 0개 이상의 문자가 올 수 있음을 의미
- _ (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 |