-
[SQLite] Record 조회Software/SQLite 2017. 7. 31. 01:56반응형
이 번에는 Table에 입력되어 있는 Record 값들을 조회하기 위한 다양한 구문들에 대해서 알아보도록 하겠다.
먼저 내가 조회하고자 하는 Column들을 선택할 수 있는데 이를 그렇게 하기 위해서 'SELECT'를 사용한다.
기본적으로 SELECT 뒤에 내가 조회하고자 하는 Column들을 나열한다.. 2개 이상의 Column을 조회하기 위해서는 한 Column 뒤에 ','로 구분지어 사용하면 된다. 그 이후에 FROM을 사용하여 어떤 테이블(Table)에서 해당 값들을 조회할 것인 지 명시해 주고 WHERE절을 통해 Record 조회를 위한 조건식을 추가해 주면 된다.
요약하면 아래와 같다고 할 수 있을 것이다.
- SELECT: 조회 Columns
- FROM: 조회 Table
- WHERE: 조회 조건식
그리고 이를 하나의 구문으로 나타내면 아래와 같이 나타낼 수 있다.
: SELECT [Column Name] FROM [Table Name] WHERE [조건식];
sqlite> SELECT name, price, brand FROM cars;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
K5 Kia 1000000
M3 BMW
그리고 만약 모든 컬럼을 조회하고 싶으면 '*'을 사용하면 된다.
: SELECT * FROM [Table Name];
sqlite> SELECT * FROM cars;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
K5 Kia 1000000
M3 BMW
이제 기본적인 조회 방법을 알아 보았으니 다양한 조건 연산과 조건식을 통한 Record 조회 방법에 대해 알아 보도록 하겠다.
조건 연산
WHERE 절에서는 다양한 비교 연산자를 통한 조건 연산이 가능하다
: 비교 연산자: '=', '<', '>', '<=', '>=', '<>', '!=' 지원
: SELECT * FROM cars WHERE brand = 'BMW'; -> brand가 BMW인 결과값만 출력
sqlite> SELECT * FROM cars
...> WHERE brand = 'BMW';
name price brand
---------- ---------- ----------
M3 BMW
320d 1500000 BMW
520d 1700000 BMW
검색 조건이 2개 이상인 경우
두 조건을 연결하는 논리 연산자 사용 (AND, OR)
: SELECT * FROM cars WHERE brand = 'BMW' AND price > 1000000;
sqlite> SELECT * FROM cars WHERE brand = 'BMW' AND price > 1000000;
name price brand
---------- ---------- ----------
320d 1500000 BMW
520d 1700000 BMW
와일드카드(Wildcard)
특정한 문자열 패턴을 지닌 데이터를 검색할 때 사용 한다.
% => 다수의 문자, _ => 하나의 문자
: 예) ba% => baby, ball
: 예) ca_ => cat, cap, car
: SELECT * FROM cars WHERE brand LIKE 'B%';
sqlite> SELECT * FROM cars WHERE brand LIKE 'B%';
name price brand
---------- ---------- ----------
M3 BMW
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
범위 검색(Between ~ And)
숫자 혹은 알파벳에 대한 특정 범위 검색이 가능 하다.
BETWEEN [값 1] AND [값 2]의 형태로 표현.
: SELECT * FROM cars WHERE price >= 1000000 AND price <= 2000000;
sqlite> SELECT * FROM cars WHERE price >= 1000000 AND price <= 2000000;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
: SELECT * FROM cars WHERE price BETWEEN 1000000 AND 2000000;
sqlite> SELECT * FROM cars WHERE price BETWEEN 1000000 AND 2000000;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
문자열에 대해서도 가능 하다.
: SELECT name FROM cars WHERE name BETWEEN 'A' AND 'Z';
sqlite> SELECT * FROM cars WHERE name BETWEEN 'A' AND 'Z';
name price brand
---------- ---------- ----------
K5 Kia 1000000
M3 BMW
C220 1500000 Benz
E330 1800000 Benz
집합 검사(IN)
논리 연산자 대신 'OR'대신 'IN'을 통한 집합 검사가 가능 하다.
'OR' 논리 연산자를 많이 써야하는 경우에 적합하다. (직관적이고 복잡하지 않다)
: SELECT * FROM cars WHERE brand = 'BMW' OR brand = 'Benz';
: SELECT * FROM cars WHERE brand IN ('BMW', 'Benz');
sqlite> SELECT * FROM cars WHERE brand IN ('BMW', 'Benz');
name price brand
---------- ---------- ----------
M3 BMW
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
조건식 부정(NOT)
'NOT'을 통해 조건식 부정이 가능하다.
: SELECT name, price FROM cars WHERE NOT brand = 'BMW';
: SELECT name, brand FROM cars WHERE brand = 'BMW' AND NOT price > 1000000;
: SELECT name, brand, price FROM cars WHERE NOT name LIKE '%GT%';
: SELECT name, brand, price FROM cars WHERE NOT price BETWEEN 1000000 AND 2000000;
: SELECT name, price FROM cars WHERE NOT brand IN ('BMW', 'Benz');
: SELECT name, price FROM cars WHERE brand NOT IN ('BMW', 'Benz');
-> (예외적으로 IN 앞에 NOT 위치 가능)
결과 정렬(ORDER BY, LIMIT)
- ORDER BY
Record 값을 조회 할 때 특정 조건에 대한 정렬이 가능 하다.
정렬 조건을 명시적으로 설정하지 않는다면 결과 레코드 정렬 순서는 보장되지 않는다
(보통 INSERT 한 순서대로 보여주지만 레코드 수정 및 삭제 등 데이터 베이스에서 어떻게 저장 공간을 운용하느냐에 따라 순서가 달라 질 수 있음을 유의해야 한다.)
사용 방법은 아래와 같다.
ORDER BY [정렬 할 컬럼 이름] [정렬 방식]
: 오름차순 = Ascendant / ASC, 내림차순 = Descendent / DESC, Default = ASC
: SELECT * FROM cars ORDER BY brand ASC;
sqlite> SELECT * FROM cars ORDER BY brand ASC;
name price brand
---------- ---------- ----------
K5 Kia 1000000
M3 BMW
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
sonat 1000000 Hyundai
: SELECT name, price FROM cars ORDER BY brand DESC;
sqlite> SELECT * FROM cars ORDER BY brand DESC;
SELECT * FROM cars ORDER BY brand DESC;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
C220 1500000 Benz
E330 1800000 Benz
M3 BMW
320d 1500000 BMW
520d 1700000 BMW
K5 Kia 1000000
: SELECT * FROM cars WHERE price BETWEEN 100000 AND 2000000 ORDER BY price;
sqlite> SELECT * FROM cars WHERE price BETWEEN 1000000 AND 2000000 ORDER BY price;
SELECT * FROM cars WHERE price BETWEEN 1000000 AND 2000000 ORDER BY price;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
320d 1500000 BMW
C220 1500000 Benz
520d 1700000 BMW
E330 1800000 Benz
둘 이상의 컬럼을 정렬해야 하는 경우 정렬할 컬럼 이름과 정렬 방식을 한 쌍으로 나열하고 구분을 위해 쉼표(',')을 사용한다
: SELECT * FROM cars ORDER BY brand ASC, name DESC;
sqlite> SELECT * FROM cars ORDER BY brand ASC, name DESC;
name price brand
---------- ---------- ----------
K5 Kia 1000000
M3 BMW
520d 1700000 BMW
320d 1500000 BMW
E330 1800000 Benz
C220 1500000 Benz
sonat 1000000 Hyundai
-> 정렬 순서는 첫 컬럼에 대해 먼저 정렬되고, 첫 컬럼이 동일한 우선순위를 가지게 되는 경우 그 다음 컬럼을 기준으로 정렬
정렬할 컬럼 이름 대신 조회하고자 하는 컬럼의 인덱스 숫자를 통해 지정 가능
: SELECT brand, name FROM cars ORDER BY 1;
sqlite> SELECT * FROM cars ORDER BY 1;
name price brand
---------- ---------- ----------
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
K5 Kia 1000000
M3 BMW
sonat 1000000 Hyundai
- LIMIT
결과의 개수를 제한해서 얻고자 할 떄는 LIMIT 구문을 사용 한다.
LIMIT 이후 가져올 레코드 개수를 입력.
정렬 된 결과 레코드에서 결과 집합의 수를 제한해야 하므로 LIMIT 절은 항상 ORDER BY 절과 함께 사용 해야 한다
: SELECT name, brand FROM cars ORDER BY name LIMIT 3;
sqlite> SELECT * FROM cars ORDER BY 1;
name price brand
---------- ---------- ----------
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
K5 Kia 1000000
M3 BMW
sonat 1000000 Hyundai
상위 N 번째 부터 M개의 레코드를 얻고자 한다면?
-> LIMIT 절 뒤에 N 값을 넣고 쉼표(',') 그리고 그 뒤에 M 값을 입력, (인덱싱은 0부터 시작)
즉 상위 2번째, 3번쨰, 4번째 값을 가지고 싶다면 아래와 같이 구문을 작성
: SELECT name, brand FROM cars ORDER BY name LIMIT 2, 3;
sqlite> SELECT * FROM cars ORDER BY name LIMIT 2,3;
name price brand
---------- ---------- ----------
C220 1500000 Benz
E330 1800000 Benz
K5 Kia 1000000
NULL 조회
일반 WHERE절과는 다른 형식으로 사용한다.
WHERE [컬럼 이름] IS NULL
: SELECT name, brand FROM cars WHERE price IS NULL;
sqlite> SELECT * FROM cars WHERE price IS NULL;
name price brand
---------- ---------- ----------
M3 Null BMW
IS NULL이 아닌 비교 연산자로는 조회 불가능 하다
: SELECT name, brand FROM cars WHERE price = NULL; -> 불가능
IS NULL에 대한 부정 => IS NOT NULL
: SELECT name, brand FROM cars WHERE price IS NOT NULL;
sqlite> SELECT * FROM cars WHERE price IS NOT NULL;
name price brand
---------- ---------- ----------
sonat 1000000 Hyundai
K5 Kia 1000000
320d 1500000 BMW
520d 1700000 BMW
C220 1500000 Benz
E330 1800000 Benz
반응형'Software > SQLite' 카테고리의 다른 글
[SQLite] 내장 함수 - 1 (0) 2017.08.14 [SQLite] Record 수정 및 삭제 (0) 2017.08.09 [SQLite] Record 입력하기 (INSERT) (0) 2017.07.26 [SQLite] TABLE 생성 및 삭제 (그리고 자료형) (0) 2017.07.19 [SQLite] SQLite의 특징.. 간략히 (0) 2017.07.17 댓글