[SQL 강의] 2강/3강 제약 조건이 있는 쿼리
★ 본 튜토리얼은 SQLBolt를 한국어로 번역하여 작성된 강의입니다, 기계번역을 사용하여 오역이 있을 수 있습니다. 중간중간에 제가 직접 적은 내용도 있어서 100% 동일하지는 않습니다
출처: https://sqlbolt.com
이제 테이블에서 특정 열의 데이터를 선택하는 방법을 알았지만, 1억 행의 데이터가 있는 테이블이 있다면 모든 행을 읽는 것은 비효율적이며 아마도 불가능할 것입니다.
특정 결과를 반환되지 않도록 필터링하려면 쿼리에서 WHERE 절을 사용해야 합니다. 이 절은 특정 열 값을 확인하여 결과에 포함해야 하는지 여부를 결정함으로써 데이터의 각 행에 적용됩니다.
제약 조건이 있는 Select 쿼리
SELECT column, another_column, ...
FROM mytable
WHERE condition
AND/OR another_condition
AND/OR ...;
더 복잡한 절은 수많은 AND 또는 OR 논리 키워드(예: num_wheels >= 4 AND doors <= 2)를 결합하여 구성할 수 있습니다. 아래는 숫자 데이터(예: 정수 또는 부동 소수점)에 사용할 수 있는 유용한 연산자입니다.
연산자 | 조건 | SQL 예제 |
---|---|---|
=, !=, <, <=, >, >= | 표준 숫자 연산자 | col_name != 4 |
BETWEEN ... AND ... | 두 값의 범위 내에 있는 숫자 (양쪽 포함) | col_name BETWEEN 1.5 AND 10.5 |
NOT BETWEEN ... AND ... | 두 값의 범위 내에 있지 않은 숫자 (양쪽 포함) | col_name NOT BETWEEN 1 AND 10 |
IN (...) | 목록에 있는 숫자 | col_name IN (2, 4, 6) |
NOT IN (...) | 목록에 없는 숫자 | col_name NOT IN (1, 3, 5) |
반환되는 행 집합을 제한하는 절을 작성하면 결과를 더 쉽게 이해할 수 있을 뿐만 아니라 불필요한 데이터 반환 감소로 인해 쿼리 실행 속도도 빨라집니다.
알고 계셨나요?
이제 눈치챘을 수도 있지만, SQL은 키워드를 모두 대문자로 작성하도록 요구하지 않습니다. 하지만 관례적으로 이렇게 하면 사람들이 SQL 키워드와 열 및 테이블 이름을 구별하는 데 도움이 되며 쿼리를 더 쉽게 읽을 수 있습니다.
연습
아래 각 작업에 대해 Movies 테이블에서 필요한 정보를 올바른 제약 조건을 사용하여 찾으세요.
연습은 이 웹사이트에 가서 해주세요: https://sqlbolt.com/lesson/select_queries_with_constraints
SQLBolt - Learn SQL - SQL Lesson 2: Queries with constraints (Pt. 1)
SQL Lesson 2: Queries with constraints (Pt. 1) Now we know how to select for specific columns of data from a table, but if you had a table with a hundred million rows of data, reading through all the rows would be inefficient and perhaps even impossible. I
sqlbolt.com
Part 2
텍스트 데이터가 포함된 열과 함께 WHERE 절을 작성할 때 SQL은 대소문자를 구분하지 않는 문자열 비교 및 와일드카드 패턴 매칭과 같은 작업을 수행하는 데 유용한 여러 연산자를 지원합니다. 아래는 몇 가지 일반적인 텍스트 데이터 특정 연산자를 보여줍니다.
연산자 | 조건 | 예제 |
---|---|---|
= | 대소문자 구분 정확한 문자열 비교 (단일 동등에 유의) | col_name = "abc" |
!= 또는 <> | 대소문자 구분 정확한 문자열 불평등 비교 | col_name != "abcd" |
LIKE | 대소문자 구분하지 않는 정확한 문자열 비교 | col_name LIKE "ABC" |
NOT LIKE | 대소문자 구분하지 않는 정확한 문자열 불평등 비교 | col_name NOT LIKE "ABCD" |
% | 문자열의 어느 곳에서도 0개 이상의 문자 시퀀스와 일치 (LIKE 또는 NOT LIKE와 함께 사용) | col_name LIKE "%AT%" ("AT", "ATTIC", "CAT", "BATS"와 일치) |
_ | 문자열의 어느 곳에서도 단일 문자와 일치 (LIKE 또는 NOT LIKE와 함께만 사용) | col_name LIKE "AN_" ("AND"와 일치, "AN"은 아님) |
IN (...) | 문자열의 목록에 존재 | col_name IN ("A", "B", "C") |
NOT IN (...) | 문자열의 목록에 존재하지 않음 | col_name NOT IN ("D", "E", "F") |
알고 계셨나요?
모든 문자열은 따옴표로 묶어야 쿼리 파서가 문자열의 단어를 SQL 키워드와 구별할 수 있습니다.
대부분의 데이터베이스 구현은 이러한 연산자를 사용할 때 매우 효율적이지만, 전문 검색은 Apache Lucene 또는 Sphinx와 같은 전용 라이브러리에 맡기는 것이 가장 좋습니다. 이러한 라이브러리는 전문 검색을 수행하도록 특별히 설계되었으므로 더 효율적이며 국제화 및 고급 쿼리를 포함한 더 다양한 검색 기능을 지원할 수 있습니다.
연습
다시 WHERE 절이 있는 쿼리 정의가 있습니다. 위 연산자를 사용하여 쿼리를 작성하고 아래 작업에서 필요한 정보로 결과를 제한해 보세요.
제약 조건이 있는 Select 쿼리
SELECT column, another_column, ...
FROM mytable
WHERE condition
AND/OR another_condition
AND/OR ...;
연습문제
아래 링크에서 풀어주시면 됩니다
https://sqlbolt.com/lesson/select_queries_with_constraints_pt_2
마지막 문제4번이 헷갈려서 제 솔루션 제공합니다
SELECT *
FROM Movies
WHERE Title LIKE 'WALL-%';