학교
[DB] DB04 - 요약 (미완료)
DB04 - SQL
구조적 쿼리 언어(SQL)
SQL: 구조적 쿼리 언어
관계형 데이터베이스를 설명하고 조작하는 데 사용되는 주요 언어이다.
매우 고급 언어이다.
(1) "어떻게 할 것인지"가 아니라 "무엇을 할 것인지"를 말한다.
(2) SQL은 데이터 조작 세부 사항을 지정하지 않는다.
(3) DBMS가 쿼리를 실행하는 "최선의" 방법을 결정한다(figure out).
이를 "쿼리 최적화(optimization)"라고 한다.
SQL의 두 가지 종류
(1) 데이터 정의(definition): 데이터베이스 스키마를 선언하기 위한 것(DDL)
(2) 데이터 조작(manipulation): 데이터베이스에 대한 질문을 하거나 데이터베이스를 수정하기 위한 것(DML)
SQL 구성 요소
DML - 데이터베이스에서 정보를 쿼리하고, 튜플을 삽입하고, 삭제하고, 수정하는 기능을 제공한다.
무결성 - DDL에는 무결성 제약 조건을 지정하는 명령이 포함되어 있다.
뷰 정의 - DDL에는 뷰를 정의하는 명령이 포함되어 있다.
트랜잭션 제어 - 트랜잭션의 시작과 종료를 지정하는 명령이 포함되어 있다.
임베디드 SQL 및 동적(dynamic) SQL - SQL 문이 일반 프로그래밍 언어에 어떻게 삽입될 수 있는지 정의한다.
권한(Authorization) - 관계 및 뷰에 대한 접근 권한(access rights)을 지정하는 명령이 포함되어 있다.
Access control List (ACL)
SELECT
기본 구조
SELECT 열_이름 FROM 테이블_이름특징
SQL 이름은 대소문자를 구분하지 않는다.
단, SQL 명령어(SELECT, FROM, WHERE 등)는 대문자로 작성하는 관례가 있다.
기본적으로 SQL은 관계와 쿼리 결과 모두에서 중복을 허용한다. -> ALL 키워드는 중복이 제거되지 않아야 함을 지정한다.
산술 표현식을 포함할 수 있고, 튜플의 상수 또는 속성에 적용할 수 있다. (+, -, *, /)
중복 YES! vs 중복 NO!
ALL 키워드 : 중복 가능
DISTINCT : 중복 불가능
모든 속성
: 별표(asteriskc)인 *를 사용한다.
리터럴
: FROM 절 없이 리터털을 사용할 수 있다.
속성의 별칭
: AS를 사용하여 열에 이름을 지정할 수 있다.
7. 튜플 반복(Tuple Replication)
: SQL에서 상수 값을 특정 테이블의 모든 행에 대해 반복적으로 반환하는 현상을 의미한다.
WHERE
의미
: 결과가 만족해야 하는 조건을 지정한다.
특징
논리적 연결어(AND, OR, NOT) 사용 가능
- 여러 조건을 조합하여 데이터를 필터링할 수 있다.
예: WHERE age > 20 AND gender = 'M'
비교 연산자 사용 가능 (<, <=, >, >=, =, <>)
- 값을 비교하여 특정 조건을 만족하는 데이터만 선택할 수 있다.
예: WHERE salary >= 50000
산술 표현식 결과에도 비교 적용 가능
- 연산 결과를 조건으로 사용할 수 있다.
예: WHERE (price * quantity) > 10000
4) BETWEEN 비교연산자
- 특정 범위 내의 값을 찾을 때 사용한다. (작성된 범위도 포함된다.)
예 : WHERE 열_이름 BETWEEN 90,000 AND 100,0005) 튜플 비교
튜플별로 비교를 수행한다.
예 : WHERE (instructor.ID, dept_name) = (teaches.ID, 'Biology');
FROM
의미
: 쿼리에 포함된 관계를 나열한다.
특징
데카르트 곱
예시 : FROM instructor, teaches;
WHERE 을 사용하면 유용한 결과를 사용할 수 있다.
별칭
AS 키워드를 사용하여 별칭을 지정할 수 있다.
예시 : FROM instructor AS T
AS 키워드는 선택사항이며, 생략이 가능하다.
예시 : FROM instructor T
NULL
의미
: 알 수 없는 값, 또는 값이 존재하지 않음을 나타낸다.
NULl이 포함된 산술 표현식의 결과는 NULL이다.
예시 : 5 + NULL -> NULL을 반환
IS NULL / IS NOT NULL
IS NULL: 값이 NULL인 경우를 찾는 연산자이다.
예시 : (WHERE column IS NULL)
IS NOT NULL: 값이 NULL이 아닌 경우를 찾는 연산자이다.
예시 : (WHERE column IS NOT NULL)
집합 연산
종류
: UNION, INTERSECT, EXCEPT
특징
자동으로 중복을 제거한다.
모든 중복을 유지하려면, ALL 키워드를 사용해야 한다.
지원 가능 여부
UNION : 가능
INTERSECT : 불가능
EXCEPT : 불가능
문자열 연산
SQL은 문자열 비교를 위한 문자열 연산자를 포함한다.
2. LIKE 연산자
: 문자열이 특정 패턴과 일치하는지 확인할 때 사용한다.
일반적인 = 연산자는 완전 일치만 비교하지만, LIKE는 부분 일치 검색이 가능하다.
LIKE는 와일드카드 문자(%, _)와 함께 사용된다.
와일드카드 문자
퍼센트(%) : 모든 하위 문자열과 일치한다. -> 0개 이상의 모든 문자와 일치
밑줄(_) : 모든 문자와 일치한다. -> 정확히 한 개의 문자와 일치
이스케이프 문자
: 문자열 내에서 특별한 의미를 가진 문자를 일반 문자로 인식하게 하는 데 사용
주로 LIKE 연산자와 함께 사용되며, 와일드카드 문자(%, _)를 일반 문자로 취급하고 싶을 때 사용
5 패턴은 대소문자를 구분한다.
ORDER BY
기본 구조
SELECT 컬럼명1, 컬럼명2, ...
FROM 테이블명
WHERE 조건
ORDER BY 정렬할_컬럼명 [ASC | DESC];특징
여러 속성을 기준으로 정렬할 수 있다.
내림차순(DESC), 오름차순(ASC)로 지정할 수 있으며, 기본값은 오름차순(ASC)이다.
집계 함수
의미
: 집계 함수는 관계형 데이터베이스의 열 값에 대한 여러 값을 집계하여 하나의 결과를 반환하는 함수이다.
관계의 열 값 다중 집합에 대해 작동하며, 값을 반환한다.
종류
AVG: 평균 값
MIN: 최소 값
MAX: 최대 값
SUM: 값의 합
COUNT: 값의 수
특별한 집계함수 : GROUP BY
의미
: 집계 함수를 사용하여 결과를 특정 열의 값에 따라 그룹화할 때 사용된다.
이를 통해 각 그룹에 대해 집계 함수를 적용하여 요약된 결과를 얻을 수 있다.
기본 구조
SELECT 열1, 집계함수(열2)
FROM 테이블명
WHERE 조건
GROUP BY 열1;특별한 집계함수 : HAVING
의미
: HAVING 절은 GROUP BY로 그룹화된 결과에 대해 조건을 적용할 때 사용된다.
즉, 집계 함수의 결과에 대한 필터링을 가능하게 하여 특정 조건을 만족하는 그룹만 선택할 수 있다.
기본 구조
SELECT 열1, 집계함수(열2)
FROM 테이블명
WHERE 조건
GROUP BY 열1
HAVING 조건;HAVING 절의 술어는 그룹 형성(formation) 후 적용되며, WHERE 절의 술어는 그룹 형성(formation) 전에 적용된다.
INSERT
기본 구조
# 모든 열에 데이터 삽입INSERT INTO table_name VALUES (col1_value, col2_value, ...)
# 선택된 열에 데이터 삽입INSERT INTO table_name (col1_name, col3_name, col4_name, ...)
VALUES (col1_value, col3_value, col4_value, ...)특징
데이터 삽입 시, 특정 열이 NOT NULL 제약 조건이 아닐 경우 해당 컬럼을 제외하고 삽입할 수 있다.
NULL을 허용하는 컬럼에 대해서는 NULL 값을 삽입할 수 있다.
3) 외래 키(Foreign Key)는 한 테이블의 속성이 다른 테이블의 특정 컬럼(기본 키 등)에 존재하는 값과 매핑되어야 한다는 제약을 의미한다.
다른 쿼리의 결과 삽입
: SQL에서는 다른 쿼리의 결과를 사용하여 테이블에 데이터를 삽입할 수 있다.
이를 통해 복잡한 데이터 이동이나 조작이 가능하다.
UPDATE
기본 구조
UPDATE table_name
SET col1_name = new_col1_value, col2_name = new_col2_value, ...;조건을 가진 테이블 업데이트
UPDATE tablename
SET col1_name = new_col1_value, col2_name = new_col2_value, … WHERE predicate;CASE문
:CASE 문을 사용하여 조건에 따라 특정 열의 값을 업데이트할 수 있다.
이를 통해 여러 조건을 처리하고, 각각에 대해 다른 값을 설정할 수 있다.
SET 열_이름 =
CASE
WHEN 조건1
THEN 결과1
ELSE 결과2
ENDDELETE
기본 구조
DELETE FROM table_name
WHERE predicate;모든 행 삭제
DELETE
DELETE FROM table_name;TRUNCATE
TRUNCATE TABLE tablename;외래 키 제약 조건: 외래 키 제약 조건이 있는 테이블은 TRUNCATE TABLE로 삭제할 수 없다.
이유: 외래 키로 참조되는 경우, 참조 무결성이 깨질 수 있기 때문이다.
- 해결 방법: 먼저 외래 키 제약 조건을 비활성화해야 한다.
삭제 방식:
DELETE는 한 행씩 삭제하는 반면, TRUNCATE는 모든 행을 한 번에 삭제한다.
이로 인해 외래 키가 있는 경우 TRUNCATE를 사용할 수 없다.
대체방법:
# ALTER를 통해 수정 (하지만 지금은 안됨)ALTER TABLE tablename
DISABLE CONSTRAINT constraint_name;
# 따라서 SET를 사용SET FOREIGN_KEY_CHECKS = 0;-- 외래 키 제약 조건 비활성화