SQL/MySQL

[SQL] MySQL 기본

jamong5 2023. 5. 24. 01:12

자주 사용하는 명령어들을 정리했습니다.

 

터미널 접속 및 종료

docker exec -it "컨테이너명" bash #도커를 쓰는 경우
mysql -u root -p

EXIT # 종료

 

이제 본격적으로 진행해봅시다

 

DataBase

# 생성
CREATE DATABASE "db명" CHARACTER SET utf8 COLLATE utf8_general_ci;
# 확인
SHOW databases;
# 접근
USE "db명"
# 삭제
DROP DATABASE "db명";

 

Table

# 생성
CREATE TABLE '테이블명' ('컬럼명' 'datatype' '여러 설정', ...);
# 확인
SHOW tables;
# 정보확인
DESC '테이블명' # description

 

CRUD - Read

BASIC

SELECT '필드명'
FROM '테이블명'
WHERE '조건'
LIMIT '레코드 수'

WHERE 절에 자주 쓰이는 구문

  • >, <, >=, <=
  • =, != (<>)
  • AND, OR
  • BETWEEN 0 AND 10
  • '필드명' IS NULL / IS NOT NULL
  • IN (0,1,2,3,4)
  • LIKE '문자열 패턴' ( _ : 한개 문자, % : 여러개 문자)
  • ISNULL('필드명')

SELECT 절에 자주 쓰이는 구문

  • as '변수명'
  • DISTINCT : 중복제거
  • COUNT('필드명')
  • IFNULL('필드명', null 이면 사용할 값)
  • DATE_FORMAT('필드명', '변경할 포맷')
  • MIN,MAX('필드명)
  • CASE WHEN '조건' THEN '적용' ELSE '적용' END

 

GROUP BY

SELECT '컬럼명' FROM '테이블명' GROUP BY '기준 컬럼명';

기준 컬럼으로 GROUP BY 할때 다른 컬럼들은 합을 내든, 평균을 내든 연산을 해줘야하니, SELECT 에 작성할 때

  • AVG('컬럼명')
  • SUM('컬럼명')
  • MIN('컬럼명')
  • MAX('컬럼명')

과 같이 조건을 추가해주면 됩니다.

GROUP BY 로 그룹화된 상태에서 조건을 줄때는 WHERE 절이 아닌 HAVING 절을 사용합니다.

 

ORDER BY

SELECT * FROM '테이블명' ORDER BY '기준 컬럼' DESC/ASC
  • DESC : 내림차순 (descending)
  • ASC : 오름차순 (ascending)

 

DATE 필드

  • DATE_FORMAT('필드', '포맷')
  • YEAR(), MONTH(), DAY()==DAYOFMONTH(), HOUR(), MINUTE(), SECOND() : 연,월,일,시,분,초 추출
  • CURDATE() : 오늘 날짜

 

문자열 파싱

  • SUBSTRING('문자열', '시작위치', '길이') # 여기서 시작위치는 1부터 카운트합니다.
  • LEFT('문자열', '길이')
  • RIGHT('문자열', '길이')

 

JOIN

  • JOIN = INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN : MySQL 에서는 지원하지 않습니다. LEFT JOIN 과 RIGHT JOIN 을 UNION 하여 사용합니다.
SELECT * FROM '테이블A' A JOIN '테이블B' B ON A.key = B.key
SELECT *
FROM '테이블A' A LEFT JOIN '테이블B' B ON A.key=B.key
UNION
SELECT *
FROM '테이블A' A RIGHT JOIN '테이블B' B ON A.key=B.key

 

나누기, 몫, 나머지

  • /
  • %
  • MOD(a,b)
  • a MOD b
  • FLOOR(5/3)

몫은 나누기한 결과를 FLOOR 로 소숫점을 버려서 구합니다.

 

반올림, 올림, 버림

  • ROUND('값', '자를 자리')
  • CEILING('값')
  • FLOOR('값')

ROUND 의 '자를 자리' 는 정수가 가능합니다. (음수, 0, 양수)

0이 소숫점을 버리는 위치고, 음수면 정수 부분을, 양수면 소수점 부분을 자릅니다.

 

PARTITION BY, ROW_NUMBER

SELECT ROW_NUMBER() OVER (PARTITION BY A ORDER BY B)

PARTITION BY : GROUP BY 와 비슷한 작업을 수행하지만, 그룹을 하나의 레코드로 묶어버리는게 아니라 경계만 나누고 모든 행에 대해 연산이 진행됩니다. ROW_NUMBER() 와 함께 조합해서 사용할 수 있습니다.