SQL(Structured Query Langauge)

망고·2024년 6월 3일
0

데이터베이스

목록 보기
8/8
post-thumbnail

🍪 SQL(Structured Query Langauge)

  • 관계 데이터베이스를 위한 표준 질의어
  • 1974년에 IBM 연구소에서 데이터베이스 시스템, "시스템 R"을 질의하기 위해서 만들어진 구조화된 언어
  • 미국 표준 연구소인 ANSI와 국제 표준화 기구인 ISO에서 표준화 작업을 진행
    • 1999년 SQL-99(SQL3)까지 표준화 작업이 완료된 후 계속 수정 및 보완되고 있습니다.

🔖 SQL의 분류

DDL: Data Definition Language

  • 테이블을 생성하고 변경, 제거하는 기능을 제공
  • CREATE(테이블 생성)
  • ALTER (테이블 변경)
  • DROP (테이블 삭제)

DML: Data Manipulation Language

  • 테이블에 새 데이터를 삽입하거나,
    테이블에 저장된 데이터를 수정, 삭제, 검색하는 기능을 제공
  • SELECT(데이터 검색 시 사용)
  • INSERT(데이터 입력)
  • UPDATE(데이터 수정)
  • DELETE(데이터 삭제)

DCL: Data Control Language

  • 보안을 위해 데이터에 대한 접근 및 사용 권한을
    사용자 별로 부여하거나 취소하는 기능을 제공
  • GRANT: 유저에게 권한을 부여
  • REVOKE: 유저로부터 권한을 회수

+) TCL: Transaction Control Language

  • DCL에서 트랜젝션을 제어하는 COMMIT과 ROLLBACK만 따로 분리
  • COMMIT: 올바르게 완료한 작업으로 인한 데이터를 데이터베이스에 영구적으로 반영
  • ROLLBACK: 작업 시작 이전의 상태로 되돌립니다.
  • SAVEPOINT: 저장점을 지정, 이후 ROLLBACK과 함께 사용하여 특정 지점까지 ROLLBACK이 가능합니다.



🌱 테이블 생성(CREATE TABLE)

  • []의 내용은 생략 가능
  • SQL 질의문은 세미콜론(;)으로 문장의 끝을 표시
  • SQL 질의문은 대소문자를 구분하지 않습니다.

Syntax

  1. 테이블을 구성하는 각 속성의 이름, 데이터 타입, 기본 제약 사항 정의
  2. 기본키 정의
  3. 대체키 정의 (MicrosoftAccess SQL 작동 X)
  4. 외래키 정의
  5. 데이터 무결성을 위한 제약 조건 정의
    (Microsoft Access SQL로 작동 X)

속성의 정의

  • 테이블을 구성하는 각 속성의 데이터 타입을 선택한 다음
    NULL 허용 여부와 기본 값 필요 여부를 결정
  • NOT NULL
    • 속성이 NULL을 허용하지 않음을 의미하는 키워드
  • DEFAULT
    • 속성의 기본 값을 지정하는 키워드
    • ex. 적립금 INT DEFAULT 0
    • ex. 담당자 VARCHAR(10) DEFAULT "박oo"

키의 정의

  • PRIMARY KEY
    • 기본키를 지정하는 키워드
    • ex. PRIMARY KEY(고객 아이디)
    • ex. PRIMARY KEY(주문 고객, 주문 제품)
  • UNIQUE
    • 대체키를 지정하는 키워드
    • 대체키로 지정되는 속성의 값은 유일성을 가지며 기본키와 달리 NULL이 허용됩니다.
    • ex. UNIQUE(고객 이름)
  • FOREIGN KEY
    • 외래키를 지정하는 키워드
    • 외래키가 어떤 테이블의 무슨 속성을 참조하는지 REFERENCES 키워드 다음에 제시
  • 데이터 무결성 제약조건의 정의
    • CHECK
      • 테이블에 정확하고 유효한 데이터를 유지하기 위해
        특정 속성에 대한 제약조건을 지정
      • CONSTRAINT 키워드와 함께 고유의 이름을 부여 가능
      • ex. CHECK (재고량 >= 0 AND 재고량 <= 10000)
      • ex. CONSTRAINT CHK_CPY CHECK (제조업체 = '한빛제과')

🌸 테이블 변경 (ALTER TABLE)

  • ADD 새로운 속성 추가
    • ex. ALTER TABLE 고객 ADD 가입날짜 DATETIME;
  • DROT 기존 속성 삭제
    • CASCADE
      • 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성을 함께 삭제
    • RESTRICT
      • 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성이 존재하면 삭제 거부

🚮 테이블 제거 (DROP TABLE)

  • CASCADE
    • 제거할 테이블을 참조하는 다른 테이블도 함께 제거
  • RESTRICT
    • 제거할 테이블을 참조하는 다른 테이블이 존재하면 제거 거부

🔍 데이터 검색(SELECT)

기본 검색

  • SELECT 키워드와 함께 검색하고 싶은 속성의 이름을 나열
  • FROM 키워드와 함께 검색하고 싶은 속성이 있는 테이블의 이름을 나열
  • 검색 결과는 테이블 형태로 반환

Option

  • ALL
    • 결과 테이블이 튜플의 중복을 허용하도록 지정
  • DISTINCT
    • 결과 테이블이 튜플의 중복을 허용하지 않도록 지정
    • 관계 대수 연산에서 𝝅(프로젝트)에 해당

산술식을 이용한 검색

  • SELECT 키워드와 함께 산술식 제시
    • 산술식: 속성의 이름과 +,-,*,/ 등의 산술 연산자와 상수로 구성
  • 속성의 값이 실제로 변경되는 것은 아니고
    결과 테이블에서만 계산된 결과 값이 출력됩니다.

구문 예시

	SELECT 제품명, 단가+500 AS 조정단가 
    FROM 제품;

조건 검색

  • 조건을 만족하는 데이터만 검색
  • WHERE 키워드와 함께 비교 연산자와 논리 연산자를 이용한 검색 조건 제시
    • 숫자 뿐만 아니라 문자나 날짜 값을 비교하는 것도 가능
      • 'A' < 'C'
      • '2024-12-01' < '2024-12-31'
    • 조건에서 문자나 날짜 값은 작은 따옴표로 묶어서 표현

종류

  • 비교 연산자
연산자의미
=같다
<>다르다
<작다
>크다
<=작거나 같다
>=크거나 같다
  • 논리 연산자
연산자의미
AND모든 조건을 만족해야 검색한다.
OR여러 조건 중 한 가지만 만족해도 검색한다.
NOD조건을 만족하지 않는 것만 검색한다.

구문 예시

SELECT 제품명, 재고량, 단가 
FROM 제품 
WHERE 제조업체 = '한빛제과';

LIKE를 이용한 검색

  • LIKE 키워드를 이용해 부분적으로 일치하는 데이터를 검색
  • 문자열을 이용하는 조건에만 LIKE 키워드 사용 가능

기호 (Microsoft Access 기준)

기호설명
*0개 이상의 문자 (문자의 내용과 개수는 상관 X)
?한 개의 문자 (문자의 내용은 상관 X)

구문 예시

SELECT 고객 이름, 나이, 등급, 적립금
FROM 고객
WHERE 고객 이름 LIKE '김*';

NULL을 이용한 검색

  • IS NULL 키워드를 이용해 검색 조건에서 특정 속성의 값이 null인지를 비교
  • IS NOT NULL 키워드를 이용하면 특정 속성의 값이 NULL인지 아닌지를 비교

구문 예시

SELECT 고객이름 FROM 고객
WHERE 나이 IS NULL

정렬 검색

  • ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력
  • ORDER BY 키워드와 함께 정렬 기준이 되는 속성과 정렬 방식을 지정
    • 오름차순(기본): ASC / 내림차순: DESC
    • 여러 기준에 따라 정렬하려면 정렬 기준이 되는 속성을 차례대로 제시

구문 예시

SELECT 고객 이름, 등급
FROM 고객
ORDER BY 나이 DESC

집계 함수를 이용한 검색

  • 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
    • 집계 함수(aggregate function)
      - 개수, 합계, 평균, 최대값, 최소값의 계산 기능을 제공

  • 집계 함수 사용 시 주의 사항
    • 집계 함수는 null인 속성 값은 제외하고 계산합니다.
    • 집계 함수는 WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용이 가능합니다.

함수의미사용 가능한 속성의 타입
COUNT속성 값의 개수
MAX속성 값의 최대값모든 데이터
MIN속성 값의 최소값
SUM속성 값의 합계숫자 데이터
AVG속성 값의 평균

구문 예시

SELECT AVG(단가)
FROM 제품;

SELECT SUM(재고량) AS '재고량 합계'
FROM 제품
WHERE 제조업체 = '한빛제과';

SELECT COUNT(고객 아이디) AS 고객수
FROM 고객;

그룹별 검색

  • GROUP BY 키워드를 이용해 특정 속성의 값이 같은 튜플을 모아 그룹을 만들고, 그룹별로 검색
    • GROUP BY 키워드와 함께 그룹을 나누는 기준이 되는 속성을 지정
  • HAVING 키워드를 함께 이용해 그룹에 대한 조건을 작성
  • 그룹을 나누는 기준이 되는 속성을 SELECT 절에도 작성하는 것이 좋습니다.
  • GROUP BY에 제시되지 않은 속성은 SELECT 절에서 사용할 수 없습니다.

구문 예시

SELECT SUM(수량) AS 총주문수량
FROM 주문
GROUP BY 주문제품;

SELECT 제조업체, COUNT(*) AS 제품수, MAX(단가) AS 최고가
FROM 제품
GROUP BY 제조업체

SELECT 제조업체, COUNT(*), MAX(단가) AS 최고가
FROM 제품
GROUP BY 제조업체 HAVING COUNT(*) >= 3

출력 예시

SELECT 등급, COUNT(*) AS 고객수, AVG(적립금) AS 평균 적립금
FROM 고객
GROUP BY 등급 HAVING AVG(적립금) >= 1000;
등급고객수평균 적립금
gold33500
vip12500

여러 테이블에 대한 JOIN 검색

  • 조인 검색: 여러 개의 테이블을 연결하여 데이터를 검색하는 것
  • 조인 속성: 조인 검색을 위해 테이블을 연결해주는 속성
    • 연결하려는 테이블 간에 조인 속성의 이름은 달라도 되지만 도메인은 같아야 합니다.
    • 일반적으로 외래키가 JOIN 속성으로 이용됩니다.
  • FROM 절에 검색에 필요한 모든 테이블을 나열
  • WHERE 절에 조인 속성의 값이 같아야 함을 의미하는 조인 조건을 제시
  • 같은 이름의 속성이 서로 다른 테이블에 존재할 수 있기 때문에
    속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시
SELECT 제품.제품명
FROM 주문, 제품
WHERE 주문.주문고객 = "banana" 
AND 제품.제품번호 = 주문.주문제품;

SELECT 주문.주문제품, 주문.주문일자
FROM 주문, 고객
WHERE 고객.나이 >= 30 AND 고객.ID = 주문.주문고객;

SELECT 제품.제품명
FROM 주문, 고객, 제품
WHERE 고객.이름 = "고명석" 
AND 고객.ID = 주문.주문고객 
AND 주문.주문제품 = 제품.제품번호;

부속 질의문을 이용한 검색

  • SELECT 문 안에 또 다른 SELECT 문을 포함하는 질의
    • 상위 질의문(주 질의문): 다른 SELECT 문을 포함하는 SELECT 문
    • 부속 질의문(서브 질의문): 다른 SELECT 문 안에 내포된 SELECT 문
      • 괄호로 묶어서 작성, ORDER BY 절을 사용할 수 없음
      • 단일 행 부속 질의문: 하나의 행을 결과로 반환
      • 다중 행 부속 질의문: 하나 이상의 행을 결과로 반환
  • 부속 질의문을 먼저 수행하고, 그 결과를 이용해 상위 질의문을 수행
  • 부속 질의문과 상위 질의문을 연결하는 연산자가 필요
    • 단일 행 부속 질의문은 비교 연산자(=,<>,>,>=,<,<=) 사용 가능
    • 다중 행 부속 질의문은 비교 연산자 사용 불가

연산자설명
IN부속 질의문의 결과 값 중 일치하는 것이 있으면 검색 조건이 참
NOT IN부속 질의문의 결과 값 중 일치하는 것이 없으면 검색 조건이 참
EXISTS부족 질의문의 결과 값이 하나라도 존재하면 검색 조건이 참
NOT EXISTS부족 질의문의 결과 값이 하나도 존재하지 않으면 검색 조건이 참
ALL부족 질의문의 결과 값 모두와 비교한 결과가 참이면 검색 조건을 만족 (비교 연산자와 함께 사용)
ANY 또는 SOME부족 질의문의 결과 값 중 하나라도 비교한 결과가 참이면 검색 조건을 만족 (비교 연산자와 함께 사용)

구문 예시

SELECT 제품명, 단가
FROM 판매
WHERE 제조업체 = 
(SELECT 제조업체 FROM 제품 WHERE 제품명 = "달콤 비스킷")
// 단일 행 부속 질의문

SELECT 고객 이름, 적립금
FROM 고객
WHERE 적립금 = (SELECT MAX(적립금) FROM 고객)

SELECT 제품명, 제조업체
FROM 제품
WHERE 제품번호 IN 
(SELECT 제품번호 FROM 주문 WHERE 주문고객 = "banana")
// => WHERE 제품번호 IN('p01', 'p02', 'p03')

SELECT 제품명, 제조업체
FROM 제품
WHERE 제품번호 NOT IN 
(SELECT 제품번호 FROM 주문 WHERE 주문고객 = "banana")

➕ 데이터 삽입(INSERT)

데이터 직접 삽입

  • INTO 키워드와 함께 튜플을 삽일할 테이블의 이름과 속성의 이름을 나열
    • 속성 리스트를 생략하면 테이블을 정의할 때 지정한 속성의 순서대로 값이 삽입됩니다.
  • VALUES 키워드와 함께 삽입할 속성 값들을 나열
  • INTO 절의 속성 이름과 VALUES 절의 속성 값은 순서대로 일대일 대응되어야 합니다.

부속 질의문을 이용한 데이터 삽입

  • SELECT 문을 이용해 다른 테이블에서 검색한 데이터를 삽입
INSERT 
INTO 테이블_명[(options)]
SELECT;

✍️ 데이터 수정(UPDATE)

UPDATE 테이블_이름
SET 속성_이름1 =1, 속성_이름2=2,
[WHERE 조건];
  • 테이블에 저장된 튜플에서 특정 속성의 값을 수정
  • SET 키워드 다음에 속성 값을 어떻게 수정할 것인지를 지정
  • WHERE 절에 제시된 조건을 만족하는 튜플에 대해서만 속성 값을 수정
    • WHERE 절을 생략하면 테이블에 존재하는 모든 튜플을 대상으로 수정

🗑️ 데이터 삭제(DELETE)

UPDATE 테이블_이름
SET 속성_이름1 =1, 속성_이름2=2,
[WHERE 조건];
  • 테이블에 저장된 데이터를 삭제
  • WHERE 절에 제시한 조건을 만족하는 튜플만 삭제
    • WHERE 절을 생략하면 테이블에 존재하는 모든 튜플을 삭제해 빈 테이블이 됩니다. (DROP의 경우 테이블 전체가 삭제)

📚 참고 강의

관련 강의 - 데이터베이스의 원리와 응용(KOCW) 11-12강

0개의 댓글