일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 바로꺼짐
- ChromeStandaloneSetup64안됨
- 로봇청소기
- C++
- 백준 14888번
- chromeSetup.exe꺼짐
- 백준 14503번
- 크롬설치
- 크롬설치파일꺼짐
- 삼성 sw 역량테스트
- 연산자 끼워넣기
- chromeSetup.exe 안됨
- 크롬 설치 안됨
- Today
- Total
공대생의 개발 일기장
MYSQL 몰랐던, 햇갈렸던 부분 정리 본문
** 상시 수정 & 추가중
** 이론적인 부분은 책에 필기, 여기는 코드적인 부분이나 책에 넣기 애매한 내용 정리
** oracle과 상통한 부분이 있기 때문에 SQLD에서 공부했던 내용과 유사. 기본적인 것들은 비슷하니 잊어먹었다면 책 살펴보기
갖고노는 MySQL 데이터베이스 by 얄코 강의 - 인프런
비전공자도 이해할 수 있는 MySQL! 빠른 설명으로 필수개념만 훑은 뒤 사이트의 예제들과 함께 MySQL을 ‘갖고 놀면서’ 손으로 익힐 수 있도록 만든 강좌입니다., 빠르게 배우고, 손으로 익히고!
www.inflearn.com
학부에서 MYSQL을 다뤘지만 강의를 통해 몰랐거나 햇갈렸던 부분 다시 정리.
1. 상수(여기서는 1)나 문장('Hello') 그리고 NULL은 모든 튜플이 그 값들로 채워서 출력된다. (튜플의 개수는 A의 개수)
또한, 1, Hello, NULL이 각 속성의 이름으로 정해진다.
SELECT
A(속성), 1, 'Hello', NULL
FROM Customers;
2. LIMIT {가져올 개수} or LIMIT{건너뛸 개수, 가져올 개수}
SELECT * FROM A
LIMIT 30, 10;
3. 사칙연산의 결과도 출력가능. 문자열에 사칙연산을 하면 문자열을 0으로 인식!(아래 출력 결과는 3)
단, 숫자로 이루어진 문자열은 자동으로 숫자로 변환하여 연산
SELECT 'A' + 3;
-- 3
SELECT '1' + 3;
-- 4
4. MYSQL에서도 TRUE, FALSE는 각각 1, 0으로 출력, SELECT문에서도 AND(&&), OR(||)의 연산자도 사용가능(WHERE뿐만 아니라)
5. MYSQL의 기본 사칙연산자는 대소문자 구분 XXXX
6. CONCAT_WS('string', ...) : 무언가를 string으로 이어 붙임
SELECT CONCAT_WS('-', 2024, 03, 17, 'AM')
-- 2024-03-17-AM
7. LEFT, RIGHT('string', 출력개수)
SELECT
LEFT('ABCDEFG', 3), -- 왼쪽에서 3개
RIGHT('ABCDEFG', 3); -- 오른쪽에서 3개
8. LENGTH는 바이트 길이, CHAR_LENGTH는 문자 길이 즉, 한글을 기준으로 LENGTH은 한글 한 글자면 3, CHAR_LENGTH는 1을 출력
9. INSTR('string', 'string2') string에서 string2의 첫 위치 반환, 없다면 0으로 반환.
SELECT
INSTR('ABCDE', 'ABC'), -- 1
INSTR('ABCDE', 'BCDE'), -- 2
INSTR('ABCDE', 'C'), -- 3
INSTR('ABCDE', 'DE'), -- 4
INSTR('ABCDE', 'F'); -- 0
10. CAST(A AS B), CONVERT(A, B): A를 B 자료형으로 변환
11. 시간/날짜 관련 함수
- CURRENT_DATE / CURDATE : 현재 날짜 반환
- CURRENT_TIME / CURTIME : 현재 시간 반환
- CURRENT_TIMESTAMP / NOW : 현재 시간과 날짜 반환
- DATE, TIME : 각각 문자열에 따라 날짜, 시간 생성
- YEAR : 주어진 DATETIME값의 년도 반환
- MONTHNAME : 영문으로 월 반환
- MONTH : 월 반환
- WEEKDAY : 요일값 반환(단, 월요일이 0이다.)
- DAYNAME : 요일명 반환
- DAYOFMONTH, DAY : 일 반환
- HOUR : 시 반환
- MINUTE : 분 반환
- SECOND : 초 반환
- ADDDATE, DATE_ADD : 시간/날짜 더하기
- SUBDATE, DATE_SUB : 시간/날짜 빼기
- DATE_DIFF, TIME_DIFF(date1, date2) : 각각 두 시간/날짜 간 일수, 시간 차
- LAST_DAT(date) : 해당 달의 마지막 날짜
- DATE_FORMAT : 시간/날짜를 지정한 형식으로 반환
- STR_TO_DATE(A, B) : A를 B형식으로 해석하여 시간/날짜 생성 (여기서 B는 18번과 같은 형식, A는 그냥 시간)
- ** 날짜 형식들(18번, 19번에서 사용)
%Y | 년도 4자리 |
%y | 년도 2자리 |
%M | 월 영문 |
%m | 월 숫자 |
%D | 일 영문(1st, 2nd, 3rd...) |
%d, %e | 일 숫자 (01 ~ 31) |
%T | hh:mm:ss |
%r | hh:mm:ss AM/PM |
%H, %k | 시 (~23) |
%h, %l | 시 (~12) |
%i | 분 |
%S, %s | 초 |
%p | AM/PM |
SELECT CURDATE(), CURTIME(), NOW();
SELECT
DATE('2024-03-17') = DATE('2024-03-17'),
TIME('1:2:3') = TIME('01:02:03');
-- 둘 다 TRUE 반환
SELECT
Date,
YEAR(Date) AS YEAR,
MONTHNAME(Date) AS MONTHNAME,
MONTH(Date) AS MONTH,
WEEKDAY(Date) AS WEEKDAY,
DAYNAME(Date) AS DAYNAME,
DAY(Date) AS DAY
FROM A;
SELECT
ADDDATE('2024-03-17', INTERVAL 1 YEAR),
ADDDATE('2024-03-17', INTERVAL -2 MONTH),
ADDDATE('2024-03-17', INTERVAL 3 WEEK),
ADDDATE('2024-03-17', INTERVAL -4 DAY),
ADDDATE('2024-03-17', INTERVAL -5 MINUTE),
ADDDATE('2024-03-17 03:30:12', INTERVAL 6 SECOND);
12. IF(setence)는 TRUE or FALSE 반환.
13. Oracle에서 NVL함수는 MYSQL에서는 IFNULL // CASE문은 Oracle과 동일
14. ~ALL : 서브쿼리의 모든 결과에 대해 ~하다.
15. ~ANY : 서브쿼리의 하나 이상의 결과에 대해 ~하다.
16. JOIN ~ ON을 여러번 사용도 가능. ON 조건에서 사칙연산을 이용해서도 가능하다!
SELECT
E1.EmployeeID,
E2.EmployeeID,
FROM Employees E1 JOIN Employees E2
ON E1.EmployeeID + 1 = E2.EmployeeID;
17. JOIN이 양옆으로 붙인거라면, UNION, UNION ALL은 위 아래로 붙이기(그렇기 때문에 값이 다른건 통일 해줘야함)
18. TABLE 생성시 PK에 AUTO_INCREMENT를 거의 대부분 사용.
19. 제약조건에서 UNSIGNED는 양수만 가능.
20. 햇갈리는 자료형 정리
https://www.youtube.com/watch?v=NmraFRrusD8
21. DELETE와 달리 TRUNCATE는 테이블을 삭제하는 것 뿐 아니라 테이블 자체를 초기화(pk의 번호가 1번부터 시작함)
22. 외래키 제약은 모두 부모테이블을 시점으로!
23. 내용 수정이 가능한 VIEW
- 집계함수 사용하지 않음
- GROUP BY 사용하지 않음
- UNION, DISTINCT 사용하지 않음
- SELECT절에 서브쿼리 없음
- WHERE절에 서브쿼리가 FROM절의 테이블 참조하지 않음
- JOIN은 INNER JOIN만 가능함.
조건이 많지만 어느정도 예상 가능한 범위에서만 내용 수정이 가능하다는 말. 집계함수로 묶는다거나 해버리면 그 이전의 상태를 확인할 수 없기 때문에 수정하기 어려움, 다른 서브쿼리에 대한 절도 마찬가지. 다만, JOIN에 대한 것은 조금 햇갈릴 수 있는데 이건 그냥 외우자.
24. 사용자 생성 예시
CREATE USER '사용자명'@'접속위치' IDENTIFIED BY '비밀번호';
즉, USER1이 사용자명이고, 접속위치는 ip주소, 비밀번호는 비밀번호다.