dev-course day13

2rlokr·2025년 3월 20일

dev-course

목록 보기
13/43
post-thumbnail

오늘 배운 것

복습해야 할 것 같은 sql만 남겨보겠다 !

SQL 구문

계정 생성할 때

CREATE USER user1 IDENTIFIED BY 'password';
CREATE USER user2@localhost IDENTIFIED BY 'password';

계정에 권한을 줄 때

GRANT
	ALL PRIVILEGES
ON
	*.* # (which database).(which table) -> 지금은 (every.every = *.*)
TO
	`USER1`@localhost; # `USER2`@`%` 가능 ! 
    # (여기서 %는 다른 외부 컴퓨터에서 아이디, 비번만 안다면 데이터베이스에 접근할 수 있도록 하는 것이다.

기존 데이터베이스가 존재하면 삭제

DROP DATABASE IF EXISTS `A2`;

테이블 수정

# 컬럼에 제약 조건 추가
ALTER TABLE `ARTICLE` MODIFY (COLUMN) ID INT NOT NULL; # () 수정 가능
ALTER TABLE `ARTICLE` MODIFY COLUMN ID INT NOT NULL AUTO_INCREMENT;

# 컬럼에 PRIMARY KEY 추가
ALTER TABLE `ARTICLE` ADD PRIMARY KEY(ID);

# 컬럼 자료형 변경
ALTER TABLE `ARTICLE` MODIFY COLUMN ID INT UNSIGNED NOT NULL AUTO_INCREMENT;

# 컬럼 추가
ALTER TABLE `ARTICLE` ADD COLUMN `WRITER` VARCHAR(100) NOT NULL AFTER `TITLE`;

# 컬럼 이름 변경
ALTER TABLE `ARTICLE` CHANGE `WRITER` `NICKNAME` VARCHAR(100) NOT NULL;

# 컬럼 삭제
ALTER TABLE `ARTICLE` DROP COLUMN `HIT`;

레코드 수정

UPDATE
	`ARTICLE`
SET
	`NICKNAME` = 'a',
WHERE
	`NICKNAME` = '';

NOW()

SELECT NOW();

INSERT INTO `ARTICLE`
SET
	regDate = NOW(), 
    ...
;

문자열 비교

SELECT *
FROM ARTICLE
WHERE NICKNAME LIKE '홍길%';
# LIKE 은 검색하는 느낌

SELECT *
FROM ARTICLE
WHERE `NICKNAME` != 'a'; # =, != 로 문자열 비교 가능

숫자 비교

SELECT *
FROM ARTICLE
WHERE 
	HIT >=10
    AND
    HIT <=55;

열에 주석달기

SPECIAL BOOL NOT NULL COMMENT 'true:1, false:0',
...

GROUP BY, COUNT

SELECT RECEIVE, COUNT(RECEIVE)
FROM TRANSPORT_LOGISTICS
GROUP BY RECEIVE;

IF, CASE문

SELECT 
	ID AS '번호', 
    ITEM_TYPE AS '품류', 
    CASE
    	WHEN SPECIAL = 0
        THEN 'x'
        ELSE 'o'
    END as '특별 수화물 여부'
FROM SORT_TABLE;

SELECT 
	ID AS '번호', 
    ITEM_TYPE AS '품류', 
    IF(SPECIAL=0, 'x' 'o') AS '특별 수화물 여부'
FROM `SORT_TABLE`;

값을 다르게 나타내기

UPDATE TRANSPORT_LOGISTICS t
JOIN SORT_TABLE st
ON t.item_type = st.item_type
SET t.item_type = st.id;

외래 키 설정

ALTER TABLE
	TRANSPORT_LOGISTICS
ADD FOREIGN KEY(ITEM_TYPE)
REFERENCES
	SORT_TABLE(ID);
    
ALTER TABLE
	CULTURE_TABLE
ADD CONSTRAINT # constraint에 이름을 걸어줄 수 있다. 이 경우, 나중에 제약조건들을 관리하기에 좋다.
	fk_nt FOREIGN KEY(CULTURE_CODE)
REFERENCES
	DISTANCE_CHARGE(CULTURE_CODE);
    
ALTER TABLE
	TRANSPORT_LOGISTICS
ADD CONSTRAINT
	fk_export_nt FOREIGN KEY(RECEIVE)
REFERENCES
	CULTURE_TABLE(NATION);

ERD 설계

ERD 설계에서 중요한 것은 요구사항 분석 잘하기 !!
많이 DB를 짜보기 !

느낀점

오늘 SQL가 어렵다! 까지는 아니었지만, 다 알진 않았다. 주신 문제를 쭉 풀다가 막히는 부분도 있고, 헷갈리는 문법도 있었다. 쭉 따라가다보니 오케이~ 이런 식으로 하면 되구나 하고 이해했는데, 마지막 강사님이 쿼리 짜보라고 했을 때.. 해보려고 했지만 생각만큼 쉽지 않았다... JOIN이 이해가 안되는데, JOIN 문을 좀 잘 짜봐야 할지도 !

오늘 강사님께서 ERD 설계 어려운 분들께..! 하고 조언해주셨다. 조언을 들으니 뭔가 좀 아..! 그렇구나 하는 것들이 있었다. 내가 디비 설계를 잘 못하는구나.. 어렵다.. 느꼈던 계기가, 프로젝트를 하면서 테이블을 자주 수정하게 되고, 팀원이 정규화에 맞게 막 쑥쑥 바꾸고 나니 내가 테이블을 이해 못하는 지경(?)까지 되어버려 그렇게 느낀 것이다. 근데 디비는 원래 오늘 함께 한 예제처럼 초반엔 그렇고 하면서 쓱쓱 바꾸면 되는 것이다. 하는 말씀도 그렇고, 정규화는 디비 설계를 위한 것이라기보단 더 효율적인 디비를 만들기 위해서다! 라고 하신 말씀을 들으니 아..! 원래 그런 거구나 ! 하는 생각이 들어서 자신감을 얻을 수 있었다. 약간 나중에 프로젝트할 때 디비 설계하는 거 상상만해도 아.. 난 잘 못하는데.. 어떡하지.. 했던 게 아 ! 빨리 해보고 싶다 ! 로 바꼈달까.. ㅎ 그리고 DB 설계 어려워한다는 걸 기억하시고 조언해주신 강사님께 너무 감사했다 !! :,)

요즘 강의 중에 자주 해주시는 말처럼, 차근차근 열심히 해보자 ! 누구에게나 어렵고, 누구나에게 도전이니 지치지만 말고 끝까지 파이팅 !!

0개의 댓글