데이터를 조회할 때 사용하는 문법
where 절을 통해 결과 데이터를 먼저 선택(selection)한 다음, 결과 데이터에서 가져올 컬럼을 선택(projection)한다.
+
, -
, *
, /
, %
연산자를 사용할 수 있다.
select (4 + 5), (4 - 5), (4 * 5), (4 / 5), (4 % 5);
=
, !=
, >
, >=
, <
, <=
, <>
select (4=5), (4!=5), (4>5), (4>=5), (4<5), (4<=5), (4<>5);
문자열을 비교할 때 사용한다.
%
는 0개 이상의 문자
select *
from test1
where class like 'java%';
_
는 딱 1자를 의미한다.
select *
from test1
where name like 's0_';
날짜 함수와 문자열 함수를 사용하여 날짜 값을 다루는 방법.
CURDATE()
CURRENT_DATE
CURRENT_DATE()
SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2019-03-05 |
+------------+
n a numeric context (note this is not performing date calculations, 정수형):
SELECT CURDATE() +0;
+--------------+
| CURDATE() +0 |
+--------------+
| 20190305 |
+--------------+
Data calculation:
SELECT CURDATE() - INTERVAL 5 DAY;
+----------------------------+
| CURDATE() - INTERVAL 5 DAY |
+----------------------------+
| 2019-02-28 |
+----------------------------+
현재 날짜 및 시간 알아내기
select now();
현재 날짜 알아내기
select curdate();
현재 시간 알아내기
select curtime();
주어진 날짜, 시간에서 날짜만 뽑거나 시간만 뽑기
select regdt, date(regdt), time(regdt) from test1;
특정 날짜에 시,분,초,일,월,년을 추가하거나 빼기
date_add(날짜데이터, interval 값 단위);
date_sub(날짜데이터, interval 값 단위);
select date_add(now(), interval 11 day);
select date_sub(now(), interval 11 day);
두 날짜 사이의 간격을 알아내기
datediff(날짜1, 날짜2);
select datediff(curdate(), '2022-5-2');
날짜에서 특정 형식으로 값을 추출하기
date_format(날짜, 형식)
select regdt, date_format(regdt, '%m/%e/%Y') from test1; /* 09/7/2022 */
select regdt, date_format(regdt, '%M/%d/%y') from test1; /* September/07/17 */
select regdt, date_format(regdt, '%W %w %a') from test1; /* Thursday 4 Thu */
select regdt, date_format(regdt, '%M %b') from test1; /* September Sep */
select now(), date_format(now(), '%p %h %H %l'); /* PM 01 13 1 */
select now(), date_format(now(), '%i %s'); /* 05 45 */
문자열을 날짜 값으로 바꾸기
select str_to_date('11/22/2022', '%m/%d/%Y');
select str_to_date('2022.2.12', '%Y.%m.%d');
날짜 값을 저장할 때 기본 형식은 yyyy-MM-dd이다.
insert into test1 (title, regdt) values('aaaa', '2022-11-22');
다음 형식의 문자열을 날짜 값으로 지정할 수 없다.
insert into test1 (title, regdt) values('bbbb', '11/22/2022');
특정 형식으로 입력된 날짜를 date 타입의 컬럼 값으로 변환하면 입력할 수 있다.
insert into test1 (title, regdt) values('bbbb', str_to_date('11/22/2022', '%m/%d/%Y'));
다른 테이블의 PK를 참조하는 컬럼이다.
⇒ 파일 I/O가 느리다.
→ 실제 파일 I/O는 OS에서 처리 → I/O 속도 빠르다. → DBMS 부담이 줄어든다.
→ 바이너리데이터를 텍스트로 다룰 때 사용!
1. 개수의 제한이 없다.
filepath에는 첨부파일의 데이터 자체가 아닌, 첨부파일의 경로가 들어가게 된다.
파일 자체는 filesystem에 저장한다.
2. 첨부 파일이 없는 경우 메모리가 절약된다.
→ 파일 정보를 다루는 시스템
File
= 디렉토리 / 파일
insert into test2(filepath, bno) values('c:/download/x.gif', 100);
-- 100번 게시물은 존재하지 않는다.
첨부 파일이 있는 게시물을 삭제할 때,
해당 게시물을 참조하는 첨부파일 데이터는 무효한 데이터가 된다.
delete from test1 where no=1;
-- 1번 게시물에 첨부파일이 존재한다.
이런 문제가 발생한 이유?
해결책?
다른 테이블의 PK를 참조하는 컬럼으로 선언한다.
alter table 테이블명
add constraint 제약조건이름 foreign key (컬럼명) references 테이블명(컬럼명);
테이블 간의 관계를 표현하는 표기법
E: Entity(table)
R: Relationship
정리 잘 된 블로그
https://jhnyang.tistory.com/309