DBMS 2일만에 정복하기!! day02 (sql 명령어편)

alert("april");·2023년 9월 11일
0

DBMS

목록 보기
2/3
post-thumbnail
post-custom-banner

출처https://www.geeksforgeeks.org/sql-ddl-dml-tcl-dcl/

sql 명령어

DDL(Data Definition Language)

데이터의 구조등을 정의하는 명령어
(가독성을 위해 메모를 코드 블럭 안에 넣어두었습니다:p)

테이블(스키마, 인덱스,...)=>객체등을
sql
	생성
        CREATE

    삭제    
        DROP
        TRUNCATE

    수정
        ALTER

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

제약조건종류
    UNIQUE
        중복되는 값은 허용하지 않겠다
    PRIMARY KEY
        각각의 행을 구분하는 기본키로 사용하겠다
        (중복 X, NULL X)
    NOT NULL
        NULL 값을 허용하지 않겠다
    CHECK (조건)
        조건을 만족하는 범위의 값들만 허용하겠다

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

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

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

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

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

ALTER
    테이블 구조를 수정
    ADD
        테이블속 새로운 컬럼을 추가(기존컬럼이름과 중복 X)

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

        새로운 제약조건을 추가
             ALTER TABLE 테이블이름
             ADD CONSTRAINT 제약조건이름 제약조건종류 (컬럼이름);

    MODIFY
        테이블속 만들어져있는 컬럼을 수정

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

    DROP
        컬럼을 삭제

            ALTER TABLE 테이블이름
            DROP 컬럼이름;

        제약조건을 삭제

            ALTER TABLE 테이블이름
            DROP CONSTRAINT 제약조건이름;

    CHANGE
        컬럼이름 수정
        ALTER TABLE 테이블명
        CHANGE 기존컬럼이름 새컬럼이름 데이터타입(크기) [DEFAULT] [제약조건]

데이터 조작(다루다, MANIPULATION)
DML(Data Manipulation Language)
    SELECT
        조회(저장되어있는 데이터 조회)
    INSERT
        삽입(새로운 데이터 추가)
    UPDATE
        수정(기존 데이터 수정)
    DELETE
        삭제

INSERT
    INSERT INTO 테이블이름
    (컬럼이름1, 컬럼이름2, ... , 컬럼이름N)
    VALUES
    (,, ... ,);

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

SELECT
    데이터 조회
        SELECT 컬럼이름, 컬럼이름, 컬럼이름, ... , 컬럼이름
        FROM 테이블이름;

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

연산자
    A > B
        A가 B보다 큰조건
    A < B
        A가 B보다 작은 조건
    A >= B
        A가 B보다 크거나같은 조건
    A <= B
        A가 B보다 작거나 같은 조건
    A = B
        A가 B랑 같은 조건
    A <> B, !=
        A가 B랑 다른 조건 

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

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

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

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

EXIST
NOT EXIST
(서브쿼리 배워야 사용가능)

논리연산자
    조건1 AND 조건2
        조건1과 조건2를 모두 만족하는 행만 골라내겠다
    
    조건1 OR 조건2
        조건1 혹은 조건2 둘 중 하나라도 만족하는 행만
        골라내겠다
    
    NOT 조건
        조건을 만족하지 않는 행을 골라내겠다

정렬방법

좀더 고급 레벨을 공부하고 싶다면 찾아보기!
    JOIN(여러 테이블 합치기)
    집합연산자(여러 테이블 합치기)
    집계함수
    WINDOW함수

01외래키

DROP TABLE a;
DROP TABLE tbl_users;

# 부모테이블
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) REFERENCES 회원(아이디),
   개수 INT
);

DROP TABLE 주문정보;
CREATE TABLE 주문정보(
	주문번호 INT PRIMARY KEY,
   상품코드 VARCHAR(200) NOT NULL,
   주문자 VARCHAR(8),
   개수 INT,
   CONSTRAINT 주문정보주문자FK FOREIGN KEY(주문자) REFERENCES 회원 (아이디)
);

# 컬럼 삭제
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;

# 데이터 삽입(추가)
INSERT INTO 회원
(아이디, 비밀번호, 이름, 주소)
VALUES
('abc123', '1234', '배상엽', '서울시 송파구');

INSERT INTO 회원
(아이디, 비밀번호, 이름, 주소)
VALUES
('def123', '9876', '홍길동', '서울시 강남구');

SELECT * FROM 회원;

SELECT 아이디,
		비밀번호,
		이름,
		주소
FROM 회원;
# ---------------------------------------------------------------------------------------------------- 
# 연습용 테이블 
# 테이블이름은 TBL_TMP 입니다 
# 총 3개의 컬럼이 있으며 
# ID 컬럼은 PRIMARY KEY로 사용되고, INT타입입니다 
# NAME 컬럼은 VARCHAR(20) 타입이며, NULL값은 들어갈 수 없습니다
# AGE 컬럼은 INT 타입이며 NULL값은 가능하고, 기본값으로는 0이 설정되어있습니다

create table tbl_tmp(
id int,
name varchar(20) not null,
age int default 0,
constraint tbl_tmp_pk primary key (id)
);

drop table tbl_tmp;

# ID : 1
# NAME : 'Kevin'
# AGE : 10
# 추가하기
insert into tbl_tmp
values(1, 'kevin', 10);

# ID : 20
# NAME : 'David'
# AGE : 15
# 추가하기
insert into tbl_tmp
values(20, 'David', 15);

# ID : 30
# NAME : 'Jessie'
# AGE : 32
# 추가하기
insert into tbl_tmp
values(30, 'Jessie', 32);

# ID : 40
# NAME : 'Brian'
# AGE : 14
# 추가하기
insert into tbl_tmp
values(40, 'Brian', 14);

# ID : 50
# NAME : '홍길동'
# AGE : null
# 추가하기
insert into tbl_tmp
values(50, '홍길동', null);

# ID : 60
# NAME : '김철수'
# AGE : null
# 추가하기
insert into tbl_tmp
values(60, '김철수', null);

insert into tbl_tmp
(id, name)
values(100, '유하준');

select * from tbl_tmp;

# 행 골라내기: select문 안의 where 절에 조건을 작성한다
select *
from tbl_tmp
where 15 > 10; # 조건이 true이기 때문에 모든 행이 다 골라짐

select *
from tbl_tmp
where 15 < 10; # 조건이 false이기 때문에 행이 하나도 안골라짐

select 
   *
from
   tbl_tmp
where
   id > age;
   
select 
*
from
tbl_tmp
where
id != 50;

select *
from tbl_tmp
where age is not null;

select *
from tbl_tmp
where age between 10 and 30;

select *
from tbl_tmp
where id in (20, 40, 100);

select *
from tbl_tmp
where id between 10 and 50
or age < 30;

select *
from tbl_tmp
where name like '%v%i%'; # kevin, David 나옴
profile
Slowly but surely
post-custom-banner

0개의 댓글