SQLite - SELECT 쿼리

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 SQLite의 마법의 세계로 뛰어들어 SELECT 쿼리의 강력한 기능을 탐구해보겠습니다. 코드를 한 줄도 작성해본 적이 없다면 걱정하지 마세요 - 이 모험을 안내해드릴 친절한 가이드가 바로 저입니다. 이 수업이 끝나면, 프로처럼 데이터베이스를 질문할 수 있을 것입니다!

SQLite - SELECT Query

기본 개념 이해

정밀한 내용에 뛰어들기 전에, SELECT 쿼리가 무엇을 하는지 이해해보겠습니다. 정보로 가득 찬 보물 상자(데이터베이스)가 있다고 상상해보세요. 그리고 특정 아이템을 찾고 싶습니다. SELECT 쿼리는 보물지도처럼, 정확히 찾고 싶은 것을 찾아주는 역할을 합니다.

첫 SELECT 쿼리

간단한 예제로 시작해보겠습니다. students라는 테이블이 있고, id, name, age라는 열이 있다고 가정해봅시다. 이 테이블에서 모든 정보를 가져오는 방법은 다음과 같습니다:

SELECT * FROM students;

이 쿼리는 SQLite에게 "students 테이블의 모든 것(*)을 주세요."라고 말하는 것과 같습니다. "보물 상자를 열고 모든 보물을 보여달라!"라고 말하는 것과 같습니다.

특정 열 선택

이제 우리는 학생들의 이름만 보고 싶다면 어떻게 할까요? 더 구체적으로 지정할 수 있습니다:

SELECT name FROM students;

이 쿼리는 "보물 상자에서 이름 태그만 보여달라!"라고 말하는 것과 같습니다.

WHERE 절을 사용하여 조건 추가

때로는 더 선택적으로 원하는 경우가 있습니다. 예를 들어, 18세인 모든 학생을 찾고 싶다면:

SELECT * FROM students WHERE age = 18;

이 쿼리는 조건을 추가합니다. "보물 상자에서 18세인 아이템만 찾아달라!"라고 말하는 것과 같습니다.

고급 SELECT 기술

결과 정렬

특정 순서로 결과를 보고 싶다면 어떻게 할까요? 문제 없습니다! 가장 어린 학생부터 가장 많은 학생 순으로 목록을 보이겠습니다:

SELECT * FROM students ORDER BY age ASC;

ASC는 오름차순을 의미합니다. 반대로 순서를 원하시면 DESC(내림차순)을 사용합니다.

결과 제한

때로는 결과 중 몇 개만 보고 싶을 수 있습니다. 예를 들어, 가장 많은 학생 5명을 보고 싶다면:

SELECT * FROM students ORDER BY age DESC LIMIT 5;

이 쿼리는 정렬과 제한을 결합합니다. "보물 상자에서 가장 많은 보물 5개를 보여달라!"라고 말하는 것과 같습니다.

출력 열 너비 설정

터미널이나 명령줄 인터페이스에서 SQLite를 사용할 때, 출력이 때로는 어질어질 수 있습니다. 걱정 마세요! 열 너비를 설정하여 정리할 수 있습니다.

다음은 그 방법입니다:

.width 10 20 5
SELECT id, name, age FROM students;

이 명령은 첫 번째 열의 너비를 10자리, 두 번째 열을 20자리, 세 번째 열을 5자리로 설정합니다. "보물 상자를 정리하여 모든 것이 잘 맞도록 하라!"라고 말하는 것과 같습니다.

스키마 정보

때로는 보물 상자(테이블)에 어떤 보물(열)이 있는지 까먹을 수 있습니다. SQLite에는 이를 위한 유용한 명령이 있습니다:

.schema students

이 명령은 students 테이블의 구조를 보여줍니다. 모든 열과 그 유형을 포함합니다. "보물 상자의 지도를 보여달라!"라고 말하는 것과 같습니다.

모든 것을 결합

이제 몇 가지 개념을 결합한 더 복잡한 쿼리를 만들어보겠습니다:

SELECT name, age
FROM students
WHERE age > 18
ORDER BY name ASC
LIMIT 10;

이 쿼리는 "18세 이상인 학생들의 이름과 나이를 이름 순으로 정렬하여 첫 10명만 보여달라."라고 말합니다.

일반 SQLite SELECT 방법

다음은 빠른 참조를 위한 일반 SQLite SELECT 방법 표입니다:

방법 설명 예제
SELECT 테이블에서 데이터 가져오기 SELECT * FROM table_name;
WHERE 조건에 따라 레코드 필터링 SELECT * FROM table_name WHERE condition;
ORDER BY 결과 집합 정렬 SELECT * FROM table_name ORDER BY column_name;
LIMIT 반환할 최대 행 수 지정 SELECT * FROM table_name LIMIT number;
DISTINCT 고유한(다른) 값을 반환 SELECT DISTINCT column_name FROM table_name;
GROUP BY 같은 값으로 행 그룹화 SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
HAVING 그룹에 대한 검색 조건 지정 SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value;
JOIN 두 개 이상의 테이블 행 결합 SELECT * FROM table1 JOIN table2 ON table1.column_name = table2.column_name;

기억하시라, 연습이 완벽을 만듭니다! 이 쿼리들을 실험해보지 마세요. 각각의 쿼리를 실행할 때마다, 데이터 보물 상자를 탐험하는 데 더 능숙해집니다.

저의 경험을 바탕으로, SQLite를 배우는 가장 좋은 방법은 하는 것입니다. 그러니 작은 데이터베이스를 만들어보세요. 예를 들어, 좋아하는 책이나 영화에 대한 데이터베이스를 만들고, 흥미로운 정보를 찾는 쿼리를 작성해보세요. 발견할 것들이 기대 이상일 수 있습니다!

미래의 데이터 탐험가 여러분, 즐겁게 질문하세요! 모든 우수한 데이터베이스 관리자는 여러분이 현재 있는 자리에서 시작했습니다. 계속 연습하고, 호기심을 유지하면 곧 데이터 도메인의 주인이 될 것입니다!

Credits: Image by storyset