DB/SQLite3

07 SQLite SELECT 1

2024. 1. 15. 21:05

  • -

 

 

테이블에 저장된 데이터를 조회하려면 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 ab는 같다
a <> b, a != b ab는 같지 않다
a > b ab보다 크다
a >= b ab 이상이다
a < b ab보다 작다
a <= b ab 이하이다

 

 

 

논리 연산자를 사용한 조건식

 

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 테이블에서 모든 컬럼을 한글 컬럼명만 검색하세요.

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.