[mySQL] 나를 위한 mySQL Workbench 온라인 사전
Database 추가하기
query 창: CREATE DATABASE <데이터베이스 이름>
테이블 생성
1. SQL문으로 생성하기
2. .csv 파일로 추가하기
데이터타입(Datatype)
TEXT: 문자(string): 제한 없음
VARCHAR(최대 문자 수): 문자열: 최대 길이 설정 가능
INT: 정수(Number. Integer의 약자)
DOUBLE: 실수(Number)
DATE: 날짜(date)
DATETIME: 날짜와 시간(yyyy-mm-dd hh:mm:ss)
Primary Key 설정 (실무에선 '기본키'라고도 함)
query 창에 PK 네모박스 체크, NN(Not Null)은 자동으로 체크됨.
더보기: Primary Key의 종류 2가지
Primary Key(기본키)의 종류 2가지
1. Natural Key
어떤 객체가 가지고 있는 속성을 기본키로 설정을 하면, Natural Key가 된다. 예를 들어, 주민등록번호 같은 것들이다.
2. Surrogate Key와 AI
어떤 객체의 속성을 직접적으로 나타내는 것이 아닌 것을 기본키로 설정하는 것을 뜻한다.
예를 들면, 회사의 사번이다.
2-1 AI(Auto Increment)
이전 값의 +1을 자동으로 해주는 것, 보통 Surrogate Key로 설정한 Primary Key에서 사용한다.
2-3 AI(Autp Increment)를 +1이 아닌 +2로는?
아래 코드를 작성하면 된다.
set @@AUTO_INCREMENT_INCREMENT = 2;
테이블 조회하는 코드
SELECT * FROM <데이터베이스 이름>.<테이블 이름>;
(코드를 작성할 때는 <>는 빼고 입력하자)
workbench UI 살펴보기
데이터 조회하기 SELECT와 WHERE
SELECT: 특정 컬럼(column)만 지정하기
SELECT <컬럼 이름>, <컬럼 이름2>, <컬럼 이름3>, ..., ... FROM <데이터베이스 이름>.<테이블 이름>;
(코드를 작성할 때는 <>는 빼고 입력하자)
WHERE: 조건
SELECT <컬럼 이름>, <컬럼 이름2> FROM <데이터베이스 이름>.<테이블 이름> WHERE <컬럼 이름> = <값>;
(코드를 작성할 때는 <>는 빼고 입력하자)
범위 조건: BETWEEN...AND... ( ...와 ... 사이 ): 특정 범위 조건의 레코드를 찾을 경우
SELECT * FROM <테이블 이름> WHERE age BETWEEN <30> AND <39>;
(30이상 39이하 라는 뜻 <>는 빼고 입력하자)
조건: NOT ( ...이 아닌 ): 특정 조건이 아닌 것을 찾을 경우
SELECT * FROM <테이블 이름> WHERE age NOT BETWEEN <30> AND <39>;
(30이상 39이하 가아닌 이라는 뜻 <>는 빼고 입력하자)
조건: LIKE ( ...과 같은): 특정 값이 포함된 레코드를 찾을 경우
SELECT * FROM <테이블 이름> WHERE address LIKE '<서울%>';
(엑셀의 '서울*'과 같은 의미, <>는 빼고 입력)
'<%고양시%>': '고양시'가 포함된
조건: !=과 <> (...와 같지 않은)
SELECT * FROM <테이블 이름> WHERE age <> 20; // age 컬럼이 20이 아닌 레코드
SELECT * FROM <테이블 이름> WHERE age != 20; // 같음
(헷갈릴까봐 입력할 값에 <> 표시 안 했음. 알아서 잘 구분하세요^^)
조건: IN (...이거나...이거나...): 특정 값들 중 해당되는 레코드를 찾을 때
SELECT * FROM <테이블 이름> WHERE age IN (<20>, <30>); // age 가 20 이거나, 30인 레코드
(<>표시는 빼고 값만 입력합시다.)
조건: _ (한 글자를 나타내는 문자): %와 비슷한 느낌이다
SELECT * FROM <테이블 이름> WHERE address LIKE '<서울_>'; // '서울' 다음에 한 글자만 있는 레코드
('서울' 뒤에 '_(언더바)' 있음, <>표시는 빼고 값만 입력합시다.)
날짜 관련 조건
년(YEAR), 월(MONTH), 일(DAY) 추출하기
조건: YEAR(): 연도 추출 #년도 #년도추출
SELECT * FROM <테이블 이름> WHERE YEAR(<컬럼 이름>) = '<1992>'; // 컬럼 연도가 1992인 레코드
(<>는 빼고 입력합시다)
조건: MONTH(): 월 추출 #달 #몇달인지
SELECT * FROM <테이블 이름> WHERE MONTH(<sign_up_day>) IN (6, 8, 12); // 가입 날짜가 6월, 8월, 12월인 레코드
(<>는 빼고 입력합시다)
조건: DAYOFMONTH(): 일 추출 #일 #몇일인지
SELECT * FROM <테이블 이름> WHERE DAYOFMONTH(<sign_up_day>) BETWEEN 15 AND 31; // 가입 날짜가 15일과 31일 사이인 레코드
(<>는 빼고 입력합시다)
조건: DATEDIFF ('A', 'B'): A와 B의 날짜 차이를 알려줌 #날짜빼기
SELECT * FROM <테이블 이름> DATEDIFF(sign_up_day, '2023-05-18'); // 가입 날짜와 2023-05-18을 뺀 숫자
(<>는 빼고 입력합시다)
CURDATE(): 오늘 날짜를 구하는 함수 #오늘일자 #오늘 #오늘날짜
(엑셀의 NOW()와 같다)
DATE_ADD('A', INTERVAL 'B' DAY): A 날짜에 B 만큼의 일 수를 더함 #날짜더하기 #덧셈 #날짜덧셈
SELECT * FROM <테이블 이름> DATE_ADD(sign_up_day, INTERVAL '300' DAY);
DATE_SUB('A', INTERVAL 'B' DAY): A 날짜에 B 만큼의 일 수를 뺌 #날짜빼기 #뺄셈 #날짜뼬셈
SELECT * FROM <테이블 이름> DATE_SUB(sign_up_day, INTERVAL '350' DAY);
특정 날짜에서 몇 일 후, 구하기 유용하다
UNIX_TIMESTAMP(): 1970년 1월 1일 이후로 몇 초가 지났는지 표시해줌 #시간 #초단위
SELECT * FROM <테이블 이름> UNIX_TIMESTAMP(sign_up_day); // 1970년 이후로 가입일 까지 몇 초가 지났는지 표시
FROM_UNIXTIME(): 날짜 형태로 바꿔줌 #날짜로 #초를날짜로
SELECT * FROM <테이블 이름> FROM_UNIXTIME(UNIX_TIMESTAMP(sign_up_day));
AND: 여러 조건을 만족하는 레코드 찾기
AND로 연결하여 조건 추가
OR: 여로 조건 중에서 하나 이상을 만족하는 레코드 찾기
AND...OR...: ...이면서...인 조건1 이거나 ...이면서...인 조건2
묶음인 조건에는 괄호를 표시해주는게 좋다.
문자열 패턴 매칭 조건 #문자 #와일드카드 #*도 있지롱 #특수문자
조건: LIKE: ...와 같은
%: 임의의 길이를 가진 문자열
_: 한 글자의 문자열 << 언더바
컬럼 값인 %이나 _를 찾아야 한다면?
WHERE sentence LIKE '%\%%' // 문자인 % 앞에 '\'백슬래쉬를 표시해준다.
(HTML의 \와 같다)
'\'는 다음 한 문자를 일반 문자열로 표현해준다. 예를 들면 ', ", _, % 의 앞에 사용할 수 있다.
BINARY: 대소문자 구분하기
LIKE BINARY '%g%'; // 소문자 g가 포함된 레코드만 찾음
데이터 정렬
ORDER BY: order는 '순서' 라는 뜻
ORDER BY <컬럼 이름> <옵션>; // 특정 컬러를 오름차순으로 정렬해줌. 옵션: ASC - 오름차순, DESC - 내림차순
default 값은 오름차순.
WHERE와 ORDER BY 활용 예시
ORDER BY: 여러 정렬 기준설정
ORDER BY <컬럼이름1> <옵션1>, <컬럼이름2> <옵션2> // 컬럼이름1을 먼저 정렬하고, 값이 같은게 있으면 컬럼이름2를 기준으로 다시 정렬한다.
CAST(<컬럼이름> AS <타입이름>): TEXT타입의 숫자를 INT타입의 숫자로 변환하기
CAST(data AS signed) // 특정 컬럼을 일시적으로 해당 타입으로 바꿔줌.
data 컬럼을 signed(음수와 양수인 정수를 모두 표현하는 타입)
정렬된 데이터에서 일부만 추려내기
LIMIT <숫자>: '숫자' 만큼의 레코드를 보여줌, 정렬을 하고 10을 적었다면 상위 10개의 레코드만 보여줌
LIMIT <숫자1>, <숫자2>: '숫자1' 번 째 레코드 부터 시작해서 '숫자2' 만큼의 레코드만 추려줌.
⛔️주의! 숫자1은 0번 부터 시작함.
MySQL 문법상의 순서
✨FROM - WHERE - ORDER BY - LIMIT
'DB' 카테고리의 다른 글
[mySQL] 서브쿼리 중첩의 문제점과 뷰(view) 이해하기 (0) | 2023.05.20 |
---|---|
[mySQL] 서브쿼리를 이용한 데이터 분석 (0) | 2023.05.19 |
[mySQL] 서브쿼리(subquery)에 대해 이해하기 (0) | 2023.05.19 |
[mySQL] 조인(JOIN) 작업에 대해 알아보기, 온라인 사전 (0) | 2023.05.18 |
[mySQL] 데이터 분석 함수 온라인 사전 (0) | 2023.05.17 |