SQL(Structured Query Language)
- 관계 데이터베이스를 위한 표준 질의어
- 비절차적 데이터 언어
SQL의 분류
- 데이터 정의어(DDL) - 테이블을 생성하고 변경, 제거하는 기능을 제공
- 데이터 조작어(DML) - 테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정, 삭제, 검색하는 기능을 제공
- 데이터 제어어(DCL) - 보안을 위해 데이터에 접근 및 사용 권한을 사용자별로 부여하거나 취소하는 기능을 제공
SQL의 데이터 정의 기능
- 테이블 생성 : CREATE TABLE
- 테이블 변경 : ALTER TABLE
- 테이블 삭제 : DROP TABLE
테이블 생성
- []의 내용은 생략 가능
- SQL 질의문은 세미콜론(;)으로 문장의 끝을 표시
- SQL 질의문은 대소문자를 구분하지 않음
속성의 정의
- 테이블을 구성하는 각 속성의 데이터 타입을 선택한 다음 널 값 허용 여부와 기본 값 필요 여부를 결정
- NOT NULL -> 속성이 널 값을 허용하지 않음을 의미하는 키워드
- DEFAULT -> 속성의 기본 값을 지정하는 키워드
키의 정의
- PRIMARY KEY - 기본키를 지정하는 키워드 PRIMARY KEY(고객 아이디)
- UNIQUE - 대체키를 지정하는 키워드 UNIQUE(고객 이름)
- FOREIGN KEY - 외래키를 지정하는 키워드 FOREIGN KEY(소속 부서) REFFRENCES 부서 (부서 번호)
데이터 무결성 제약조건의 정의
- CHECK - 테이블에 정확하고 유효한 데이터를 유지하기 위해 특정 속성에 대한 제약 조건을 지정
- CHECK(재고량 >= 0 AND 재고량 <= 10000)
테이블 변경
새로운 속성 추가
ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];
기존 속성 삭제
- 삭제할 속성과 관련된 제약조건이 존재
- -> 속성 삭제가 수행되지 않음
- -> 관련된 제약조건을 먼저 삭제해야 함
ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름;
새로운 제약조건의 추가
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;
기존 제약조건의 삭제
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;
테이블 삭제
- 삭제할 테이블에 참조하는 테이블이 존재
- -> 테이블 삭제가 수행되지 않음
- -> 관련된 외래키 제약조건을 먼저 삭제해야 함
DROP TABLE 테이블_이름;
SQL의 데이터 조작 기능
- 데이터 검색 : SELECT
- 데이터 삽입 : INSERT
- 데이터 수정 : UPDATE
- 데이터 삭제 : DELETE
데이터 삽입
데이터 직접 삽입
- INTO 키워드와 함께 투플을 삽입할 테이블의 이름과 속성의 이름을 나열
- VALUES 키워드와 함께 삽입할 속성 값들을 나열
- INTO 절의 속성 이름과 VALUES 절의 속성 값은 순서대로 일대일 대응되어야 함
INSERT INTO 테이블_이름 [(속성_리스트)] VALUES (속성값_리스트);
- 부속 질의문을 이용한 데이터 삽입
- SELECT 문을 이용해 다른 테이블에서 검색한 데이터를 삽입
INSERT INTO 테이블_이름 [(속성_리스트)] SELECT 문;
데이터 검색
기본 검색
- SELECT 키워드와 함께 검색하고 싶은 속성의 이름을 내열
- FROM 키워드와 함께 검색하고 싶은 속성이 있는 테이블의 이름을 나열
- 검색 결과는 테이블 형태로 반환됨
SELECT [ALL : DISTINCT] 속성_리스트 FROM 테이블_리스트;
ALL -> 결과 테이블이 투플의 중복을 허용 (DEFAULT 값)
DISTINCT -> 결과 테이블이 투플의 중복을 허용하지 않도록 지정
- AS 키워드를 이용해 테이블에서 속성의 이름을 바꾸어 출력가능
- 이름에 공백이 포함이 있을 시 큰따옴표나 작은따옴표로 묶어줘야 함
- AS 키워드는 생략 가능
조건 검색
- 조건을 만족하는 데이터만 검색
- WHERE 키워드와 함께 비교 연산자와 논리 연산자를 이용한 검색 조건 제시
SELECT [ALL : DISTINCT] 속성_리스트 FROM 테이블_리스트 [WHERE 조건];
LIKE를 이용한 검색
- LIKE 키워드를 이용해 부분적으로 일치하는 데이터를 검색
- 문자열을 이용하는 조건에만 LIKE 키워트 사용 가능
NULL을 이용한 검색
- IS NULL 키워드를 이용해 특성 속성의 값이 널 값인지를 비교
- IS NOT NULL 키워드를 이용해 특정 속성의 값이 널 값이 아닌지를 비교
- 검색 조건에서 널 값은 다른 값과 크기를 비교하면 결과는 모두 거짓이 됨
정렬 검색
- ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력
- ORDER BY 키워드와 함께 정렬 기준이 되는 속성과 정렬 방식을 지정
- 오름차순(기본) : ASC / 내림차순 : DESC
- 널 값은 오름차순에서 맨 마지막에 출력, 내림차순에서는 맨 먼저 출력
SELECT [ALL : DISTINCT] 속성_리스트 FROM 테이블_리스트
[WHERE 조건] [ORDER BY 속성_리스트 [ASC : DESC]];
집계 함수를 이용한 검색
- 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
- 집계 함수는 WHERE 절에서는 사용할 수 없다. SELECT, HAVING에서만 사용 가능
- 집계 함수는 NULL 값은 제외하고 계산함
그룹별 검색
- GROUP BY 키워드를 이용해 특정 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색
- HAVING 키워드를 함께 이용해 그룹에 대한 조건을 작성
- 그룹을 나누는 기준이 되는 속성을 SELECT 절에도 작성하는 것이 좋음
SELECT [ALL : DISTINCT] 속성_리스트 FROM 테이블_리스트
[WHERE 조건] [GROUP BY 속성_리스트 [HAVING 조건]]
[ORDER BY 속성_리스트 [ASC : DESC]];
여러 테이블에 대한 조인 검색
- 조인 검색: 여러 개의 테이블을 연결하여 데이터를 검색하는 것
- 조인 속성: 조인 검색을 위해 테이블을 연결해 주는 속성
- 연결하려는 테이블 간에 조인 속성의 이름은 달라도 되지만 도메인은 같아야 함
- 일반적으로 외래키를 조인 속성으로 이용함
- FROM 절에 검색에 필요한 모든 테이블을 나열
- 같은 이름의 속성이 서로 다른 테이블에 존재할 수 있기 때문에 속성 이름 앞에 해당 속성이 소속된 테이블의 이름을 표시
여러 테이블에 대한 조인 검색
표준 SQL에서는 INNER JOIN과 ON 키워드를 이용해 작성하는 방법도 제공
SELECT 속성_리스트 FROM 테이블1 INNER JOIN 테이블2 ON 조인조건
[WHERE 검색조건]
외부 조인 검색
- 조인 조건을 만족하지 않는 투플에 대해서도 검색을 수행
- OUTER JOIN과 ON 키워드를 이용해 작성
SELECT 속성_리스트 FROM 테이블1 LEFT:RIGTH:FULL OUTER JOIN 테이블2 ON 조인조건
[WHERE 검색조건]
부속 질의문을 이용한 검색
- SELECT 문 안에 또 다른 SELECT 문을 포함하는 질의
- 부속 질의문을 먼저 수행하고, 그 결과를 이용해 상위 질의문을 수행
- 부속 질의문과 상위 질의문을 연결하는 연산자가 필요
예시
데이터 수정
- 테이블에 저장된 투플에서 특정 속성의 값을 수정
- SET 키워드 다음에 속성 값을 어떻게 수정할 것인지를 지정
- WHERE 절에 제시된 조건을 만족하는 투플만 속성 값을 수정
UPDATE 테이블_이름 SET 속성_이름1 = 값1, 속성_이름2 = 값2..[WHERE 조건];
테이블 삭제
테이블에 저장된 데이터를 삭제
DELETE FROM 테이블_이름 [WHERE 조건];
WHERE절에 제시한 조건을 만족하는 투플만 삭제
-> WHERE절 생략 시 테이블에 존재하는 모든 투플을 삭제해 빈 테이블로 됨
DROP의 경우 테이블 자체를 삭제
MYSQL 내장함수
'CS' 카테고리의 다른 글
싱글톤 패턴(Singleton Pattern) (0) | 2023.04.27 |
---|---|
컴퓨터 시스템의 구성 (0) | 2023.04.16 |
관계 데이터 연산 (0) | 2023.04.15 |
관계 데이터 모델 (0) | 2023.04.14 |
데이터베이스 시스템(DBS) (0) | 2023.04.14 |