[DBMS] 데이터베이스 SQL 기초 명령어. DDL(Data Definition Language)

Suji Kang·2023년 9월 11일
0

📝 SQL 명령어

🐾 DDL(Data Definition Language)

테이블(스키마, 인덱스, ...) 👉 객체등을 생성, 삭제, 변경하는 명령어

생성
 CREATE
삭제 
 DROP
 TRUNCATE
수정
 ALTER

테이블생성

CREATE TABLE 테이블명(
    컬럼명1 데이터타입(크기) [제약조건1] [제약조건2],
    컬럼명2 테이터타입(크기) [제약조건1] [제약조건2]...,
    [CONSTRAINT 제약조건이름 제약조건종류 (적용컬럼)],
    [CONSTRAINT 제약조건이름 제약조건종류 (적용컬럼)]
);

📌 제약조건(CONSTRAINTS) 종류

UNIQUE

중복값을 허용하지 않는다.

PRIMARY KEY

각각의 행을 구분하는 기본키로 사용하겠다. - 중복값을 허용하지 않는다. NULL값을 허용하지 않는다. (중복 X, null X)

NOT NULL

null값을 허용하지 않는다.

CHECK

조건식을 만족하는지 확인한다. (범위의 값만 허용한다.)

FOREIGN KEY (외래키)제약조건

테이블과 테이블을 연결할때 사용,
외래키로 지정한다면 관계가 생긴다
외래키로 지정이 되면 제공을 해주는 테이블(부모)과 제공을 받는 테이블(자식) 사이에서 참조무결성을 지켜줄수있다.
자식에서 부모에없는 데이터를 추가하려면 오류발생
자식에서 있는 데이터를 부모에서 삭제하려면 오류발생

📝 CREATE TABLE

EX)

📍

쿠팡- 회원테이블
 	id
 	pw
 	이름
 	주소
CREATE TABLE 회원(
    id VARCHAR(8),
    pw VARCHAR(20) NOT NULL,
    이름 VARCHAR(200) NOT NULL,
    주소 VARCHAR(200) NOT NULL
    CONSTRAINT 회원PK PRIMARY KEY(id)
);

📍

주문정보 테이블
    주문번호
    주문상품번호
    주문자ID
    주문수량
CREATE TABLE 주문정보(
    주문번호 INT,
    주문상품번호 VARCHAR(200),
    주문자ID VARCHAR(8),
    주문수량 INT,
    CONSTRAINT 주문정보PK PRIMARY KEY(주문번호),
    CONSTRAINT 주문정보FK FOREIGN KEY(주문자ID) REFERENCES 회원(id)
);

#부모테이블
CREATE TABLE 회원(
	아이디 VARCHAR(8),
    비밀번호 VARCHAR(200) NOT NULL,
    이름 VARCHAR(200) NOT NULL,
    주소 VARCHAR(200) NOT NULL,
    CONSTRAINT 회원테이블PK PRIMARY KEY (아이디)
);

#회원테이블에있는 아이디 라는 컬럼을 주문정보테이블 에서 참조해야한다
CREATE TABLE 주문정보(
	주문번호 INT PRIMARY KEY,
    상품코드 VARCHAR(200) NOT NULL,
    주문자 VARCHAR(8),
    개수 INT,
    CONSTRAINT 주문자정보주문자FK FOREIGN KEY(주문자) REFERENCES 회원(아이디)
);

❗️ CONSTRAINT 제약조건을 쓰지않아도 REFERENCES 로 회원 테이블을 찾을수있다.
❗️바로 원하는것에 PRIMARY KEY 도 작성가능

#부모테이블
CREATE TABLE 회원(
	아이디 VARCHAR(8) PRIMARY KEY,
    비밀번호 VARCHAR(200) NOT NULL,
    이름 VARCHAR(200) NOT NULL,
    주소 VARCHAR(200) NOT NULL,
);
CREATE TABLE 주문정보(
	주문번호 INT PRIMARY KEY,
    상품코드 VARCHAR(200) NOT NULL,
    주문자 VARCHAR(8) REFERENCES 회원 (아이디) ,
    개수 INT
);


📝🔎 하지만, REFERENCES만 사용시, 만약에 나중에 FOREIGN KEY를 삭제하려면 이름을 모르기때문에 하나만 삭제하고싶을때는 테이블을전체를 삭제했다가 다시 만들어야함


🐾 컬럼의 DEFAULT 값 설정하기

데이터를 저장할때 명시적으로 작성된 값이 없다면 들어갈 기본 값
기본적으로 컬럼에 명시적으로 작성된 값이 없다면 NULL값이 들어간다.
이떄 특수한 값을 기본값으로 설정하고 싶다면 다음과 같이 작성한다

CREATE TABLE 테이블명(
 컬럼명1 데이터타입(크기) [DEFAULT] [제약조건1] [제약조건2],
 컬럼명2 테이터타입(크기) [DEFAULT] [제약조건1] [제약조건2]...,
 [CONSTRAINT 제약조건이름 제약조건종류 (적용컬럼)],
 [CONSTRAINT 제약조건이름 제약조건종류 (적용컬럼)]
);

📝 DROP TABLE

DROP TABLE 테이블명;
  테이블 전체구조 삭제

📝 TRUNCATE TABLE

TRUNCATE TABLE 테이블명;
    테이블 구조를 최초의 상태로 만든다 (테이블의 데이터만 삭제)

📝 ALTER TABLE

테이블의 구조를 변경하는 명령어.

ADD
  ❗️ 테이블속 새로운 컬럼을 추가하는 명령어 (기존컬럼이름과 중복되면 안된다)

      ALTER TABLE 테이블명
      ADD 컬럼명 데이터타입(크기) [DEFAULT] [제약조건1] [제약조건2];

  ❗️ 새로운 제약조건을 추가하는 명령어
      ALTER TABLE 테이블명
      ADD CONSTRAINT 제약조건이름 제약조건종류 (적용컬럼이름);

MODIFY
  ❗️  테이블속 이미 만들어져있는 컬럼의 데이터타입을 변경하는 명령어

      ALTER TABLE 테이블명
      MODIFY 컬럼명 데이터타입(크기) [DEFAULT] [제약조건1] [제약조건2];

DROP
   ❗️ 테이블속 컬럼을 삭제하는 명령어

      ALTER TABLE 테이블명
      DROP COLUMN 컬럼명;

   ❗️ 테이블속 제약조건을 삭제하는 명령어
      ALTER TABLE 테이블명
      DROP CONSTRAINT 제약조건이름;

CHANGE 
   ❗️ 컬럼이름 수정.

	 ALTER TABLE 테이블명
     CHANGE 기존컬럼명 새로운컬럼명 데이터타입(크기) [DEFAULT] [제약조건1] [제약조건2];

# 컬럼 삭제
ALTER TABLE 주문정보
DROP COLUMN 개수;

#제약조건 삭제
ALTER TABLE 주문정보
DROP CONSTRAINT 주문정보주문자FK;

# 컬럼추가
ALTER TABLE 주문정보
ADD 가격 INT DEFAULT 0 NOT NULL;

#제약조건 추가
ALTER TABLE 주문정보
ADD CONSTRAINT 주문정보가격UN UNIQUE (가격);

#컬럼 수정
ALTER TABLE 주문정보
MODIFY 상품코드 INT NOT NULL;

🐾 데이터 조작 (다루다, MANIPULATION)

DML(Data Manipulation Language)

    SELECT
    조회 (데이터를 가져오는 명령어)
    INSERT
    삽입 (새로운 데이터를 추가하는 명령어)
    UPDATE
    수정 (기존 데이터를 수정하는 명령어)
    DELETE
    삭제 (데이터를 삭제하는 명령어)

INSERT

🔎문법

INSERT INTO 테이블명 
 (컬럼명1, 컬럼명2, ..., 컬럼명n)
 VALUES
 (1,2, ..., 값n);

 정의된 데이터의 구조에 따라 알맞지 않는 데이터가 삽입이 되면 오류발생

📝예제

#데이터 삽입(추가)
INSERT INTO 회원
(아이디, 비밀번호, 이름, 주소)
VALUES
('abc123', '1234','suji', 'seoul songpagu');

INSERT INTO 회원
(아이디, 비밀번호, 이름)
VALUES
('def123', '9876', '홍길동');

SELECT

🔎문법

 데이터 조회 (컬럼골라내기)
    SELECT 컬럼명1, 컬럼명2, ... , 컬럼명n
    FROM 테이블명;

    행 골라내기
    SELECT 컬럼이름, 컬럼이름, ... , 컬럼이름
    FROM 테이블명;
    WHERE 조건식;

📝예제

SELECT * FROM 회원;
(아이디, 비밀번호, 이름, 주소)
values
('abc','456','sujin','jamsil');

WHERE 조건식 쓸떄,
연산자
    A > B
     👉  AB보다 크다
    A < B
     👉  AB보다 작다
    A >= B
     👉  AB보다 크거나 같다
    A <= B
     👉  AB보다 작거나 같다
    A = B
     👉  AB가 같다
    A <> B - (이게 sql표준인데, != 도 많이 써서 허용은해줌.)
     👉  AB가 같지 않다
    A != B
     👉  AB가 같지 않다
  
🌟 # 연습용 테이블 
# 테이블이름은 TBL_TMP 입니다 
# 총 3개의 컬럼이 있으며 
# ID 컬럼은 PRIMARY KEY로 사용되고, INT타입입니다 
# NAME 컬럼은 VARCHAR(20) 타입이며, NULL값은 들어갈 수 없습니다
# AGE 컬럼은 INT 타입이며 NULL값은 가능하고, 기본값으로는 0이 설정되어있습니다


# ID : 1
# NAME : 'Kevin'
# AGE : 10
# 추가하기

# ID : 20
# NAME : 'David'
# AGE : 15
# 추가하기

# ID : 30
# NAME : 'Jessie'
# AGE : 32
# 추가하기

# ID : 40
# NAME : 'Brian'
# AGE : 14
# 추가하기

# ID : 50
# NAME : '홍길동'
# AGE : null
# 추가하기

# ID : 60
# NAME : '김철수'
# AGE : null
# 추가하기

📌결과

 CREATE TABLE TBL_TMP(
     ID INT PRIMARY KEY,
     NAME VARCHAR(20) NOT NULL,
     AGE INT DEFAULT 0
 );

 INSERT INTO TBL_TMP(ID, NAME, AGE) VALUES(1, 'Kevin', 10);
 INSERT INTO TBL_TMP(ID, NAME, AGE) VALUES(20, 'David', 15);
 INSERT INTO TBL_TMP(ID, NAME, AGE) VALUES(30, 'Jessie', 32);
 INSERT INTO TBL_TMP(ID, NAME, AGE) VALUES(40, 'Brian', 14);
 INSERT INTO TBL_TMP(ID, NAME, AGE) VALUES(50, '홍길동', null);
 INSERT INTO TBL_TMP(ID, NAME, AGE) VALUES(60, '김철수', null);

#컬럼골라내는법  : SELECT  옆에 컬럼이름을 작성한다
SELECT name FROM tbl_tmp;

#행골라내기 : SELECT문 안에 WHERE 절에 조건을 작성한다
SELECT *
FROM tbl_tmp
WHERE id < 50;

여기서, =null 하면 될까❓🤨

#이렇게는 null 값이 안나온다 🚫 (이렇게는 적용이 안됨)
SELECT *
FROM tbl_tmp
WHERE age = null;

🐾 SQL연산자 -특수한연산자

🔎문법

A IS null
A가 null 이라면 행을 골라내겠다
A IS NOT null
A가 null이 아닌 행을 골라내겠다

📝예제

#이렇게 해야 null 값이 나온다
SELECT *
FROM tbl_tmp
WHERE age IS null;

#이렇게 해야 null 값이 안나온다
SELECT *
FROM tbl_tmp
WHERE age IS NOT null;

🔎문법

a BETWEEN b AND c
a가 b 이상 c 이하를 만족하는 행을 골라내겠다

📝예제

SELECT *
FROM tbl_tmp
WHERE age BETWEEN 20 AND 30;

🔎문법

a IN (b, c , d , ... n)
a 가 b 또는
a 가 c 또는
a 가 d 또는
....
a 가 n 이랑 같은 조건을 만족하는 행을 골라내겠다

📝예제

SELECT *
FROM tbl_tmp
WHERE id IN (20, 40, 100);

논리연산자

🔎문법

조건1 AND 조건2
   	조건1과 조건2를 모두만족하는 행만 골라내겠다  

조건1 OR 조건2 
   	조건1 혹은 조건2 둘 중 하나라도 만족하는 행만
   	골라내겠다 

NOT 조건
   	조건을 만족하지 않는 행을 골라내겠다 

📝예제

SELECT *
FROM tbl_tmp
WHERE id  BETWEEN 10 AND 50
OR age < 30;


SELECT *
FROM tbl_tmp
WHERE not ( id  BETWEEN 10 AND 50
OR age < 30);

🔎문법

a LIKE 패턴
a가 패턴을 만족하는 문자열이라면 행을 골라내겠다
패턴
% : 물결이라고 생각한다
_ : 자릿수

📝예제

SELECT *
FROM tbl_tmp
WHERE name LIKE '%v%';
#👉 v가 들어간 모든 데이터를 가져온다
#%는 ~를 의미한다 (어디든 상관없이 v가 들어간 데이터를 가져온다)

그외에도 .. 더많음

EXIST
NOT EXIST

정렬방법

고급
조인(여러 테이블 합치기)
집합연산자(여러 테이블 합치기)
집계함수
윈도우함수

profile
나를위한 노트필기 📒🔎📝

0개의 댓글