728x90
DB별 주석 처리
종류
|
MySQL
|
Oracle
|
MSSQL
|
MariaDB
|
한 줄 주석 |
#, --, CTRL + /
|
--
|
--
|
--, #
|
여러 줄 주석 |
/* 내용 */
|
/* 내용 */
|
/* 내용 */
|
/* 내용 */
|
CASE WHEN THEN
SELECT CASE WHEN [조건식1] THEN [결과식1]
WHEN [조건식2] THEN [결과식2]
...
ELSE [조건식N]
END
SUBSTR()
- SUBSTR("문자열", "시작위치", "길이")
CONCAT()
- 하나 이상의 문자열을 결합하여 새로운 문자열을 생성하는 SQL 함수이다.
- 주어진 문자열을 연결할 때 사용된다
시간함수
EXTRACT, DATE_FORMAT
- 날짜와 시간 데이터 추출 및 변환
EXTRACT(UNIT FROM DATE)
SELECT EXTRACT(YEAR FROM 입력일자) AS 년도,
EXTRACT(MONTH FROM 입력일자) AS 월,
EXTRACT(DAY FROM 입력일자) AS 일,
EXTRACT(HOUR FROM 입력일자) AS 시간,
EXTRACT(MINUTE FROM 입력일자) AS 분,
EXTRACT(SECOND FROM 입력일자) AS 초,
DATE_FORMAT(날짜 , 형식)
SELECT DATE_FORMAT(입력일자, '%Y') AS 년도,
DATE_FORMAT(입력일자, '%m') AS 월,
DATE_FORMAT(입력일자, '%d') AS 일,
DATE_FORMAT(입력일자, '%H') AS 시간,
DATE_FORMAT(입력일자, '%i') AS 분,
DATE_FORMAT(입력일자, '%s') AS 초,
DATE_FORMAT(입력일자, '%Y%m%d') AS 년월일1,
DATE_FORMAT(입력일자, '%Y/%m/%d') AS 년월일2,
DATE_FORMAT(입력일자, '%y%m%d') AS 년월일3
DATE_FORMAT(입력일자, '%Y-%m-%d %H%m%s') AS 년월일4
테이블 생성, 삭제, JOIN
테이블 생성(CREATE TABLE) 및 데이터 입력(INSERT)
CREATE TABLE `MYSQL_STUDY`.`CUST_INFO` (
CUST_NAME VARCHAR(10) NOT NULL COMMENT '고객명',
AGE TINYINT COMMENT '연령',
SEX VARCHAR(3) COMMENT '성별'
) COMMENT '고객정보';
INSERT INTO `MYSQL_STUDY`.`CUST_INFO` VALUES('김서연', 36, '여');
INSERT INTO `MYSQL_STUDY`.`CUST_INFO` VALUES('박수빈', 26, '여');
INSERT INTO `MYSQL_STUDY`.`CUST_INFO` VALUES('최민준', 32, '남');
INSERT INTO `MYSQL_STUDY`.`CUST_INFO` VALUES('김지민', 41, '남');
INSERT INTO `MYSQL_STUDY`.`CUST_INFO` VALUES('이하은', 23, '여');
CREATE TABLE `MYSQL_STUDY`.`CUST_BUY_INFO` (
CUST_NAME VARCHAR(10) NOT NULL,
BUY_DATE DATE,
BUY_NM VARCHAR(30),
PAY INT
) COMMENT '고객 구매 정보';
INSERT INTO `MYSQL_STUDY`.`CUST_BUY_INFO` (CUST_NAME, BUY_DATE, BUY_NM, PAY) VALUES('김서연', STR_TO_DATE('2022.08.05', '%Y.%m.%d'), '샴푸, 린스', 23000);
INSERT INTO `MYSQL_STUDY`.`CUST_BUY_INFO` (CUST_NAME, BUY_DATE, BUY_NM, PAY) VALUES('이예준', STR_TO_DATE('2022.08.15', '%Y.%m.%d'), '초콜렛', 700);
INSERT INTO `MYSQL_STUDY`.`CUST_BUY_INFO` (CUST_NAME, BUY_DATE, BUY_NM, PAY) VALUES('김지민', STR_TO_DATE('2022.08.31', '%Y.%m.%d'), '주스', 3800);
INSERT INTO `MYSQL_STUDY`.`CUST_BUY_INFO` (CUST_NAME, BUY_DATE, BUY_NM, PAY) VALUES('신우진', STR_TO_DATE('2022.08.18', '%Y.%m.%d'), '아이스크림', 1500);
INSERT INTO `MYSQL_STUDY`.`CUST_BUY_INFO` (CUST_NAME, BUY_DATE, BUY_NM, PAY) VALUES('이하은', STR_TO_DATE('2022.08.26', '%Y.%m.%d'), '반찬', 5000);
- MySQL에서는 '2022-08-05' 형식으로 지정하면 자동으로 날짜 형식 지정되지만 '2022.08.05'과 같은 형식은 문자열이기 때문에 'STR_TO_DATE' 사용
JOIN
SELECT A.CUST_NAME
, A.AGE
, A.SEX
, B.BUY_DATE
, B.BUY_NM
, B.PAY
FROM `MYSQL_STUDY`.`CUST_INFO` AS A
LEFT JOIN `MYSQL_STUDY`.`CUST_BUY_INFO` AS B
ON A.CUST_NAME = B.CUST_NAME
UNION
SELECT A.CUST_NAME
, A.AGE
, A.SEX
, B.BUY_DATE
, B.BUY_NM
, B.PAY
FROM `MYSQL_STUDY`.`CUST_INFO` AS A
RIGHT JOIN `MYSQL_STUDY`.`CUST_BUY_INFO` AS B
ON A.CUST_NAME = B.CUST_NAME
WHERE A.CUST_NAME IS NULL;
- MySQL에서는 FULL OUTER JOIN을 직접 지원 X
- UNION을 통해 LEFT, RIGHT JOIN을 결합해야함
- UNION ALL은 중복 포함
참고 자료
https://www.youtube.com/watch?v=XN4iXklAnQw&list=PLyDRGvq2JNKxQu0sVFrX01Fmz3PwHPRJi&index=1
https://www.youtube.com/watch?v=u8G5WAS8_hU&list=PLyDRGvq2JNKxQu0sVFrX01Fmz3PwHPRJi&index=2
https://www.youtube.com/watch?v=E-8kpSSLulU&list=PLyDRGvq2JNKxQu0sVFrX01Fmz3PwHPRJi&index=3
데이터:
https://www.data.go.kr/data/15121497/fileData.do
https://www.data.go.kr/data/15093055/fileData.do
728x90