[4기] 백엔드 개발자 부트캠프 "오르미" ~ing/[4기] 백엔드 개발자 부트캠프 오르미 수업 복습

[4기] 56일차 SQL( 서브쿼리, DDL - CREATE )

sohee99 2024. 2. 26. 16:51

오늘의 학습은?

 

조인,서브쿼리 및 DDL!

 

조인의 경우, 전날에 미리 예습으로 작성했기때문에 서브 쿼리부터!!! ㅎㅎㅎㅎ

 

확실히 미리 보고 들으니 이해가 더 잘되더라구요 ㅎㅎ 

 

 

자격증 시험끝나면 예습도 나쁘지 않겠다라는 생각이 들었어요!!

 

 

 

서브쿼리

 

SELECT 절에서 사용하는 서브 쿼리

 

SELECT
    name,
    age,
        (SELECT AVG(age) FROM students AS avg_age)
FROM students
WHERE age < 30

 

이렇게 SELECT문에 학생의 평균 나이를 조회하는 또 다른 SQL문이 들어가므로

 

더욱 풍부한 결과를 얻게 해주는 것이 서브쿼리!

 

결과 값 : 

 

 

 

SELECT뿐만아니라 FROM, WHERE절에도 서브쿼리가 가능하다는점!!!!!!!!

 

 

DDL이란?

 

- Data Definition Language의 약자

 

데이터를 정의하는 언어! 

 

출처 - 이스트소프트 조성연

 

DDL은 테이블을 생성하고 DML은 데이터를 조회,삽입,수정,삭제 한다!

 

 

출처 - 이스트소프트 조성연

 

DDL은 전체적인 골격을 결정하는 역할 ! 

 

즉 테이블의 생성 및 구조를 바꾸는 역할이고 DML은 그 테이블안의 데이터를 조회, 삽입, 삭제, 수정하는것! 

 
CREATE
새로운 테이블을 생성
ALTER
기존 테이블 구조 변경
DROP
테이블 삭제
RENAME
기존 테이블 이름 변경
TRUNCATE
기존 테이블 초기화

 

 

CREATE

출처 - 이스트소프트 조성연

 

그림과 같이 데이터베이스를 생성하지 않으면 테이블의 생성또한 불가능하다. 

 

데이터베이스 하위에 여러개의 테이블을 만들 수 있는 계층구조!

 

 

그럼 데이터베이스를 왜 여러개 만들까?

 

1. 데이터베이스마다 접근 권한을 다르게 설정할 수 있기 때문! 

 

 

CREATE를 사용하여 데이터베이스 생성, 테이블 생성이 가능하다! 

 

 

처음 멘토님께서 프로그램 안깔려서 인텔리제이에서 설명해주실때 

 

CREATE TABLE 데이터베이스명  입력해서 

 

 

생성하면 된다고 하셔서 그렇게 매일 추가하고있는데 

 

 

이거 였군요 !!!!!!!!!!!! ㅋㅋㅋ익숙하군 ㅎㅎㅎㅎ

 

 

데이터베이스 생성

CREATE DATABASE [데이터베이스명]

 

 

테이블 생성

 

CREATE TABLE test_db.students (
  name VARCHAR(255) NOT NULL,
  age INT NOT NULL,
  address VARCHAR(255) NOT NULL
)

 

데이터베이스와 동일하게 테이블도 CREATE TABLE로 생성한다! 

 

그 밖에도 다른 구성들이 존재하는데 

 
데이터베이스 이름
어떤 데이터베이스 하위에 테이블을 생성할 지
테이블 이름
생성하려는 테이블의 이름
열의 이름
데이터 타입
해당 열의 데이터 타입 (ex. 정수, 문자열, 날짜, …)
제약조건
[NOT NULL | DEFAULT | PRIMARY KEY] 등의 옵션을 줄 수 있습니다.

 

여기서 name age address 의 경우는 열의 이름 설정이고,

 

VARCHAR(255) INT는 데이터 타입, 

 

NOT NULL은 제약조건이다! NOT NULL은 말그래돌 NULL 안돼에에ㅔㅇ!!

 

 

< 데이터타입 >

 

데이터 타입 설명
CHAR(size)
고정된 길이의 문자열만 저장할 수 있습니다. 예를 들어 데이터 타입을 “CHAR(5)”로 설정할 경우 “abcde”처럼 글자수가 5개인 문자열은 저장이 가능하고, “abc”처럼 글자수가 3개인 문자열은 저장할 수 없습니다.
VARCHAR(size)
가변 길이의 문자열을 저장할 수 있습니다. 예를 들어 데이터 타입을 “VARCHAR(5)”로 설정할 경우 글자수가 1~5개인 문자열을 저장할 수 있습니다. 즉, “abc”, “abcde”는 저장할 수 있지만 5자를 넘어가는 “abcdefg”는 저장할 수 없습니다.
INT
정수형 데이터를 저장할 수 있습니다. (1, 2, 3, …)
FLOAT
실수형 데이터를 저장할 수 있습니다. (1.0, 2.0, 3.123, …)
BOOL
참 혹은 거짓에 대한 정보를 저장할 수 있습니다. (true/false/null)
DATE
날짜를 저장할 수 있습니다. (2023-12-01)
TIME
시간을 저장할 수 있습니다. (08:38:27)
TIMESTAMP
날짜와 시간을 저장할 수 있습니다. (2023-12-01 08:38:27)

 

 

NOT NULL 제약조건

 

CREATE TABLE 테이블명 (
		컬럼명 데이터타입 NOT NULL
		...
)

 

NULL값 허용 X NULL을 넣거나 아무 값도 넣지 않는다면 에러 발생! 

 

만약 NULL을 넣고 싶다면 제약조건을 빼면 허용된다는거! 

 

DEFAULT

 

CREATE TABLE 테이블명 (
		컬럼명 데이터타입 DEFAULT 기본값
		...
)

 

CREATE TABLE profile (
	id VARCHAR(255) NOT NULL,
	create_date DATE DEFAULT now()
)

INSERT INTO profile (id) VALUES (45)

 

PRIMARY KEY (기본키) 

 

- PK라고도 부르며, 하나의 테이블에 있는 데이터들을 식별하는 기준

 

 

* 하나의 테이블에 하나의 기본키만 생성가능! 기본키를 이용하면 데이터를 쉽고 빠르게 찾을 수 있게 도와준다!

 

 

- NULL은 당연히 XXXXX 중복된값도 XXXXXXXXX 

 

 

즉 NOT NULL과 UNIQUE 제약조건 속성을 지닌다.

 

 

FOREIGN KEY (외래키)

 

-FK 라고 부르며, 테이블간에 관계를 나타낼 때 사용하는 KEY

 

다른 테이블의 기본키를 참조해서 외래키로 사용한다! 

 

 

출처 - 이스트소프트 조성연

 

 

이미지를 보면, 주문 테이블 FK 고객 ID가 고객테이블 PK 기본키를 참조하는 모습! 

 

CREATE TABLE customer (
		id INT PRIMARY KEY, 
		name VARCHAR(10) NOT NULL, 
		address VARCHAR(200), 
		contact VARCHAR(100)
);

 

CREATE TABLE orders (
		id INT PRIMARY KEY,
		customer_id INT, 
		date TIMESTAMP DEFAULT now(),
		payment VARCHAR(50),
		amount INT,
		delivery_amount INT,
		FOREIGN KEY (customer_id) REFERENCES customer(id) 
)

 

customer 테이블 생성하고 orders 테이블은 마지막 줄

 

FOREIGN KEY (customer_id) REFERENCES customer(id) 여기보면

 

costomer을 바라보고 있는 것을 볼 수있다. customer을 참조하고 있다는거!

 

 

외래키 설정 시 2가지 옵션 존재

 

1. RESTRICT

 

 

RESTRICT 제약 조건을 사용하게 되는 경우, 자식테이블의 레코드를 모두 삭제해야만 부모 테이블 레코드를 삭제할 수있다. 

 

즉 자식테이블의 행이 부모 테이블의 행을 참조하지 않는 상태가 된다면 부모테이블에서 해당 레코드 삭제 가능 

 

 

2. CASCADE 삭제

 

이 옵션의 경우 참조된 테이블의 레코드를 삭제할 경우, 해당 레코드를 참조하는 다른 테이블의 레코드도 함께 삭제 

 

즉, 부모 테이블의 행이 삭제되면 자식테이블의 행도 자동 삭제된다는거 ! 

 

자동 삭제라 주의주의!!!!!!!!!!!!!!!!!!!!!

 

 

 

외래키는 무결성을 위해 사용하지만 의존도가 높기때문에 수작업으로 데이터를 다를 경우 변경에 불리한 작용을 함 

 

 

 

- >  보통은 외래키 제약을 따로 설정하지 않고, 애플리케이션 코드 레벨에서 데이터의 일관성을 확인한다.

참조 관계에 있는 테이블을 명시만 하되, 실제 테이블간의 의존도는 낮추고 개발자의 자유도를 높이는 방법

 

 

오늘은 이렇게 배웠구욥!!!!

 

 

얼른,,, 자격증 공부하러 떠나야겟어요,,,SQL 노랑이 책풀고있는데 

 

정말 어려워욥,,,,,,,,적응만하고 기출위주로 풀라는 블로그가 많길래

 

호딱 풀고 기출위주로 해야겠어용

 

그럼 오늘도 열심히 했구욥!!!!!!!

 

내일도 공부 파이팅!!!!!!!