데이터베이스

SQL 기초

으엉어엉 2024. 6. 8. 09:26
728x90
  • DDL: 데이터베이스 구조를 정의하는 데 사용되며, 예를 들어 테이블을 생성하거나 삭제할 때 사용
  • DML: 데이터를 조작하고 쿼리하는 데 사용되며, 예를 들어 테이블에 데이터를 삽입하거나 삭제하는 데 사용

 

  • char vs varchar : char 은 고정. varchar 은 최대 크기, 가변 문자 .
  • NUMBER(p,s) 전체 p자리중에 소수점 s이하 자리 (int , float 등의 ANSI Type도 내부적으론 NUMBER(38) 로 변환됨 

 

  • create table r(integriry- constraint~); : 테이블 생성 
                           변수명  변수 타입

 PK 는 not null 붙힐 필요 X PK는 애초에 기본 조건이 not null . NOT NULL + UNIQUE

foreign key 변수명 references 테이블 명

  • 참조 무결성 제약
  • REFERENCE 테이블의 PK 참조
  • ON DELETE CASCADE : 해당하는 FK를 가진 참조행도 삭제
  • ON DELETE SET NULL: 해당하는 FK를 NULL로 바꿈

 

Drop table : 전체 삭제 DDL 삭제, 롤백 불가능 

truncate: TRUNCATE 문은 테이블에서 모든 데이터를 삭제하지만 테이블 구조는 유지. 롤백 불가능

Delete : delete from 테이블  -> tuple, instance 단위 롤백 가능

Insert: insert into 테이블 명 values(' ' ~~);

selete 변수명 from 테이블명 : 테이블 명에 있는 변수명 추출

 

 

NOT NULL : NULL값 들어올 수 없음

UNIQUE: 중복된 값 허용 X ( NULL은 가능)

 


 

SELECT

 

 

 

두개가 같은 의미임

 

Name = name  = NAME ... 대소문자 구분하지 않는다.

 

select distinct 변수명 from 테이블명 : 중복제거 O

select all 변수명 from 테이블명 : 중복제거 X

select * from 테이블명 : 테이블 안에 있는 모든 값 select

select  변수명/연산 from 테이블명 : 변수명에 기본 연산(+-*/) 가능하다.

 

 

 

 


WHERE

 

연산자

  • – =, !=, >, <, <=, >= – IN: 집합에 포함되는가?
  • – BETWEEN a AND b: a 와 b 사이?
  • – LIKE: 문자열 부분 검색
  • – IS NULL, IS NOT NULL: NULL인지 검색
  • – AND, OR: 둘 다 만족? 둘 중 하나만 만족?
  • – NOT: 만족하지 않음?
  • – ANY, ALL: 집합 중 어느 한열, 집합 중 모든 열 (다른 비교연산자와 함께 사용)
  • – EXIST: 결과 Row가 하나라도 있나? (subquery에서)

Where은 조건절이기에 조건들을 비교할 수 있다.

 

To find all instructors in “Comp. Sci.” dept

select name
from instructor
where dept_name = ‘Comp. Sci.’


▪ Comparison results can be combined using the logical connectives and, or, and not

To find all instructors in Comp. Sci. dept with salary > 80000

select name
from instructor
where dept_name = ‘Comp. Sci.’ and salary > 80000

ORDER BY

 

ORDER BY는 정렬 하는 기능.

  • ASC: 오름차순(default)
  • DESC:내림차순

 

 

예시

List in alphabetic order the names of all instructors
select distinct name
from instructor
order by name

 

 

 


 

 

Join Operation

 

 

 

Join 종류

  • – Theta Join: 임의의 조건(theta)에 의한 조인
  • – Cross Join (Cartesian Product): 모든 가능한 쌍이 나타남
  • – Inner Join: Join 조건을 만족하는 튜플만 나타남
  • – Outer Join: Join 조건을 만족하지 않는 튜플(짝이 없는 튜플)도 Null과 함께 나타남
  • – Equi-Join: Theta Join & 조건이 Equal (=)
  • – Natural Join: Equi-join & 동일한 Column명 합쳐짐
  • – Self Join: 자기 자신과 조인

 

 

Theta Join

 

 

Equi-Join

 

 

OUTER JOIN

 

 

 

SELF JOIN

 

 

 


 

SET OPERATOR 

 

 

UNION, INTERSECT, EXCEPT : 자동적으로 중복 제거 . 만약 중복제거를 원하지 않는 경우 뒤에 all만 붙히면 된다.

 

예시.

▪ Find courses(course_id) that ran in Fall 2009 or in Spring 2010

(select course_id from section where sem = ‘Fall’ and year = 2009)
union
(select course_id from section where sem = ‘Spring’ and year = 2010)


▪ Find courses(course_id) that ran in Fall 2009 and in Spring 2010

(select course_id from section where sem = ‘Fall’ and year = 2009)
intersect
(select course_id from section where sem = ‘Spring’ and year = 2010)


▪ Find courses(course_id) that ran in Fall 2009 but not in Spring 2010


(select course_id from section where sem = ‘Fall’ and year = 2009)
except
(select course_id from section where sem = ‘Spring’ and year = 2010)

 

 


NULL VALUES

Null Values != 0

NULL이라는 Value 가 있는거다. 

 

 

Three-valued logic using the value unknown:
– OR: 
(unknown or true) = true,
(unknown or false) = unknown
(unknown or unknown) = unknown

– AND: 
(true and unknown) = unknown,
(false and unknown) = false,
(unknown and unknown) = unknown

– NOT: (not unknown) = unknown

 

 


 

Aggregate Functions

  • avg: average value
  • min: minimum value
  • max: maximum value
  • sum: sum of values
  • count: number of values

avg 예시.

Find the average salary of instructors in the Computer Science department

select avg (salary)
from instructor
where dept_name = ’Comp. Sci.’;

 

 

count 예시

▪ Find the number of tuples in the course relation

select count (*)
from course;

 

 

AVG GROUP BY 예시

 

SELECT 컬럼 리스트에는 GROUP BY 참여한 필드나 Aggregate 함수만 올 수 있다. 예를들어 갑자기 Dept_name 같은것들이 들어가서는 안된다.

 


 

HAVING 

Aggregation 결과에 대해 다시 condition을 적용할 때 사용한다.

예시

Find the names and average salaries of all departments whose average salary is greater than 42000

select dept_name, avg (salary)
from instructor
group by dept_name
having avg (salary) > 42000;

 

 

728x90

'데이터베이스' 카테고리의 다른 글

B+, B - tree Index  (2) 2024.06.08
INDEXING  (0) 2024.06.08