Skip to content

juneyr.dev

Mysql 기본 쿼리 공부하기

mysql, database2 min read

Mysql이란?

Mysql은 관계형 데이터베이스(Relational Database) Management System입니다.

데이터는 컴퓨터에 저장할 수 있는 형태의 정보 입니다. 여기서 의미 있는 사실을 뽑아내면 information 이 됩니다. 그보다 한단계 높여, 좀더 유용한 지식을 knowledge라고 합니다. knowledge보다도 나아지는, 미래를 예측하는데 도움이 되는 지식을 insight라고 합니다. 하지만 신뢰도 100%의 insight라는 건 없겠죠. :)

관계형! 이라고 말을 했는데, 관계형은 데이터와 데이터 간 관계가 중요합니다. 학생이라는 데이터와 수업이라는 데이터 간에는 수강한다 라는 관계가 형성됩니다.

관계형 DB는 Transaction을 지원하여, 데이터베이스의 concurrency를 유지합니다. Transaction은 간단히 말해서 연산을 묶어놓은 것입니다.
1번~4번까지의 연산이 한 트랜젝션이라고 하면, 한 트랙젝션을 수행할 때 DB에 1번부터 4번이 모두 반영되거나, 모두 반영되지 말아야합니다. 은행에서, 카드를 넣고 잔액을 확인하고 인출하는 일련의 과정을 트랜젝션으로 볼 수 있습니다. 중간에 취소되면 그 결과는 DB에 반영되지 않습니다 :) 전자상거래를 비롯해 데이터베이스의 동시성이 중요한 부분에서 많이 쓰입니다. 트랜젝션은 어려운 기술이기때문에, 느리고 무겁습니다.

Nosql

따라서 빅데이터에는 무겁고 느린 트랜젝션을 지원하는 DB를 쓸 필요가 없습니다. nosql(Not only sql)은, 관계형 DB가 아닌 DB들을 통칭하는 말입니다. 일반적으로 RDB는 러닝커브가 가파르지만 nosql은 러닝커브가 낮은 편입니다. 그래서 하루동안 잘 배워도 서비스에 적용할 수 있다고 합니다. 따라서 빠르게 배워야하는 경우 혹은 관계형 DB를 쓸 수 없는 경우 씁니다. 하지만 이 포스팅에서는 nosql이 아닌 mysql 을 다뤄보겠습니다.

Sql

Structed query language라는 뜻으로, 시퀄이라고 부르기도 합니다.

CRUD 문법

CRUD는 Create / Retrieve / Update / Delete 의 줄임말입니다. 삽입 / 조회 / 변경 / 삭제의 이 4가지 기능이 가장 기본적인 DB의 연산입니다.

Database 만들고 사용하기

Table만들기

Table 내용 조회하기

Table 내용 변경하기 (주의)

무조건 SELECT문 실행해본 뒤에 해볼 것. DB에 영향을 끼칠 수 있는 구문.

Table 내용 삭제하기 (주의)

무조건 SELECT문 실행해본 뒤에 해볼 것. DB에 영향을 끼칠 수 있는 구문.

TABLE의 내용을 보고싶을때

내가 테이블을 만들 때 쓴 쿼리가 그대로 나온다. TABLE을 좀 깔끔하게 보고싶을때. DB엔진명과 Charset을 알 수 있다.

데이터타입

예를 들어서!

을 한다고 해보자 . 여기에는 여러 칼럼이 들어갈 수 있고, 칼럼에 맞춰서 적절한 데이터타입 을 설정해주는게 중요하다. 잘못된 데이터타입을 입력했다가는 메모리 낭비가 아주 심한 DB를 구축하는게 될 수 있다!

데이터 타입들은 (다음링크)에서 자세하게 살펴볼 수 있다. 간단하게 살펴보자.

날짜 처리하는 쿼리

날짜를 넣으면, GMT기준으로 들어간다. 예전에는 한국에서 만들면 GMT+9 기준으로 디비에서 처리하도록했는데, 다들 GMT로 저장해두고, 어플리케이션 단에서 GMT + 9로 나오도록한다.

특정 날짜 혹은 시간에 값을 더하거나 빼주고싶을 때

칼럼들 제약 조건

PRIMARY KEY

반드시 고유해야하는 대표값이라구 한다.

DEFAULT

ENUM

프로그래밍의 enum 타입과 동일하며, 잘 사용하지 않는 경향이 있다. 그런데 왜 쓸까? 중요한 건 정렬 할 때 쓸모가 있다.

코드를 보자

위의 코드에서 티어를 브론즈 / 실버 / 골드 / 플레 / 다이아로 초기화했다. ENUM이 아니라 CHAR로 줬다면, TIER로 정렬했을 때 abc순으로 정렬이 되지만 ENUM으로 줬기때문에 티어 순으로 정렬할 수 있다.

MYSQL에 여러개를 INSERT하기

MULTIINSERT

하나의 테이블에 여러개의 값을 입력하는 방법. 하지만 정말 많은 값을 입력하는데는 한계가 있다.

CSV LOAD

csv파일을 로딩하는 방법. csv파일은 엑셀이나 구글 spreadsheet로도 만들 수 있다. 표를 작성하는 프로그램이라면 웬만해서는 지원하는 형식이다. csv파일을 작성한뒤에

구분자에 ,를 넣으면 ,로 필드를 구분한다. 적절한 로컬파일 경로를 사용해서 정말 다량 (몇천, 몇만개) 의 필드를 넣을 수 있다.

이 방법은 서버의 데이터를 외부에서 주는 경우가 많기때문에 쓴다.

그외 꼭 알아야할 쿼리들

WHERE 조건절

LIKE

IN (중첩쿼리)

쿼리의 결과는 3가지가 있다. 그냥 값 하나 혹은 NULL인 경우, 1차원 값(Scalar 값)이라고 한다. 컬럼의 집합(레코드)인 경우도 있는데, 이걸 2차원 값(Set)이라고 한다. (30, 40, 50) 과 같은 식으로 나온다. 대개의 경우 테이블로 나온다.

SELECT는 테이블에 대해서 닫힌 연산이다.

Aggregate Function

GROUP BY / HAVING

  • 원하는데서 전체 통계를 낼때
  • 사용자별로 group을 만들면됨 GROUP으로 묶어서 표를 보여준다. 이때 기준이 되는 칼럼도 같이 선택해서 보여줘야한다. HAVING은 그룹함수에서의 where(조건절) 역할을 한다.

ORDER BY

말 그대로 순서대로 나오게 하는 연산이다. 하지만 느린 연산이기도 하다. 자주 정렬할 일이 있다면, 그 컬럼에 대해서 index를 만드는 방법을 추천한다.

ALTER

테이블을 변형하는 쿼리

DROP

테이블이나 칼럼을 삭제하고 싶을때 쓴다.