[SQLite] DDL, DML, DCL

ITmakesmeSoft·2022년 10월 29일
0

SQLite

목록 보기
4/4

DDL(Data Definition Language)

CREATE ~

데이터베이스에 새 테이블 생성

  • id 컬럼은 우리가 직접 PK 컬럼을 정의하지 않으면 rowid 컬럼이 자동으로 생성됨(숨겨져 있음)
    CREATE TABLE table_name (
    	column_1 data_type constraints,
    	column_2 data_type constraints,
    	column_3 data_type constraints
    );

ALTER ~

기존 테이블의 구조 변경(수정)

  • ALTER TABLE ~ RENAME : 테이블 명 변경
  • ALTER TABLE ~ RENAME COLUMN ~ : 컬럼 명 변경
  • ALTER TABLE ~ ADD COLUMN ~ : 새 컬럼 추가
  • ALTER TABLE ~ DROP COLUMN ~ : 컬럼 삭제
    • 단 컬럼이 다른 부분에서 참조되거나, PK, UNIQUE 제약조건이 있는 경우 삭제 불가

      ALTER TABLE table_name RENAME TO new_table_name;
      ALTER TABLE new_table_name RENAME COLUMN name TO last_name;
      ALTER TABLE new_table_name ADD COLUMN address TEXT NOT NULL;
      ALTER TABLE new_table_name DROP COLUMN address;

DROP ~

데이터베이스에서 테이블 제거

DROP TABLE table_name;

DML(Data Manipulation Language)

데이터 조작(CRUD)
INSERT, SELECT, UPDATE, DELETE

SELECT

특정 테이블에서 데이터를 조회하기 위해 사용

SELECT ~ FROM ~

  • SELECT 절에서 표시할 컬럼목록을 지정(쉼표로 구분하여 여러 항목 추가 가능)
  • FROM 절에서 데이터를 가져올 테이블을 지정
  • 숨겨진 rowid를 조회하기 위해서는 컬럼에 rowid를 추가
SELECT column1, column2 FROM table_name;
SELECT * FROM table_name;  # asterisk(*)를 통해 모든 컬럼을 가져올 수 있음

SELECT rowid, column FROM table_name; # rowid 출력

SELECT ~ FROM ~ ORDER BY ~

  • 쿼리의 결과를 조건에 맞게 정렬하여 조회
  • ORDER BY 절 다음에 ASC(기본값) 또는 DESC 키워드를 사용
    • ASC : 오름차순(Ascending)
    • DESC : 내림차순(Descending)
  • 두 개 이상의 열을 정렬시켜 조회할 수도 있음(쉼표로 구분)
    SELECT column FROM table_name ORDER BY column2 ASC; # column 오름차순 정렬
    
    # EX)
    SELECT name, age FROM user ORDER BY age ASC; # 나이 오름차순 정렬
  • 첫번째 컬럼을 먼저 정렬 후, 중복되는 요소는 두번째 컬럼으로 정렬
    SELECT column1, column2 FROM table_name ORDER BY column1 ASC, column2 DESC;
    예를 들어
    namegrageage
    김민우4학년23
    이민우4학년25
    위 데이터를 ‘학년(grade)’을 기준으로 오름차순(ACS), ‘나이(age)’를 기준으로 내림차순(DESC)으로 정렬 시,
    SELECT name, grade, age FROM students ORDER BY grade ASC, age DESC;
    와 같이 작성 가능하고,
    김민우 4학년 23세
    이민우 4학년 25세
    가 출력된다.
    • NULL 값은 어떻게 정렬될까? SQLite는 NULL을 다른 값보다 작은 값으로 간주

SELECT DISTINCT ~ FROM ~

  • 조회 결과에서 중복된 행을 제거함
  • 반드시 SELECT 바로 뒤에 위치해야 함
SELECT DISTINCT column FROM table_name;
SELECT DISTINCT column1, column2 FROM table_name ORDER BY column2;
# 위의 경우 각 컬럼에서 중복을 제거하는 것이 아닌, 두 컬럼을 하나의 집합으로 보고 중복 제거

SELECT ~ FROM ~ WHERE ~

  • SELECT, UPDATE, DELETE 문에서 특정 검색 조건을 지정할 수 있음
  • FROM 절 뒤에 작성
  • WHERE ~ <비교연산자> : 비교연산자를 통해 특정 조건의 데이터만 추출하여 조회
    SELECT * FROM table_name WHERE column IS NULL; # column가 NULL인 값 찾기
  • WHERE ~ LIKE : 패턴이 조건과 일치하는 데이터만 추출하여 조회(대소문자 구별X)
    • 두 개의 와일드 카드(Wildcards)를 통해 패턴 구성
      - ~% (percent) : 0개 이상의 문자가 올 수 있음을 의미
      - ‘영%’ → ‘영’, ‘영미’, ‘영미리’
      - ‘%영’ → ‘일영’, ‘웅엉영’, ‘안됑애애영’
      - ‘%영%’ → ‘서울영화관’, ‘영’
      - ~ (underscore) : 단일(1개) 문자가 있음을 의미
      - ‘
      영’ → ‘일영’, ‘한영’, ‘미영’
      - ‘’ → ‘김영환’, ‘이영환’
      - ‘2__%’ → 2로 시작하며 최소 3자리 이상의 패턴

      SELECT DISTINCT column FROM table_name WHERE column > 10;
      SELECT DISTINCT column FROM table_name WHERE column LIKE '%호%';
  • WHERE ~ IN
    • 값이 목록에 존재하는 경우 조회

    • NOT IN 연산자를 사용하면, 목록에 존재하지 않는 경우 조회

      SELECT DISTINCT column FROM table_name WHERE column IN (a, b, c);
      SELECT DISTINCT column FROM table_name WHERE column NOT IN (a, b, c);
  • WHERE ~ BETWEEN ~ AND ~
    • 값이 특정 범위 내에 있는 경우 조회

    • NOT BETWEEN 연산자를 사용하면, 범위 내에 있지 않은 경우 조회

      SELECT DISTINCT column FROM table_name WHERE column BETWEEN 10 AND 30;
      SELECT DISTINCT column FROM table_name WHERE column NOT BETWEEN 10 AND 30;

SELECT ~ FROM ~ LIMIT ~

  • 쿼리에서 반환되는 행 수를 제한하여 출력
  • OFFSET을 이용하면, 특정 위치에서부터 제한된 행 수 만큼 출력할 수 있음
    SELECT DISTINCT column FROM table_name LIMIT 10; # 10개의 행만 출력
    SELECT DISTINCT column FROM table_name LIMIT 10 OFFSET 50; # 10번 부터 10개의 행을 출력

SELECT ~ FROM ~ GROUP BY ~

  • 특정 그룹으로 묶인 결과를 생성
  • 선택된 컬럼 값을 기준으로 데이터(행)들의 공통 값을 묶어서 결과로 나타냄
  • SELECT문의 FROM절 뒤에 작성 (WHERE절이 포함된 경우 WHERE절 뒤에 작성)
  • 각 그룹에 대해 MIN, MAX, SUM, COUNT 또는 AVG와 같은 집계 함수(aggregate function)를 적용하여 각 그룹에 대한 추가적인 정보를 제공할 수 있음
    • Aggregate Function
      - 집계 함수. 각 집합에 대한 계산을 수행하고 단일 값을 반환
      - AVG(), COUNT(), MAX(), MIN(), SUM()을 제공

      SELECT COUNT(*) FROM table_name; # 테이블의 전체 행 수 조회
      SELECT AVG(age) FROM users WHERE age > 19; # 19세 이상의 사람들의 평균 나이 조회
      SELECT AVG(*) AS average FROM table_name; # AS 키워드를 통해 컬럼명을 임시로 변경 가능

DCL(Data Control Language)

INSERT INTO ~ VALUES ~

  • 새 행을 테이블에 삽입
  • INSERT INTO 키워드 뒤에 데이터를 삽입할 테이블 지정
  • 테이블 이름 뒤에 쉼표로 구분된 컬럼 목록을 추가하여 삽입할 컬럼을 지정
    (생략은 가능하나, 지정하는 것을 권장)
  • VALUES 키워드 뒤에 삽입할 값을 쉼표로 구분한 값 목록을 추가
    • 만약 컬럼 목록을 생략하는 경우, 모든 컬럼에 대한 삽입 값을 지정해야 함.

    • 삽입할 값 목록의 값 개수는 컬럼 목록의 컬럼 개수와 같아야 함

      INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
      
      # 단일 행 추가
      INSERT INTO users (name, age, address) VALUES ('홍길동', 23, '서울');
      INSERT INTO users VALUES ('홍길동', 23, '서울');
      
      # 여러 행 추가
      INSERT INTO users  
      VALUES 
      	('홍길동', 23, '서울'), 
      	('홍길순', 24, '부산'),
      	('홍길자', 21, '대전'),
      	('홍말자', 22, '광주');

UPDATE ~ SET ~ (WHERE)

  • 테이블에 있는 기존 행의 데이터를 업데이트
  • UPDATE절 이후에 업데이트 할 테이블 지정
  • SET 절에서 테이블의 각 컬럼에 대해 새 값을 설정
  • WHERE 절의 조건을 사용하여 업데이트 할 행을 지정
    • WHERE 절은 선택 사항이며, 생략 시 UPDATE 문은 테이블의 모든 행에 있는 데이터를 업데이트함
  • 선택적으로 ORDER BY 및 LIMIT 절을 사용하여 업데이트 할 행 수를 지정할 수도 있음
UPDATE table_name
SET column1 = new_value1,
		column2 = new_value2
WHERE
		search_condition;

UPDATE users
SET name = '홍길동',
		age = 23
WHERE
		rowid = 3;

DELETE FROM ~ (WHERE)

  • 테이블에서 행을 제거
  • 테이블의 한 행, 여러 행 및 모든 행을 삭제할 수 있음
  • DELETE FROM 키워드 뒤에 행을 제거하려는 테이블의 이름 지정
  • WHERE 절에 검색 조건을 추가하여 제거할 행 식별
    • WHERE 절은 선택사항이며, 생략 시 DELETE 문은 테이블의 모든 행을 삭제
  • 선택적으로 ORDER BY 및 LIMIT 절을 사용하여 삭제할 행 수를 지정할 수도 있음
DELETE FROM table_name
WHERE search_condition;

UPDATE FROM users WHERE rowid = 5;        # rowid 5번 데이터 삭제
UPDATE FROM users WHERE name LIKE '%영%'; # 이름에 '영'이 포함되는 데이터 삭제
UPDATE FROM users;                        # 테이블의 모든 데이터 삭제
profile
💎 Daniel LEE | SSAFY 8th

0개의 댓글