07 SQLite SELECT 1
데이터 조회(Read)
테이블에 저장된 데이터를 조회하려면 SELECT 문을 사용합니다.
DB에서 정보를 읽는다는 의미입니다.
기본 형식
SELECT 다음에 테이블에서 어떤 컬럼의 값을 받아 올 것인가를 작성하고,
FROM 다음에 조회할 테이블명을 작성합니다.
SELECT 컬럼명1, 컬럼명2, ...
FROM 테이블명;
SELECT id, name, address, ph
FROM user;
특정 컬럼만 조회
SELECT 다음에 테이블에서 조회 할 컬럼명을 작성합니다.
SELECT 컬럼명1
FROM 테이블명
SELECT id, name
FROM user;
모든 컬럼 한번에 조회
컬럼명 대신에 *(별표, 와일드카드)를 작성하면 모든 컬럼명을 지정한 것과 동일한 결과를 얻을 수 있습니다.
SELECT *
FROM 테이블명
rowid 조회
rowid 같은 특별한 값은 *(별표)로 받아 올 수 없습니다.
rowid 를 더해서 받아오고 싶다면 *(별표) 에 추가함으로써 받아올 수 있습니다.
SELECT *, rowid
FROM 테이블명;
예시 정리
CREATE TABLE user (id INTEGER, name TEXT, address TEXT);
INSERT INTO user VALUES (1, 'devkuma', 'Seoul');
INSERT INTO user VALUES (2, 'kimkc', 'Busan');
INSERT INTO user VALUES (3, 'araikuma', 'Seoul');
INSERT INTO user VALUES (4, 'happykuma', 'Seoul');
INSERT INTO user VALUES (5, 'mykuma', 'Daejeon');
SELECT id, name
FROM user;
SELECT id
FROM user;
SELECT *
FROM user;
SELECT *, rowid
FROM user;
데이터 조회의 조건 설정 (WHERE 절)
SELECT 문에서 데이터를 조회할 때 조건을 지정하지 않으면 테이블에 포함된 모든 데이터를 받아 옵니다.
WHERE 절을 추가로 사용하면 조건에 일치하는 데이터만 조회 할 수 있습니다.
기본형식
WHERE 절 다음에 조건식을 작성합니다.
SELECT 컬럼명, ...
FROM 테이블명
WHERE 조건식;
비교 연산자를 사용한 조건식
WHERE 절에서 다음과 같은 비교 연산자를 사용할 수 있습니다.
비교 연산자 | 설명 |
a == b, a = b | a와 b는 같다 |
a <> b, a != b | a와 b는 같지 않다 |
a > b | a는 b보다 크다 |
a >= b | a가 b 이상이다 |
a < b | a는 b보다 작다 |
a <= b | a가 b 이하이다 |
논리 연산자를 사용한 조건식
WHERE 절에서 조건식으로 논리 연산자 AND, OR, NOT을 사용할 수 있다.
SELECT 컬럼명, ...
FROM 테이블명
WHERE 조건식1 AND 조건식 2
-- WHERE 조건식1 OR (조건식 2 AND 조건식 3)
-- WHERE NOT 조건식
IN 절을 사용한 조건식
조건식을 작성할 때 IN 절을 추가로 사용하면 컬럼의 값이 여러 값 중 하나와 일치하는지 여부를 조건식으로 작성할 수 있습니다. IN 절에 지정된 값1, 값2, …중에 어느 하나와 일치하면 데이터를 받아옵다.
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 IN (값1, 값2, ...);
SELECT *
FROM user
WHERE address IN ('Paju', 'Seongnam', 'Suwon');
응용: 비교 연산자 + 조건 연산자 + IN 절
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 IN 값1 OR 컬럼 IN 값2 AND ...;
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 NOT IN (값1, 값2, ...);
응용: 다른 테이블의 값과 비교
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 IN (SELECT 컬럼명
FROM 테이블명);
LIKE 비교
조건식을 작성할 때 LIKE 절을 사용하면 컬럼의 값에서 일부 문자열과 일치하는 값을 찾거나, 문자 개수를 조건으로 입력 할 수 있습니다.
특수문자 | 설명 | 예시 | 설명 |
% | 임의의 개수 문자열 패턴 | a%b | a와 b 사이에 모든 문자열 가능 |
_ | 임의의 문자 한개 패 | a_b | a와 b 사이에 문자열 1개인 경우만 가능 |
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 LIKE 패턴;
특수 문자의 이스케이프(escape) 처리 방법
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 LIKE 패턴 ESCAPE 이스케이프 문자;
_(언더바)가 포함된 모든 문자열을 검색하고 싶을 때, '%_%' 형태는 "1개 이상의 문자가 포함된 문자열"라는 패턴이 된다.
이스케이프 처리하여 다음과 같은 패턴을 작성합니다.
CREATE TABLE foods (id INTEGER, name TEXT);
INSERT INTO foods VALUES (1, 'Water');
INSERT INTO foods VALUES (2, 'Apple_Pie');
INSERT INTO foods VALUES (3, 'Black_Coffee');
INSERT INTO foods VALUES (4, 'Pizza');
INSERT INTO foods VALUES (5, 'Sandwich');
INSERT INTO foods VALUES (6, 'French_Bread');
SELECT *
FROM foods
WHERE name LIKE 패턴 '%$_%'ESCAPE '$';
BETWEEN 범위 비교
조건식을 작성할 때 BETWEEN 절을 사용하면, 컬럼의 값이 지정된 범위 내에 포함되어 있는지 대한 여부를 조건식으로 작성할 수 있습니다.
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 BETWEEN 값1 AND 값2;
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 NOT BETWEEN 값1 AND 값2;
NULL 조회
조건식을 작성할 때 IS NULL 절을 사용하면 NULL 값과 일치하는지 여부의 조건식을 작성할 수 있습니다.
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 IS NULL;
SELECT 컬럼명, ...
FROM 테이블명
WHERE 컬럼 IS NOT NULL;
CREATE TABLE user (id INTEGER, name TEXT, address TEXT);
INSERT INTO user VALUES (1, 'devkuma', 'Seoul');
INSERT INTO user VALUES (2, 'kimkc', null);
INSERT INTO user VALUES (3, 'araikuma', 'Busan');
INSERT INTO user VALUES (4, 'happykuma', 'Daejeon');
INSERT INTO user VALUES (5, 'mykuma', null);
SELECT *
FROM user
WHERE address IS null;
SELECT *
FROM user
WHERE address IS NOT null;
등호(=) 연산자를 사용하여 컬럼의 값을 null과 비교하면 오히려 정확한 결과는 조회되지 않는다. 다음과 같이 몇 가지 SELECT 문을 실행하고 있다.
SELECT * FROM user WHERE address = null;
SELECT * FROM user WHERE address = NULL;
SELECT * FROM user WHERE address = '';
예시 정리
CREATE TABLE user (name TEXT, old INTEGER, address TEXT);
INSERT INTO user VALUES ('devkuma', 39, 'Seoul');
INSERT INTO user VALUES ('kimkc', 34, 'Busan');
INSERT INTO user VALUES ('araikuma', 26, 'Seoul');
INSERT INTO user VALUES ('happykuma', 19, 'Seoul');
INSERT INTO user VALUES ('mykuma', 27, 'Daejeon');
INSERT INTO user VALUES ('yourkuma', 28, 'Gwangju');
INSERT INTO user VALUES ('raccoon', 31, 'Busan');
비교 연산자
SELECT *
FROM user
WHERE address = 'Seoul';
SELECT *
FROM user
WHERE address = 'Busan';
SELECT *
FROM user
WHERE age >= 30;
SELECT *
FROM user
WHERE address <> 'Busan';
응용: 비교 연산자 + 조건 연산자
SELECT *
FROM user
WHERE old > 20 AND address = 'Seoul';
응용: 비교 연산자 + 조건 연산자 + IN 절
SELECT *
FROM user
WHERE address NOT IN ('Paju', 'Seongnam', 'Suwon');
응용: 다른 테이블의 값과 비교
CREATE TABLE gyeonggi (id integer, region text);
INSERT INTO gyeonggi VALUES (1, 'Paju');
INSERT INTO gyeonggi VALUES (2, 'Seongnam');
INSERT INTO gyeonggi VALUES (3, 'Suwon');
INSERT INTO gyeonggi VALUES (4, 'Gimpo');
SELECT *
FROM user
WHERE address IN (SELECT region
FROM gyeonggi);
LIKE 비교
SELECT *
FROM user
WHERE address LIKE 'S%';
SELECT *
FROM user
WHERE name LIKE '______';
SELECT *
FROM user
WHERE name NOT LIKE '______';
BETWEEN 비교
SELECT *
FROM user
WHERE old BETWEEN 20 AND 30;
SELECT *
FROM user
WHERE old NOT BETWEEN 20 AND 30;
문제
기본형식 + 비교 연산자 + 논리 연산자 형태의 Where 조건문을 사용할 수 있어야 한다.
Q1.
문제
학습관점
일반적으로 응용 프로그램에서 "입력된 아이디"의 비밀번호를 DB에서 찾아 확인 할 때, "선택한 특정 일자"에 해당하는 예약 정보를 DB에서 가져 올 때 등 DB로 SELECT 문의 조회를 요청하고, 그 결과를 응용 프로그램으로 리턴 받습니다. DB에서 SELECT 구문으로 읽어 온 정보는, C/C++ 같은 프로그래밍 언어에서 변수에 담아 활용되는 Data가 됩니다.
Student 테이블에서 모든 컬럼을 컬럼명을 입력하여 검색하세요.
Student 테이블에서 모든 컬럼을 *(와일드 카드) 입력하여 검색하세요.
Student 테이블에서 모든 컬럼을 영문 컬럼명만 검색하세요.
Student 테이블에서 모든 컬럼을 한글 컬럼명만 검색하세요.