SQL

SQLite 환경에서 SQL DML 명령어 실습

haniru 2025. 12. 14. 00:22

데이터베이스 및 시스템 관련 항목 정리

관계형 DB (Relational Database)

  • 설명: 데이터를 테이블(릴레이션) 형태로 저장하고, 이 테이블들이 **키(Key)**를 통해 서로 관계를 맺는 방식으로 구성된 데이터베이스 모델이다.
  • 특징:
    • 데이터의 **정합성(Consistency)**과 **무결성(Integrity)**을 보장하는 데 강하다.
    • SQL(Structured Query Language)을 사용해 데이터를 관리한다.
    • 대표적인 예시로는 MySQL, Oracle, PostgreSQL 등이 있다.

파일 DB (File Database) 및 파일 시스템 (Filesystem)

  • 파일 시스템:
    • 설명: 컴퓨터 내에서 파일과 디렉토리를 저장하고 계층적으로 관리하는 방법이다.
    • DB와의 차이: 파일 시스템은 단순히 데이터를 파일 형태로 저장하고 접근하는 OS 수준의 방법이다. 데이터베이스처럼 복잡한 쿼리 처리, 동시성 제어, 트랜잭션 관리 등의 기능은 제공하지 않는다.
  • 파일 DB:
    • 설명: DB 시스템을 사용하지 않고, 일반 파일(예: CSV, 텍스트 파일, 바이너리 파일)을 데이터 저장 및 관리 목적으로 사용하는 것을 포괄적으로 이르는 말이다. SQLite처럼 단일 파일로 DB 전체를 구성하는 경우도 포함될 수 있으나, 일반적으로는 DBMS의 제어 없이 파일에 의존하는 경우를 말한다.

MySQL

  • 단점 (제시된 내용): 복잡한 JOIN이 포함된 쿼리에서 성능이 느려질 수 있다.
    • 참고: MySQL은 경량성과 빠른 읽기 성능, 대중성으로 널리 사용되지만, 매우 복잡하고 대규모의 분석 쿼리에서는 Oracle이나 PostgreSQL이 더 최적화된 경우가 있을 수 있다.

SQLite

  • 설명: 서버가 필요 없는 경량의 임베디드(Embedded) 관계형 데이터베이스 관리 시스템(RDBMS)이다. DB 전체가 단일 파일로 저장된다.
  • 특징 (제시된 내용): 가볍다는 장점이 있지만, 일반적인 서버용 DBMS가 제공하는 **많은 기능(동시성 제어, 사용자 관리, 복제 등)**이 생략되어 있다.
  • 사용처: 모바일 앱, 데스크톱 앱, 소규모 웹사이트, 테스트 환경 등.

SQL Lite 브라우저 다운로드

https://sqlitebrowser.org/dl/

 

환경 설정에서 글꼴 설정 가능

 

1. 폴더 만들기

window+E: 탐색기

C:\Users\User 에 databases 폴더 만들기 (C:\Users\User\databases)

 

2. 새 데이터베이스 버튼 클릭 후

 

3. 테이블 생성

CREATE TABLE "Person" (
"ID"	INTEGER NOT NULL,
"NAME"	TEXT NOT NULL,
"BIRTHDAY"	TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);

 

테이블 생성 완료

 

SQL 실행 탭에서 다음 코드 실행

(Ctrl + enter 또는 F5 하면 실행 가능)

-- 데이터 삽입 (DML)
INSERT INTO Person (ID, Name, Birthday)
VALUES (1, '이혜리', '1994-06-09');

INSERT INTO Person
VALUES (2, '강호동', '2000-08-08');

INSERT INTO Person (ID, NAME, BIRTHDAY)
VALUES (3, '유재석', '1999-01-01');

-- 데이터 조회 (DML - SELECT)
SELECT * FROM Person; -- 모든 컬럼과 모든행 조회

SELECT NAME, ID FROM PERSON; -- NAME, ID 컬럼만 조회

SELECT ID, BIRTHDAY FROM PERSON;

SELECT NAME, BIRTHDAY FROM Person;

SELECT NAME, BIRTHDAY FROM Person ORDER BY ID ASC; -- ID 컬럼을 기준으로 오름차순 정렬

select name, birthday from Person
order by BIRTHDAY DESC;

-- 데이터를 **삭제(DELETE)**하고 그 결과를 **조회(SELECT)**
DELETE FROM Person
WHERE ID = 1; -- 특정 ID를 가진 행 삭제

SELECT * FROM Person -- 삭제 후 데이터 확인

delete from Person; -- 테이블의 모든 행 삭제

select * from Person -- 전체 삭제 후 데이터 확인

INSERT INTO Person (ID, Name, Birthday)
VALUES (1, '이혜리', '1994-06-09');

-- 초기 데이터 삽입
INSERT INTO Person
VALUES (2, '강호동', '2000-08-08');

INSERT INTO Person (ID, NAME, BIRTHDAY)
VALUES (3, '유재석', '1999-01-01');

-- 데이터 수정 (UPDATE)
update Person set name = '김해리'
where id = 1;

select * from Person;

select * from Person -- 조회

-- 데이터 추가 (복수 행 및 NULL 값 삽입)
insert into Person (Name, Birthday)
values ('박소진', '1994-05-21'),
('김아영', '1994-11-06')

INSERT INTO Person (Name) VALUES ('민아'); -- '민아' 데이터를 삽입할 때 ID는 자동 증가(6), BIRTHDAY는 값이 명시되지 않아 NULL이 들어간다.

select * from Person
order by Name asc

-- WHERE 절을 사용하여 데이터베이스에서 특정 조건을 만족하는 데이터를 **필터링(Filtering)**하고 **조회(SELECT)**
select * from Person
where BIRTHDAY is NULL
order by Name asc -- BIRTHDAY 컬럼의 값이 NULL인 행만 선택

select * from Person
where BIRTHDAY like '19%' -- BIRTHDAY 값이 문자열 '19'로 시작하는 모든 행을 선택

select * from Person
where name like '%재%' -- NAME 값에 문자열 '재'가 포함된 모든 행을 선택

 

addressbook 파일 만들어서 실습

-- 테이블 생성 및 컬럼명 변경 (DDL)
-- 테이블 생성
CREATE TABLE "AddressBook" (
"ID"	INTEGER NOT NULL,
"NAME"	TEXT,
"PNUMBER"	TEXT,
PRIMARY KEY("ID" AUTOINCREMENT)
);

-- 컬럼명 변경 (RENAME COLUMN)
ALTER TABLE AddressBook
RENAME COLUMN NAME TO Name;

ALTER TABLE AddressBook
RENAME COLUMN PNUMBER TO Pnumber;

-- 초기 데이터 삽입
INSERT INTO AddressBook (ID, Name, Pnumber)
VALUES (10, '홍길동', '010-1111-1111');
INSERT INTO AddressBook (ID, Name, Pnumber)
VALUES (20, '이순신', '010-2222-2222');
INSERT INTO AddressBook (ID, Name, Pnumber)
VALUES (30, '강감찬', '010-3333-3333');

-- 데이터 수정 (UPDATE) 및 충돌 (Conflict)
UPDATE AddressBook set name = '김길동', id = 50
where id = 10;

UPDATE AddressBook set name = '김길동', id = 50
where id = 10;

-- AUTOINCREMENT 데이터 삽입
INSERT INTO AddressBook (Name, Pnumber)
VALUES
('홍길동', '010-1111-1111'),
('이순신', '010-2222-2222'),
('강감찬', '010-3333-3333');

-- 추가 데이터 수정 및 삭제
UPDATE AddressBook SET ID = 50
WHERE ID = 10

DELETE FROM AddressBook
WHERE ID = 30

-- Name이 '강감찬'인 모든 행이 삭제된다
DELETE FROM AddressBook
WHERE Name = '강감찬'

 

참고

책:https://wikidocs.net/book/1530

SQL 놀이터: https://ychoi-kr.github.io/sql-playground/

 

SQL 놀이터

SQL 놀이터 -- 여기에 SQL 쿼리를 입력하세요 SELECT '안녕, SQL.js!' AS greeting; 실행 결과가 아래에 표시됩니다.(여러 쿼리를 실행할 경우 마지막 쿼리의 결과만 표시됩니다.)

ychoi-kr.github.io