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() 와 함께 조합해서 사용할 수 있습니다.