본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[57일차]20210603 MariaDB mysql table3개 만들어서 연결하기 / ㅣleft JOIN

반응형

 

프로젝트 내용 

사이트 리뉴얼 

로그인 = jwt 활용

카카오 로그인 

네이버 로그인

구글 로그인

게시판 기능

DB

채팅 (1:관리자) 

관리자페이지

팝업관리

* DB에 내용 넣어서 뿌려주기 (sub 페이지를 하나하나html 으로 하기보단) 

반응형 (모바일) 

발표 : 어떤 기능을 어떻게 넣었고 

 

작업하는 순서 

내가 만드려는 사이트의 페이지가 몇개가 있는지 확인 (페이지 개수) 

- url port 값들이 얼마나 있는지 

디자인 레이아웃 (페이지마다 공통의 레이아웃 부터 ) 

DB설계 

상품등록한 DB 상품 리스트들을 쭉 뿌리기 (게시판과 똑같음) 

 

 

https://gitmind.com/kr/

 

GitMind - 무료 온라인 마인드 맵 도구

GitMind는 브레인 스토밍, 프로젝트 계획, 개발, 행동 및 기타 창의적인 작업을위한 무료 온라인 마인드 맵 메이커입니다. 이 도구를 사용하면 수많은 사용자와 마인드 맵을 공유하고 공동 작업 할

gitmind.com

 

 

 


 

 

어제 코드 수정 

 

 

 


 

 

DB - table 3개 만들어보기 

 

 

 

데이터 베이스 class mysql 에 만들기 

$create database class

 

<- 요기 들어가서 

 

 

 

왼쪽 class로 적고 오른쪽  암호 적고 / 열기 클릭 

쿼리 클릭 

아래 table 생성 후 실행 

 

 

 

mysql 창보다 위의 장점 - 썼던 코드를 이어서 수정할 수 있는 점

mysql text 수정 불편

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

첫 번째 테이블 curriculum 만들기 

CREATE TABLE curriculum(
	id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	subject VARCHAR(100) NOT NULL, 
	start_date DATE NOT NULL,
	end_date DATE NOT NULL,
	content TEXT 
)CHARACTER SET UTF8 COLLATE utf8_general_ci

이걸 쓰고 주석처리할 수 있어서 좋음 

 

mysql

DATE FORMAT 

NOW()

 

select + 함수명 을 치면 

select NOW()

select DATE_FORMAT('2021-06-03', '%y%m%d') 

 

%y -> 두 자리 연도 02

%Y -> 네 자리 연도 2002

%m -> 06 

%M -> June / 영어로 나옴 

%d -> 03

%D -> Third / 영어로 나옴 

 

STR_TO_DATE()는 빨간색으로 나온다 

STR_TO_DATE() -> DATE 

DATE_FORMAT -> STRING

(varchar 써서 그냥 string으로 쓸 때 )  

 

 

 

 

 

 

삭제하고 다시 만들기 

INSERT INTO curriculum(
	subject, start_date, end_date,content
) VALUES (
	'blockChain', 
	STR_TO_DATE('2021-06-03', '%Y-%m-%d'),
	STR_TO_DATE('2021-06-21', '%Y-%m-%d'),
	'블록체인 내용입니다'
)

 

3개 만들기 

 

7월달만 가져오기 

SELECT * FROM curriculum WHERE DATE_FORMAT(start_date,'%m') = '07';

시작 날짜를 언제부터 ~ 언제까지 가져오기 between and 

스트링으로 받아서 날짜 형태로 바꿔서 select 해라 

 

 

SELECT * FROM curriculum WHERE start_date BETWEEN '2021-06-01' AND '2021-06-30'

 

SELECT MONTH(start_date) FROM curriculum;

 

 

SELECT YEAR(start_date) FROM curriculum;

 

 

 

SELECT month(start_date) FROM curriculum;

 

 

SELECT day(start_date) FROM curriculum;

 

 

 

 

UNION ALL - table & table 연결할 때 

(selecet * from curriculum) UNION ALL (select * from curriculum) 

select -> 조회하는 기능 /  새로운 테이블도 보여줄 수 있음. (as) 

SELECT end_date AS 'date' FROM curriculum
UNION ALL
SELECT start_date AS 'date' FROM curriculum;

 

 

 

필드명  'date' 라고 curriculum 의 end_date를 가져오기 

 

 

 

field 가 없는 data 만들어서 조회하기 

 

select 1;

이게 된다,, 저 1은 data값 field 값이 없을 때 data 값이 field 값이 된다. 

 

 

 

 

 

 

테이블 2개 더 만들기 

CREATE TABLE skill_item(
	id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(50) NOT NULL,
	TYPE VARCHAR(50) NOT NULL
)CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

CREATE TABLE skill(
	curr_id INT NOT NULL,
	item_id INT NOT NULL
)CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

 

계속 오류난 이유 : 

1. ; 세미콜론안붙임

2. 마지막내용에 , 콤마 붙임

3. NOT_NULL 이라고 씀 

 

 

 

curriculum 강의 리스트

skill_item 배우는 과목 리스트 

 

 

skill_item table data 넣기 

INSERT INTO skill_item (NAME, TYPE) VALUES ('html', 'front-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('CSS', 'front-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('JavaScript', 'front-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('NodeJS', 'back-end');
INSERT INTO skill_item (NAME, TYPE) VALUES ('MariaDB', 'back-end');

추가 

INSERT INTO skill_item (NAME, TYPE) VALUES ('C++', 'Programming');
INSERT INTO skill_item (NAME, TYPE) VALUES ('Unity', 'Programming');

 

총 7개 data

 

 

블록체인이 id = 2 번 

 

 

SELECT * FROM skill WHERE curr_id=2;

 

 

위의 명령을 괄호로 감싸서 하나의 table로 만들기 (select는 테이블을 만들어서 보여주는것! ) 

 

 

SELECT * FROM (SELECT * FROM skill WHERE curr_id=2) AS A

- AS A  = A 라는 filed로 나타내줘 

SELECT A.item_id FROM (SELECT * FROM skill WHERE curr_id=2) AS A

 

 

SELECT * FROM (SELECT * FROM skill WHERE curr_id=2) AS A
LEFT JOIN skill_item AS B 

-> 오류 / 조건이 항상 붙음 : item id 와 id 값만 같은 것만 출력시키겠다. 

 

 

SELECT * FROM (SELECT * FROM skill WHERE curr_id=2) AS A
LEFT JOIN skill_item AS B
ON A.item_id=B.id;

 

A테이블 기준 나오고 B테이블이 옆으로 붙음  - 현재 모든 fileds를 보여주고 있음 

만약 name과 type만 나타내고 싶으면

 

SELECT B.name,B.type FROM (SELECT * FROM skill WHERE curr_id=2) AS A
LEFT JOIN skill_item AS B
ON A.item_id=B.id;

 

 

 

해시태그도 태그 생길때마다 db입력하면 db소모 -> 위처럼 해주면 좋다 

 

위의 명령문은 rows 수가 다르다 / 그래서 on 이라는 조건문을 꼭 써야함 

id / item_id  값 같은 것 가져오기 

 

 

 

 

foreign key 

굳이 안해도 쿼리문 작성은 된다.

근데 falling key의 기능이 좋다

id를 삭제할 때 item_id 의 값도 같이 삭제할 수 있다. 

 

만드는 시기 테이블생성할 때 or 생성 후 선언 

 

스킬이 중개자 역할

스킬의 curr_id를 커리큘럼의 id와 연결하겠다~둘을 연결하는 변수명이 skillcurrid 이다 

 

여기서 새로고침 해서 skill 클릭 -> 외래키 누르면 -> 만든 외래키가 나옴 

restrict - 기능자체르 ㄹ막아버림 / 잘못하게되면 삭제 안되도록 (?) 

cascade - 나랑 연관된 아이들 다 삭제 (부모 테이블 삭제되면 나도 삭제될게) 

 

 

이제 스킬아이템에다가 foreign key  

 

 

curr_id 6번 사라짐

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형