SQL
MySQL 다시보기 01 - 데이터타입/CREATE/INSERT/DELETE/UPDATE/DELETE/기본코어쿼리
H-V
2021. 10. 3. 09:58
유투브 'freeCodeCamp.org' 참조
01 데이터 타입
- DB및 SQL을 사용함에있어 데이터형은 수십가지에 달한다. 하지만 '코어'역할은 하는 데이터 형은 6가지
- INT - 숫자형으로 소수형을 제외하고 모든 숫자형을 설정 할 수 있다. 보통 INT로 숫자형을 거의 99%로 표현하지만 대기업에서 쓰는 디비형태라던지 정말 수억개의 데이터가 있으면 LONG으로 처리하는 경우도 있다.
- DECIMAL(M, N) - 어떠한 숫자를 소수형으로 만드는 데이터형. M은 실수의 총 자리수, N은 소수점 자리수를 나타냄
(decimal(5, 2)는 전체 자릿수를 5자리로 하되, 그 중 소수점 이하를 2자리로 하겠다는 의미) - VARCHAR - 문자열을 담는 형. VARCHAR(1)의 방법으로 만들며 '()'의 숫자는 몇개의 글자가 들어갈 수 있는지 정함. 하지만 한글의 경우 한 단어는 2바이트를 차지함 즉 VARCHAR(50)을 하면 25개만 들어가짐
- BLOB - 주로 게시판이나 큰 데이터(이미지, 파일 등)를 DB에 넣을때 사용한다.
- DATE - 시간/날짜를 지정하는 데이터형. 'YYYY-MM-DD' 형태
- TIMESTAMP - DATE와 비슷하나 시간을 기록 할 수 있는 형태. 'YYYY-MM-DD HH:MM:SS' 형태
(예로 아이디 생성일자를 저절로 세팅 해준다)
02 테이블 만들기
- SQL을 사용함에 있어 항상 먼저 선행되어야 하는 작업은 'DB만들기' 이다. DB없이는 CRUD는 커녕 기본적인 SELECT문이라던지의 활동을 하지 못한다
- 위 사진 처럼 데이터베이스를 꼭 만들어 주도록 하자
CREATE DATABASE "DB 명" CHARACTER SET UTF8; 혹은 'Navigator'에 우 클릭 'Create Schema'로도 가능
- 테이블 만들기 / 삭제
CREATE TABLE student (
student_id INT PRIMARY KEY,
stduent_name VARCHAR(20),
major VARCHAR(20)
);
DROP TABLE student;
- 테이블 생성 시 이름을 제외하고는 대문자로 쓰는게 SQL 관례.
- VARCHAR 숫자 설정시 무리하게 (1000) 이렇게 설정을하면 쓸데없는 DB공간을 차지하게 된다
- '이름명 데이터형' 순으로 작성
- 디비 프로그램에 따라 이름명 중(예: name) 특정 이름은 못 쓰는 프로그램도 있다.
- PRIMARY KEY란?
기본적으로 DB에는 키를 설정하는데 이 '키(KEY)'는 DB에서 조건에 만족하는 각 행을 찾거나 구별하는 유일한 기준이 되는 속성. 키의 종류는 여러가지이나 각 테이블은 반드시 기본 키를 가지는게 좋다.
기본 키(PRIMARY KEY)는 각 테이블의 주 키(MAIN KEY)로 위에 설명했듯이 특정 행을 구분하는 유일한 속성.
기본 키의 특징으로는
1) NULL값을 가질 수 없다
2) 동일한 중복값이 저장 될 수 없다
- 테이블 수정 / 삭제
ALTER TABLE student ADD gpa DECIMAL(3,2);
ALTER TABLE student DROP COLUMN gpa;
03 INSERT
1) 가장 기본적인 INSERT 문
INSERT INTO student VALUES(1, 'Jack', 'Biology');
- INSERT INTO "테이블명" VALUES (선언된 값1, 2, 3);
- 테이블 생성시의 순서에 맞게 데이터 내용을 맞춰서 넣어 줘야 한다
2) 데이터 입력시 모르는 부분이나 NULL값으로 처리하고 싶을 때
INSERT INTO student(student_id, student_name) VALUES(3, 'Vic');
- 값을 모르는 부분을 선언하지않고 넣으면 NULL값으로 처리 할 수 있다.
3) 데이터 입력시 제약 걸기
CREATE TABLE student (
student_id INT AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(20) NOT NULL,
major VARCHAR(20) UNIQUE DEFAULT 'undecided'
);
- AUTO_INCREMENT - 자동으로 값을 올려줌. 항상 PRIMARY KEY랑 같이 다님
- NOT NULL - 데이터에 NULL값 불가
- UNIQUE - 'UNIQUE'가 선언된 행에는 중복 값 삽입 불가
- DEFAULT - 아무 값을 넣지않으면 이 값으로 세팅 됨
더보기
AUTO_INCREMENT를 걸고 나면 ID는 신경쓰지않고 작업이 가능하다.
여기서 유의할 점은 ID를 제외하고 데이터를 넣을 시에 계속해서 "테이블명(선언된 열 이름1, 2..) VALUES(값 1,2,3...)" 으로 명확하게 해줘야 한다.
예: INSERT INTO student(student_name, major) VALUES('Jack', 'Biology');
04 UPDATE & DELETE
1) UPDATE
UPDATE student SET major = 'Bio' WHERE major = 'Biology';
UPDATE student SET major = 'Comp Sci' WHERE major = 'Computer Science';
- UPDATE "테이블명" SET "바꾸자하는 컬럼 명" = "바꿀 이름" WHERE "컬럼 명" = "선언된 컬럼 명";
- 'WHERE'절을 적절히 활용을 해야 전체데이터를 바꾸는 실수를 하지 않게 된다. 즉 위의 코드는 BIOLOGY라고 선언된 열만 바꾸고싶은 것. 하지만 WHERE절이 없으면 MAJOR 열 전체가 바뀌게 된다! 조심하자!
- WHERE 절 활용
UPDATE student SET major = 'Not decided' WHERE student_id = 2;
UPDATE student SET major = 'BioChemistry' WHERE major ='Bio' or major = 'Chemistry';
UPDATE student SET student_name = 'Vic' WHERE major ='Not decided' or student_id = 2;
→ student_id 가 2인 데이터의 major 를 'Not decided'로 수정
2) DELETE
DELETE FROM student WHERE major = 'Not decided';
- DELETE FROM "테이블명" WHERE "컬럼 명" = "선언된 데이터 명";
- 똑같이 WHERE절을 적절히 써줘야 모든 데이터를 지우는 일이 없다.
05 기본 쿼리
- DB의 가장 기초는 'SELECT'로 부터 시작 된다. SELECT는 '선택 해라, 가져 와라' 라는 뜻
쿼리를 짤때 기본 코어 쿼리문들을 알아 보자
- '*' → 모두, 전부 포함의 뜻
- 'FROM' → 어떠한 테이블로 부터
SELECT * FROM student;
- 'ORDER BY' → 정렬을 위한 쿼리. 기본값은 'DESC'로 내림차순이 기본. 'ASC'는 오름차순. 여러개도 한꺼번에 정렬이 가능함(먼저 선언된 순으로 정렬)
SELECT student_name FROM student ORDER BY major ASC;
- 'LIMIT' → 불러오는 데이터 양을 한정 시킬 수 있음
SELECT major FROM student ORDER BY student_id LIMIT 2;
- 'WHERE' → 데이터를 불러올때 정확한 컬럼 명을 주어 조금 더 정교하게 데이터를 불러옴. WHERE절 또한 OR/AND를 통해 컬럼명을 여러개 선정 가능
WHERE절은 '<,>,<=,>=,=,<>, AND, OR 등과 같이 쓸 수 있음
SELECT student_name from student WHERE student_id = 5; SELECT student_name from student WHERE student_id = 5 OR major = 'Sociology';
- 'IN' → 조건절에서 사용하며 다수의 비교값과 비교하여 하나라도 같은 값이 있다면 그 값들을 리턴한다
SELECT * FROM student WHERE major IN ('Biology', 'Sociology'); → 즉 major가 'Biology', 'Sociology' 둘중 하나인 것 모두 출력
↓