DB/SQLite3

07 SQLite SELECT 2

2024. 1. 16. 07:06

  • -

 

정렬 출력 (ORDER BY 절)

 

 

SELECT 문을 사용하여 데이터를 조회하면 테이블에 저장된 순서대로 값을 받아 옵니다.

ORDER BY 절을 사용하면 지정된 열을 기준으로 정렬을 수행하여 데이터를 받아올 수 있습니다.

 

ORDER BY 절 후에 정렬하려는 컬럼명과 오름차순 또는 내림차순을 지정합니다.

오름차순인 경우는 ASC, 내림차순인 경우는 DESC를 사용합니다.

생략하면 오름차순으로 정렬됩다.

 

SELECT 컬럼명, ... 
FROM 테이블명 
ORDER BY 컬럼명 [ASC|DESC];

 

정렬 기준 컬럼을 여러 개를 지정할 수 있다.

첫 번째 컬럼을 기준으로 먼저 정렬을 하고, 다음 첫 번째 열에서 같은 값인 경우에 두 번째 컬럼에서 정렬한다. 

SELECT 컬럼명, ... 
FROM 테이블명
ORDER BY 컬럼명1 [ASC|DESC], 컬럼명2 [ASC|DESC] ...;

 

 

예시 정리

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
SELECT * 
FROM user 
ORDER BY old ASC;
SELECT * 
FROM user 
ORDER BY old DESC;
SELECT * 
FROM user 
ORDER BY old DESC, old ASC;

 

 

 

 

중복 제외 조회 (DISTINCT)

 

 

테이블에서 데이터를 조회할 때 동일한 데이터가 포함되어 있는 경우가 있습니다.

DISTINCT를 지정하면 중복된 데이터를 제외하여 조회 결과를 출력 할 수 있습니다.

 

SELECT DISTINCT 컬럼명, ... 
FROM 테이블명;

 

DISTINCT와는 반대로 중복 데이터도 모두 취득하는 경우에는 ALL 키워드를 지정합니다. 

기본값이  ALL이 작성된 경우와 동일하므로, 특별히 지정할 필요가 없습니다.

SELECT ALL 컬럼명, ... 
FROM 테이블명;

 

 

예시 정리

CREATE TABLE product (id INTEGER, name TEXT, color TEXT);

INSERT INTO product VALUES (1, 'Mouse', 'White');
INSERT INTO product VALUES (2, 'Pen', 'Green');
INSERT INTO product VALUES (3, 'Mouse', 'Black');
INSERT INTO product VALUES (4, 'NotePC', 'Black');
INSERT INTO product VALUES (5, 'Display', 'Yellow');
INSERT INTO product VALUES (6, 'Mouse', 'White');

 

SELECT name 
FROM product
SELECT DISTINCT name 
FROM product;

 

SELECT color 
FROM product;
SELECT DISTINCT color 
FROM product;
SELECT DISTINCT name, color 
FROM product;

 

 

 

 

컬럼에 별명 설정 (AS 절)

 

SELECT 문을 사용하여 테이블에서 데이터를 조회했을 때, AS 절을 사용하여 원본 테이블의 컬럼 이름과는 다른 컬럼 이름을 지정하여 데이터를 조회할 수 있습니다.

 

SELECT 컬럼명 AS 별칭 ... 
FROM 테이블명;

 

 

예시 정리

SELECT name, num, price 
FROM product;
SELECT name, num, price as value 
FROM product;

 

SELECT name, num, price, num * price 
FROM product;
SELECT name, num, price, num * price as value 
FROM product;

 

 

 

 

사칙 연산의 결과 조회

데이터를 조회할 때 조회한 컬럼의 값에 곱셈을 수행하거나 컬럼과 컬럼의 값에 더한 결과를 받아올 수 있습니다.

 

연산자 설명
a + b a b를 더하기
a - b a에서 b를 빼기
a * b a b를 곱하기
a / b a b로 나누기
a % b a b로 나눈 나머지

 

 

예시 정리

CREATE TABLE product (name TEXT, num INTEGER, price INTEGER, discount INTEGER);

INSERT INTO product VALUES ('Mouse', 7, 2500, 0);
INSERT INTO product VALUES ('NotePC', 2, 65000, 12000);
INSERT INTO product VALUES ('Display', 4, 35000, 0);
INSERT INTO product VALUES ('Printer', 5, 8000, 2000);
INSERT INTO product VALUES ('Keyboard', 4, 10000, 0);

 

SELECT *, price - discount 
FROM product;
SELECT *, price - discount AS result 
FROM product;

 

 

 

 

데이터를 그룹화하여 합계와 평균을 계산 (GROUP BY, HAVING)

 

데이터의 개수를 구하는 함수와 컬럼마다 값을 계산하는 함수 등을 사용할 때,

모든 데이터를 나열하는 것이 아니라 특정 컬럼 값을 사용하여 그룹화를 하여 그룹 단위로 집계 등을 할 수 있습니다.

 

 

GROUP BY

SELECT 컬럼명, ... 
FROM 테이블명
GROUP BY 컬럼명1, 컬럼명2, ...;

 

 

예시 정리

CREATE TABLE user (name TEXT, gender TEXT, address TEXT);

INSERT INTO user VALUES ('devkuma', 'man', 'Seoul');
INSERT INTO user VALUES ('kimkc', 'man', 'Busan');
INSERT INTO user VALUES ('arikuma', 'woman', 'Seoul');
INSERT INTO user VALUES ('happykuma', 'woman', 'Suwan');
INSERT INTO user VALUES ('raccoon', 'man', 'Busan');
INSERT INTO user VALUES ('mykuma', 'woman', 'Daejeon');
INSERT INTO user VALUES ('yourkuma', 'man', 'Seoul');
SELECT gender, COUNT(*) 
FROM user 
GROUP BY gender;
SELECT address, COUNT(*) 
FROM user 
GROUP BY address;
SELECT gender, address, COUNT(*) 
FROM user 
GROUP BY gender, address;

 

 

HAVING

 

그룹화한 경우에도 WHERE 절을 사용하여 대상이 되는 데이터의 조건 설정을 할 수 있습니다.

이 경우 먼저 WHERE 절에 작성된 조건식으로 데이터를 조회한 이후에 그룹화해야 합니다.

그룹화를 하고나서 그룹을 조회하는데 사용되는 것이 HAVING 절입니다.

 

SELECT 컬럼명, ... 
FROM 테이블명
GROUP BY 컬럼명, ... 
HAVING 조건식;

 

 

예시 정리

SELECT address, count(*) 
FROM user 
GROUP BY address 
HAVING COUNT(*) >= 2;

 

Contents

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

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