SQL

MySQL 다시보기 01 - 데이터타입/CREATE/INSERT/DELETE/UPDATE/DELETE/기본코어쿼리

H-V 2021. 10. 3. 09:58

유투브 'freeCodeCamp.org' 참조

 

 

 

01 데이터 타입

  • DB및 SQL을 사용함에있어 데이터형은 수십가지에 달한다. 하지만 '코어'역할은 하는 데이터 형은 6가지
  1. INT - 숫자형으로 소수형을 제외하고 모든 숫자형을 설정 할 수 있다. 보통 INT로 숫자형을 거의 99%로 표현하지만 대기업에서 쓰는 디비형태라던지 정말 수억개의 데이터가 있으면 LONG으로 처리하는 경우도 있다. 

  2. DECIMAL(M, N) - 어떠한 숫자를 소수형으로 만드는 데이터형. M은 실수의 총 자리수, N은 소수점 자리수를 나타냄
    (decimal(5, 2)는 전체 자릿수를 5자리로 하되, 그 중 소수점 이하를 2자리로 하겠다는 의미)

  3. VARCHAR - 문자열을 담는 형. VARCHAR(1)의 방법으로 만들며 '()'의 숫자는 몇개의 글자가 들어갈 수 있는지 정함. 하지만 한글의 경우 한 단어는 2바이트를 차지함 즉 VARCHAR(50)을 하면 25개만 들어가짐
  4. BLOB - 주로 게시판이나 큰 데이터(이미지, 파일 등)를 DB에 넣을때 사용한다. 

  5. DATE - 시간/날짜를 지정하는 데이터형. 'YYYY-MM-DD' 형태
  6. 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;
  1. 테이블 생성 시 이름을 제외하고는 대문자로 쓰는게 SQL 관례. 
  2. VARCHAR 숫자 설정시 무리하게 (1000) 이렇게 설정을하면 쓸데없는 DB공간을 차지하게 된다
  3. '이름명 데이터형' 순으로 작성
  4. 디비 프로그램에 따라 이름명 중(예: 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'
);
  1. AUTO_INCREMENT - 자동으로 값을 올려줌. 항상 PRIMARY KEY랑 같이 다님
  2. NOT NULL - 데이터에 NULL값 불가
  3. UNIQUE - 'UNIQUE'가 선언된 행에는 중복 값 삽입 불가
  4. 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';
  1. UPDATE "테이블명" SET "바꾸자하는 컬럼 명" = "바꿀 이름" WHERE "컬럼 명" = "선언된 컬럼 명";
  2. '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';
  1. DELETE FROM "테이블명" WHERE "컬럼 명" = "선언된 데이터 명";
  2. 똑같이 WHERE절을 적절히 써줘야 모든 데이터를 지우는 일이 없다. 

 

 

 

 

 

 

05 기본 쿼리

  • DB의 가장 기초는 'SELECT'로 부터 시작 된다. SELECT는 '선택 해라, 가져 와라' 라는 뜻

쿼리를 짤때 기본 코어 쿼리문들을 알아 보자

  1. '*' → 모두, 전부 포함의 뜻
  2. 'FROM' → 어떠한 테이블로 부터 
    SELECT * FROM student;​
  3. 'ORDER BY' → 정렬을 위한 쿼리. 기본값은 'DESC'로 내림차순이 기본. 'ASC'는 오름차순. 여러개도 한꺼번에 정렬이 가능함(먼저 선언된 순으로 정렬)
    SELECT student_name FROM student ORDER BY major ASC;​


  4. 'LIMIT' → 불러오는 데이터 양을 한정 시킬 수 있음 
    SELECT major FROM student ORDER BY student_id LIMIT 2;​


  5. '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';


  6. 'IN' → 조건절에서 사용하며 다수의 비교값과 비교하여 하나라도 같은 값이 있다면 그 값들을 리턴한다
    SELECT * FROM student WHERE major IN ('Biology', 'Sociology');
    → 즉 major가 'Biology', 'Sociology' 둘중 하나인 것 모두 출력
     ↓