[데이터베이스개론] - SQL 입문

조재현·2023년 4월 2일
0

📢 SQL data-definition language(DDL)

  • Database의 구축에 관여하며, relation의 다양한 정보를 정의한다.
    • Relation schema : 어떤 속성을 쓸 것인가?
    • Attribute domains : 속성에는 어떤 값들이 들어갈 수 있는가?
    • Integrity constraints : 속성으로 가지는 값의 제한
    • 그 외...

👍 Create Table

1. 기본 형태

CREATE TABLE R(
	A1 D1,
    A2 D2 ....
    (INTEGRITY CONSTRAINTS)
)

R: Table의 이름을 정의
A: Table의 attribute(속성)을 정의
D: attribute 값의 타입(int, varchar...)를 정의

📜 예시)

CREATE TABLE instructor(
	ID char(5),
    name varchar(20) not null,
    dept_name varchar(20),
    salary numeric(8, 2)
)
INSERT INTO instructor('10211', 'SMITH' 'BIOLOGY', 66000) //Valid
INSERT INTO instructor('10211', null, 'BIOLOGY', 66000) //Invalid

2. Integrity Constraints - Not null, primary key, foreign key references
📜 예시)

CREATE TABLE instructor(
	ID char(5), // ID char(5) primary key => 이렇게 attribute 선언에 붙여 쓸 수도 있음
    name varchar(20) not null,
    dept_name varchar(20),
    salary numeric(8, 2),
    primary key(ID),
    foreign key(dept_name) references department
) 
  • not null: name에는 null 값이 들어 갈 수 없음
  • primary key: ID를 instructor table의 primary key로 조정, 해당 속성은 null이 되거나 중복될 수 없음 ,
  • foreign key(K) references R : 해당 table의 key K를 R의 primary key로 선언

👍 Drop Table, Delete from, Alter Table

DROP TABLE student
DELETE FROM student
ALTER TABLE student ADD gender(male, female) // student에 새로운 attribute gender를 추가
ALTER TABLE student DROP gender //student의 gender attribute 삭제
  • Drop table : 테이블 안의 내용과 relation schema 전부 삭제
  • Delete from : 테이블 안의 내용을 삭제, relation schema는 유지
    참고) Delete from은 테이블 안의 contents에 관여하므로, DDL(data-definition language)보단 DML(data-manipulation language)에 가깝다 볼 수 있다.
  • Alter table R add A(domain) : 테이블에 새로운 attribute A를 추가, 기존에 있던 tuple들의 속성 A값은 null
  • Alter table R drop A : 테이블의 속성 A를 삭제, 대부분의 SQL은 이 기능 지원하지 않음

📢 SQL data-manipulation language(DML)

  • Database에 저장된 정보에 대한 검색, 삽입, 삭제, 업데이트를 지원한다.

👍 SELECT문

1. 구문 기본 형태

SELECT A // A: attribute
FROM R // R: relation
WHERE condition // 조건문

SELECT DISTINCT A
FROM R 
WHERE condition

SELECT ALL A
FROM R 
WHERE condition
  • SELECT 문은 중복을 허락하며, 만일 중복된 속상값을 배제하고 싶다면 SELECT DISTINCT를 사용한다.
  • 중복을 배제하지 않음을 명시하고 싶다면 SELECT ALL을 사용(default option이므로 의미는 없다)

2. 응용

  • 모든 attribute를 선택하고 싶다면 *을 사용한다.
SELECT * from instructor // instructor table 그 자체를 출력
  • select의 attribute에는 연산자 사용이 가능하다.
SELECT ID, name, salary/12 from instructor // 각 튜플의 salary를 12로 나누어 출력
  • WHERE 문으로 조건을 설정할 수 있으며, 조건끼리는 AND, OR등의 논리 연산자 사용이 가능하다.
SELECT name FROM instructor WHERE dept_name = 'Comp.Sci' and salary > 80000
// dept_name이 comp_sci고 salary가 80000이상인 튜플을 모두 가져옴
  • FROM 문은 쿼리에서 필요한 relation을 명시하며, relation이 여러개라면 FROM은 Cartesian product 연산을 한 것과 동일한 효과를 가진다.
SELECT name, course_id FROM instructor, teaches WHERE instructor.ID = teaches.ID
// 이는 곧 natural join과 동일한 효과를 가진다. 
(ID는 공통 attribute, ID 값이 같은 서로 match)
  • NATURAL JOIN문은 위의 FROM-WHERE를 활용한 것보다 간단하게 SQL 문을 작성할 수 있다.
SELECT name, course_id FROM instructor NATURAL JOIN teaches
// (마찬가지로 ID는 공통 attribute, ID 값이 같은 서로 match)
profile
꿈이 많은 개발자 지망생

0개의 댓글