[데이터베이스 & SQL 첫걸음] 8주차 공부

김서영·2021년 11월 5일
0

SQL 문의 기본

SELECT문으로 테이블 내용을 살펴보자

데이터베이스 검색

show databases;

데이터베이스 선택

use 데이터베이스명;

테이블 검색

show tables;

테이블 지정해서 데이터 출력

select * from 테이블명;
select 열명 from 테이블명;

조건 지정해서 데이터 출력

select * from 테이블명 where 조건
select 열명 from 테이블명 where 조건;

DISTINCT에 의한 중복 배제

select distinct 열명 from 테이블명 where 조건;

SQL의 기초적인 기술 규칙

  • SQL문의 마지막에 딜리미터(문장의 단락을 의미하는 기호)를 붙임. (세미콜론,;)
  • 키워드는 대문자와 소문자 구별X
  • 정수는 기존 그대로 씀. 문자열이나 날짜 시각은 작은 따옴표('')로 감쌈.
  • 단어는 반각 스페이스나 개행으로 구별. 전각 스페이스 사용X

연산자의 우선순위

우선순위연산자
1INTERVAL
2BINARY, COLLATE
3-(단항 감산), ~(단항 비트 반전)
4^
5*, /, DIV, %, MOD
6-, +
7<<, >>
8&
9|
10=(비교 등호), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
11BETWEEN, CASE, WHEN, THEN, ELSE
12NOT
13&&, AND
14XOR
15||, OR
16=(대입 등호), :=

SELECT문을 응용해보자

검색 결과 정렬

SELECT */열명 from 테이블명 where 조건 ORDER BY 열1 desc/asc;
ORDER BY 이후 열을 여러 개 적어, 정렬을 더 명확하게 할 수 있음.

테이블을 요약하는 함수

함수의 종류

  • 복수 행(이나 행의 값)에 대해 집계를 수행하는 함수
  • 단일 행의 값에 대한 조작이나 계산을 수행하는 함수

대표적인 집계 함수

  • COUNT
  • SUM
  • AVG
  • MIN
  • MAX
    SELECT COUNT(*) FROM 테이블명;
    SELECT MIN(열명) FROM 테이블명 WHERE 조건;
    SELECT MAX(열명) FROM 테이블명 WHERE 조건;

문자열을 집약하는 GROUP_CONCAT

문자열에 대한 집약함수는 SQL 표준에는 없으나 MySQL에는 'GROUP_CONCAT' 함수가 있음. 문자열에 대한 집계를 문자열의 결합으로 수행. 콤마로 구분되는 매우 긴 데이터를 결과로 돌려줌.

데이터를 그룹으로 나누는 GROUP BY

SELECT * FROM 테이블명 GROUP BY 열명1(,열명2,...);

집약한 결과에 조건 지정

SELECT * FROM 테이블명 GROUP BY 열명 HAVING 그룹의 값에 대한 조건 ORDER BY 열명 DESC/ASC;

데이터의 추가, 삭제, 갱신

행 추가하기 - INSERT

INSERT INTO 테이블명 VALUES (값1, 값2, ...)
INSERT INTO 테이블명 (열1, 열2, ...) VALUES (값1, 값2, ...)
값을 지정할 때는 해당 열의 데이터 형식에 맞도록 지정해야 함.
INSERT 명령을 실행해도 처리 상태만 표시될 뿐 SELECT 명령을 실행했을 때처럼 결과를 출력하지는 않음.

NOT NULL이 제약이 걸려있는 열은 NULL 값을 추가할 수 없음.
열을 지정하지 않으면 Default 값으로 행이 추가됨.

삭제하기 - DELETE

DELETE FROM 테이블명 WHERE 조건식
WHERE 구를 지정한 경우에는 해당 조건식에 맞는 행만 삭제 대상.
ORDER BY 구는 사용할 수 없음. (어느 행부터 삭제할 지는 중요하지 않음.)

TRUNCATE

DELETE 와 TRUNCATE는 TABLE의 내용을 지우는 의미에서는 같은 기능.

TRUNCATE는 DDL, DELETE 는 DML.

DDL(Data Definition Language)

데이터를 정의하는 언어로서 개체를 만들고 변경, 삭제하는 CREATE, ALTER, DROP문과 같은 것.

DML(Data Manipulation Language)

데이터 조작 언어로서 데이터를 가공하는 SELECT, INSERT, UPDATE, DELETE문과 같은 것.

TRUNCATE의 장점

TRUNCATE TABLE은 테이블에서 모든 행을 제거하지만 테이블 구조와 테이블의 열, 제약 조건, 인덱스 등은 그대로 남음.
테이블 정의 및 테이블의 데이터를 제거하려면 DROP TABLE 문을 사용.

테이블에 ID 열이 포함되어 있으면 해당 열의 카운터는 열에 대한 초기값으로 다시 설정됩니다. 초기값이 정의되어 있지 않으면 기본값인 1이 사용됩니다. ID 카운터를 보존하려면 DELETE를 대신 사용하십시오.

  • 트랜잭션 로그 공간을 덜 사용
    DELETE 문은 행을 한번에 하나씩 제거하고 삭제된 각 행에 대해 트랜잭션 로그에 항목을 기록합니다. 반면 TRUNCATE TABLE은 테이블의 데이터를 저장하는 데 사용되는 데이터 페이지의 할당을 취소하는 방식으로 데이터를 제거하며 페이지 할당 취소만을 트랜잭션 로그에 기록합니다.
  • 일반적으로 적은 수의 잠금이 사용
    행 잠금을 사용하여 DELETE 문을 실행하면 삭제를 위해 테이블의 각 행이 잠깁니다. TRUNCATE TABLE은 항상 테이블과 페이지를 잠그지만 각 행은 잠그지 않습니다.
  • 빈 페이지는 예외 없이 테이블에 남음
    DELETE 문이 실행된 후에도 테이블은 계속 빈 페이지를 포함할 수 있습니다. 예를 들어 힙의 빈 페이지는 최소한 배타적인(LCK_M_X) 테이블 잠금이 있어야만 할당 취소할 수 있으므로 삭제를 위해 테이블 잠금을 사용하지 않는 경우 테이블(힙)에는 빈 페이지가 많이 남게 됩니다. 인덱스의 경우도 삭제 작업 후에 빈 페이지가 남을 수 있지만 이러한 페이지는 백그라운드 정리 프로세스에 의해 신속하게 할당 취소됩니다.

출처: https://pointnet.tistory.com/334 [점넷(.Net) 아지트]

데이터 갱신하기 - UPDATE

UPDATE 테이블명 SET 열명 = 값 WHERE 조건식
UPDATE 테이블명 SET 열1=값1, 열2=값2, ... WHERE 조건식
DELETE와 달리 UPDATE는 셀 단위로 데이터를 갱신할 수 있음.
'='는 대입 연산자.
자료형에 맞는 값으로 갱신할 것.
WHERE 조건에 일치하는 모든 행이 갱신됨.(주의)

데이터베이스마다 처리되는 순서가 다를 수 있음.
Oracle에서는 SET 구에 기술한 식의 순서가 처리에 영향을 주지 않으나, MySQL에서는 기술된 순서로 갱신 처리가 일어남.

NULL값으로 갱신할 수 있음. 다만, NOT NULL 제약이 설정되어 있다면 당연히 불가능.

물리삭제와 논리삭제

물리삭제

SQL의 DELETE 명령을 사용해 직접 데이터를 삭제하자는 사고 방식.

논리삭제

테이블에 '삭제플래그'와 같은 열을 미리 준비. 테이블에서 실제로 행을 삭제하는 대신, UPDATE 명령을 이용해 '삭제플래그'의 값이 유효하게 갱신.
즉, 실제 테이블 안에는 남아있는 값이나 참조할 때 '삭제플래그'가 삭제로 되어있는 행은 제외.

** 삭제 플래그 (flag)
Boolean값으로 삭제 여부 처리하거나 0과 1로 처리.

장점

실제 데이터를 삭제하지 않기 때문에 삭제되지 전의 상태로 간단히 되돌릴 수 있음.

단점

  • 삭제해도 데이터베이스의 저장공간이 늘어나지 않음
  • 데이터베이스의 크기가 증가함에 따라 검색 속도가 떨어짐
  • UPDATE 명령을 실행하여 혼란을 야기
profile
하지만 저는 이겨냅니다. 김서영이죠?

0개의 댓글