이제는 실전!
더 상세하게 알아보자!
사실 이 내용은 두 달 전.. 수업 후 노션에 정리해놓은 내용이다.
벨로그 게시글을 안올린지 오래 되어 밀린 기록들을 올리려 한다.
그래서 드는 생각은 아 이거 중요하구나! 이다.
배울 때는 몰랐다. 와르르 배우고 이걸 왜 알아야하는지, 그래서 언제 쓰이는지 중요성과 필요성을 제대로 느끼지 못했다. 근데 정말 모두모두 필요한 내용들이었다. 🎉
결국 프로젝트를 진행하면서 많은 걸 느꼈다.
백과 프론트 사이 데이터가 오고가는 것을 나도 확인하면서 진행하게 된다.
그리고 컨트롤러의 코드를 보면서 백에서 어떤 식으로 명령을 하는 지?
어느정도 내가 이해를 해야 수월했다. 알고 모르고의 차이가 아주 컸다!
아무튼 그렇다. 몰라서 나쁠 건 없다. 알면 다 좋은 것 들!
CREATE
로 생성할수있다.언더바(_)
로 구분해준다.-- DATABASE 생성 (이모지 지원에 한계가 있다.)
CREATE DATABASE db_name
-- DATABASE 설정
DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- DATABASE 생성과 설정 (한글 인코딩, 이모지 지원 사용 가능.)
CREATE DATABASE db_name
DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
CREATE TABLE
-- -------------------- 기본 형태
CREATE TABLE 테이블명 (
속성이름1 데이터타입1 PRIMARY KEY,
속성이름2 데이터타입2,
[FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)]
);
-- -------------------- 사용 예시
CREATE TABLE USER(
id varchar(10) PRIMARY KEY not null,
password VARCHAR(20) not null,
age INT UNSIGNED
);
-- -------------------- 기본 형태
CREATE TABLE 테이블명 (
속성이름1 데이터타입1 PRIMARY KEY,
속성이름2 데이터타입2,
[FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)]
);
-- -------------------- 사용 예시
-- customer 테이블의 custid 속성을 참조해서 외래키로 사용하겠다.
FOREIGN KEY (custid) REFERENCES customer(custid)
-- -------------------- cascade 사용 예시
-- 관련된 데이터가 어디선가 삭제 시 함께 삭제된다.
FOREIGN KEY (custid) REFERENCES customer(custid) on delete cascade);
-- -------------------- 기본 형태
-- 새로운 속성 추가 (column 추가)
ALTER TABLE 테이블명 ADD 속성이름 데이터타입;
-- 기존 속성 삭제 (column 삭제)
ALTER TABLE 테이블명 DROP COLUMN 속성이름;
-- 기존 속성 수정 (column 수정)
ALTER TABLE 테이블명 MODIFY 속성이름 데이터타입;
-- -------------------- 사용 예시
ALTER TABLE user ADD gender ENUM('여자', '남자') not null; -- enum은 문자열만 가능.
ALTER TABLE user DROP COLUMN age;
ALTER TABLE user MODIFY gender VARCHAR(2) not null;
TRUNCATE
의 경우 테이블 값들을 초기화 할 때 사용한다. 제목 행만 남긴다고 생각!DROP TABLE 테이블명;
TRUNCATE TABLE 테이블명;
-- -------------------- 기본 형태
INSERT INTO 테이블명 (필드1, 필드2, 필드3, ...) VALUES (값1, 값2, 값3, ...) ;
INSERT INTO 테이블명 VALUES (값1, 값2, 값3, ...) ;
-- -------------------- 사용 예시
INSERT INTO user (id, password) VALUES ('jeong', '1234');
INSERT INTO user VALUES ('jeong', '1234', 99);
-- -------------------- 기본 형태
-- FROM, WHERE, SELECT 순으로 읽는다.
SELECT 속성이름, ... FROM 테이블이름 [WHERE 검색조건은 선택.] ;
-- 테이블명의 모든 값(*)을 조회 할 수 있다.
SELECT * FROM 테이블명 ;
-- 테이블의 특정 속성만 조회
SELECT 속성1, 속성2 FROM 테이블명 ;
-- -------------------- 사용 예시
-- member테이블에서 name이 '보노보노'인 사람의 phone을 찾아라.
SELECT phone FROM member [WHERE name = '보노보노'] ;
SELECT * FROM member ;
SELECT name, addr FROM member ;
ASC
: Ascending, 오름차순 (기본값)DESC
: Descending, 내림차순-- -------------------- 기본 형태
-- 조건 복합적으로 사용 시 꼭 순서대로 작성!
SELECT 속성이름, ... FROM 테이블이름 [WHERE 검색조건은 선택.][ORDER BY 속성이름] ;
-- -------------------- 사용 예시
-- custid가 bunny인 회원
select * from customer where custid='bunny';
-- birth가 2000-01-01 이후에 태어난 회원 조회
select * from customer where birth >= '2000-01-01';
-- birth가 2000-01-01 ~ 2005-01-01 사이에 태어난 회원 조회
select * from customer where birth between '2000-01-01' and '2005-01-01';
-- addr이 '대한민국 서울'이거나 '미국 로스앤젤레스'둘 중 하나라면 조회하겠다.
select * from customer where addr in('대한민국 서울', '미국 로스앤젤레스');
-- %는 앞 뒤로 아무 문자가 있어도 되고 없어도 된다. 즉 '대한민국'을 포함하기만 하면 전부 선택.
select * from customer where addr like '%대한민국%';
-- 언더바 2개. 앞에 2자리 뒤에 '수'가 들어오는 사람 조회. 총 3글자여야 한다.
select * from customer where custname like '__수';
-- 혼합해서 사용도 가능하다. 앞에 글자는 아무거나 상관없다. 뒤에서 두번째 글자가 '해'여야 한다.
select * from customer where custname like '%해_';
-- is null 사용 예시
select * from customer where custname is null;
-- -------------------- 복합 조건 사용 예시
-- AND, OR, NOT
select * from customer where addr like '%대한민국%' AND birth <= '2000-05-05';
select * from customer where addr like '%대한민국%' OR birth <= '2000-05-05';
-- customer테이블을 custname을 기준으로 오름차순하겠다.
select * from customer order by custname asc;
-- where과 order by 같이 쓰기. where이 앞에 와야 한다!
-- addr에 대한민국을 포함하고 잇는 회원 조회. 그리고 custname기준으로 내림차순 정렬하여 보여주기.
-- 조회를 먼저 하고 정렬하고 보여주게 되는 것이다.
select * from customer where addr like '%대한민국%' order by custname desc;
-- limit. 위와 동일하게 하면서 첫번째 1명만 가져오겠다.
-- 복합 조건을 사용하려면 꼭 아래 순서대로 작성해줘야한다!
select * from customer where addr like '%대한민국%' order by custname desc limit 1;
-- -------------------- 기본 형태
UPDATE 테이블명 SET 필드1 = 값1 WHERE 필드2 = 조건2;
-- -------------------- 사용 예시
UPDATE customer SET custname = '보노보노' WHERE custid = '해달';
-- -------------------- 기본 형태
DELETE FROM 테이블명 WHERE 필드1 = 값1;
-- -------------------- 사용 예시
DELETE FROM customer WHERE custid = 'jeooong22';
-- -------------------- 기본 형태
SELECT [DISTINCT] 속성이름, ... FROM 테이블이름 [WHERE 검색조건은 선택.][ORDER BY 속성이름] ;
-- -------------------- 사용 예시
SELECT [DISTINCT] addr FROM customer;
-- -------------------- 기본 형태
SELECT [DISTINCT] 속성이름, ...
FROM 테이블이름 [WHERE 검색조건은 선택.][ORDER BY 속성이름][LIMIT 개수] ;
-- -------------------- 사용 예시
SELECT * FROM customer WHERE addr like '%대한민국%' ORDER BY custname DESC LIMIT 1;
SUM()
: 합계AVG()
: 평균MAX()
, MIN()
: 최대값, 최소값COUNT()
: 행 개수 세기COUNT(DISTINCT)
: 중복값을 제외한 행 개수 세기-- -------------------- 사용 예시
SELECT COUNT(*) FROM orders;
-- as를 사용해 보여지는 이름을 지정할 수 있다. 새로운 속성을 만들어 준 셈.
SELECT custid SUM(amount) AS 'total_amount' FROM orders GROUP BY custid;
HAVING
은 GROUP BY
와의 결과를 나타내는 그룹을 제한한다.-- -------------------- 기본 형태
SELECT [DISTINCT] 속성이름, ...
FROM 테이블이름 [WHERE 검색조건은 선택.]
[GROUP BY 속성이름][HAVING 조건식]
[ORDER BY 속성이름][LIMIT 개수] ;
-- -------------------- 사용 예시
SELECT custid, SUM(amount) AS 'total_amount' FROM orders WHERE custid != 'bunny' GROUP BY custid HAVING SUM(amount) >= 5;
SELECT custid, SUM(amount) AS 'total_amount' FROM orders GROUP BY custid HAVING SUM(amount) >= 5;
-- -------------------- 기본 형태
SELECT 속성이름, ...
FROM 테이블이름1, 테이블이름2
WHERE 조인조건 AND 검색조건 ;
SELECT 속성이름, ...
FROM 테이블이름1 INNER JOIN 테이블이름2 ON 조인조건
WHERE 검색조건 ;
-- -------------------- 사용 예시
SELECT customer.addr, orders.* FROM customer
INNER JOIN orders ON customer.custid = orders.custid;