DevYoon

[DB] SQL 본문

Web/DB

[DB] SQL

gimewn 2022. 4. 14. 15:17

SQL

1️⃣ SQL

1️⃣-1️⃣ SQL이란?

  • 관계형 데이터베이스 관리시스템의 데이터 관리를 위해 설계된 프로그래밍 언어

1️⃣-2️⃣ 분류

  • DDL
    • 데이터 정의 언어(Data Definition Language)
    • 관계형 데이터베이스 구조(테이블, 스키마)를 정의하기 위한 명령어
    • CREATE, DROP, ALTER
  • DML
    • 데이터 조작 언어(Data Manipulation Language)
    • 데이터를 저장, 조회, 수정, 삭제 등을 하기 위한 명령어
    • INSERT(삽입), SELECT(조회), UPDATE(갱신), DELETE(삭제) (시험에 나옴)
  • DCL
    • 데이터 제어 언어(Data Control Language)
    • 데이터베이스 사용자의 권한 제어를 위해 사용하는 명령어
    • GRANT, REVOKE, COMMIT, ROLLBACK

2️⃣ 테이블 생성 및 삭제

2️⃣-1️⃣ 데이터 베이스 생성하기

sqlite3 tutorial.sqlite3
sqlite > .database

. 은 sqlite 프로그램의 기능을 실행

2️⃣-2️⃣ csv 파일을 테이블로 만들기

sqlite> .mode csv
sqlite> .import <파일명>.csv <name>
sqlite> .tables

2️⃣-3️⃣SELECT

SELECT * FROM <name>;

;까지 하나의 명령(SQL Query)로 간주

➡️ SELECT문은 특정 테이블의 레코드(행) 정보를 반환

*️⃣ 쿼리문 특징

  • SELECT 필드명 from 테이블명;
  • 쿼리문 대소문자 구분 X
  • 여러 줄로 작성해도 ;을 기준으로 하나의 문장으로 인식함
  • DML, DDL, DCL 등이 있음

*️⃣ 터미널 view 변경

  • .headers on ➡️ SELECT * FROM {name};
    id,first_name,last_name,age,country,phone
    1,"길동","홍",600,"충청도",010-0000-0000
  • .mode column ➡️ SELECT * FROM {name};
    id  first_name  last_name  age  country  phone
    --  ----------  ---------  ---  -------  -------------
    1   길동          홍          600  충청도      010-0000-0000

2️⃣-4️⃣ 테이블 생성

CREATE TABLE <테이블명> (
id INTEGER PRIMARY KEY,
name TEXT
);

2️⃣-5️⃣ 테이블 제거

DROP TABLE <테이블명>;

3️⃣ CRUD

3️⃣-1️⃣ CREATE

  • INSERT
    • 특정 테이블에 단일 행 삽입(생성)
      INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...)
  • 공백으로 비워두지 않기 ➡️ NOT NULL 설정
    CREATE TABLE classmates (
      id INTEGER PRIMARY KEY,
      name TEXT NOT NULL,
      age INT NOT NULL,
      address TEXT NOT NULL
    );

3️⃣-2️⃣ READ

  • SELECT
    SELECT [컬럼명] FROM [테이블명];
    • 테이블에서 데이터를 조회
    • 다양한 절(Clause)과 함께 사용
      • ex) ORDER BY, DISTINCT, WHERE, LIMIT, GROUP BY 등
    • LIMIT
      • 가져올 개수
      • SELECT [컬럼명] FROM [테이블명] LIMIT 숫자
      • ex) LIMIT 1 ➡️ 1개 가져옴
    • OFFSET
      • 시작 위치
      • SELECT [컬럼명] FROM [테이블명] OFFSET 숫자
      • 0부터 시작
      • ex) OFFSET 1 ➡️ 시작점으로부터 1 offset, 2번부터 가져옴
    • WHERE

      SELECT 컬럼1, 컬럼2, ... FROM 테이블명 WHERE 조건;
      • 쿼리에서 반환된 행에 대한 특정 검색 조건을 지정
    • DISTINCT
      SELECT DISTINCT 컬럼명 FROM 테이블명;
      • 조회 결과에서 중복 행을 제거
  • DELETE
    DELETE FROM 테이블명 WHERE 조건;
    • 테이블에서 행을 제거
    • ex) id가 5인 레코드를 제거하시오
      DELETE FROM 테이블명 WHERE rowid=5;
    • 지워진 id는 재사용함
      • id 재사용 방지 ➡️ id INTEGER PRIMARY KEY AUTOINCREMENT
    • DB는 한 번 지우면 정말 끝🥲
      ➡️ 지워버리기보다는 isVisible Numeric / isVisible boolen 속성을 통해 관리
  • UPDATE
    UPDATE 테이블명 SET 컬럼1=값1, 컬럼2=값2, ... WHERE 조건;
    • 기존 행의 데이터를 수정
    • SET clause에서 테이블의 각 열에 대해 새로운 값을 설정
    • 조건은 고유한 값인 PK(rowid)를 기준으로 수정

*️⃣ 정리

구문 예시
C INSERT INSERT INTO 테이블명 (컬럼1, 컬럼2...) VALUES (값1, 값2...);
R SELECT SELECT * FROM 테이블명 WHERE 조건;
U UPDATE UPDATE 테이블명 SET 컬럼1=값1, 컬럼2=값2... WHERE 조건;
D DELETE DELETE FROM 테이블명 WHERE 조건;

4️⃣ WHERE

4️⃣-1️⃣ TABLE users 생성

CREATE TABLE users(
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  age INTEGER NOT NULL,
  country TEXT NOT NULL,
  phone TEXT NOT NULL,
  balance INTEGER NOT NULL
);

4️⃣-2️⃣ csv 파일 정보를 테이블에 적용하기

sqlite> .mode csv
sqlite> .import users.csv users
sqlite> .tables

*️⃣ 30살 이상만 조회하기

SELECT * FROM users WHERE age >= 30;

*️⃣ 나이가 30살 이상이고, 성이 '김'인 사람의 나이와 성만 조회

SELECT age, last_name FROM users WHERE age >= 30 AND last_name='김';

5️⃣ Aggregate Functions

  • Aggregate Function이란?
    • 값 집합에 대한 계산을 수행하고 단일 값을 반환
    • 여러 행으로부터 하나의 결과값을 반환하는 함수
    • SELECT 구문에서만 사용
  • 종류
    • COUNT
      • 그룹의 항목 수를 가져옴
        SELECT COUNT(컬럼) FROM 테이블명;
    • AVG
      • 모든 값의 평균을 계산
        SELECT AVG(컬럼) FROM 테이블명;
    • MAX
      • 그룹에 있는 모든 값의 최대값 가져옴
        SELECT MAX(컬럼) FROM 테이블명;
    • MIN
      • 그룹에 있는 모든 값의 최소값 가져옴
        SELECT MIN(컬럼) FROM 테이블명;
    • SUM
      • 모든 값의 합을 계산
        SELECT SUM(컬럼) FROM 테이블명;

6️⃣ LIKE

  • LIKE란?
    • 패턴 일치를 기반으로 데이터를 조회하는 방법
      SELECT * FROM 테이블 WHERE 컬럼 LIKE '와일드카드패턴';
  • 패턴 구성을 위한 wildcards
    • % (percent sign)
      • 0개 이상의 문자
      • 이 자리에 문자열이 존재할 수도 있다.
    • _ (underscore)
      • 임의의 단일 문자
      • 이 자리에 반드시 문자열이 존재한다.
    • ex) 2% ➡️ 2로 시작하는 값 ....... 2살, 20대 모두 나옴

      ​ 2_ ➡️ 2로 시작하면서 두자리인 값 ....... 20대만 나옴

    • Wildcards
      2% 2로 시작하는 값
      %2 2로 끝나는 값
      %2% 2가 들어가는 값
      _2% 아무 값이 하나 있고 두번째가 2로 시작하는 값
      1____ 1로 시작하고 총 4자리인 값
      2_%_% 2로 시작하고 적어도 3자리인 값
      2__% 2로 시작하고 적어도 3자리인 값

7️⃣ ORDER BY & GROUP BY

7️⃣-1️⃣ ORDER BY

  • ORDER BY란?
    • 조회 결과 집합을 정렬
    • SELECT문에 추가하여 사용
  • 정렬 순서를 위한 2개의 키워드 제공
    SELECT * FROM 테이블명 ORDER BY 컬럼 ASC;
    SELECT * FROM 테이블명 ORDER BY 컬럼1, 컬럼2, DESC;
    • ASC 오름차순
    • DESC 내림차순
    • ex) 계좌 잔액 순으로 내림차순 정렬하여 성과 이름을 10개만 조회
      select first_name, last_name from users order by balance desc limit 10;

7️⃣-2️⃣ GROUP BY

  • GROUP BY란?
    SELECT 컬럼1, aggregate_function(컬럼2), FROM 테이블명 GROUP BY 컬럼1, 컬럼2
    • 행 집합에서 요약 행 집합을 만듦
    • SELECT문의 옵션절
    • 선택된 행 그룹을 하나 이상의 열 값으로 요약행으로 만듦
    • 문장에 WHERE 절이 포함된 경우 반드시 그 뒤에 작성해야 함
    • ex) 각 성이 몇 명씩 있는지 조회
      SELECT last_name, COUNT(*), FROM users GROUP BY last_name;
    • 컬럼명 바꿔서 조회 ➡️ AS 활용
      SELECT last_name, COUNT(*) AS name_count FROM users GROUP BY last_name;

8️⃣ ALTER TABLE

  • 기능
    • TABLE 이름 변경
      ALTER TABLE 테이블명 RENAME TO 새로운 테이블명;
    • 테이블에 새로운 컬럼 추가
      ALTER TABLE 테이블명 ADD COLUMN 컬럼명 NOT NULL DEFAULT '기본값';
    • 컬럼명 수정
      ALTER TABLE 테이블명 RENAME COLUMN 기존 컬럼명 TO 새로운 컬럼명;