MySQL
MySQL 기초
DNL(Data Manipulation Language)
- 데이터의 등록, 변경, 삭제를 다루는 SQL문법
insert
- 기능 : 데이터를 입력할 때 사용하는 문법
- 전체 컬럼값 입력하기
- 테이블명 : 컬럼의 순서에 맞춰 명시 해야한다.
- 테이블명(컬럼명) : 컬럼과 값의 쌍을 순서와 상관없이 대입 가능하지만, not null은 반드시 명시해야한다.
// 테이블명만 명시 insert into 테이블명 values(값1, 값2, ....) // 테이블명(컬럼명) 명시 insert into 테이블명(컬럼,컬럼,....) values(값,값,...)
- 여러개의 값을 한번에 insert하기
- 컬럼명과 값의 갯수 및 형식을 맞추면 여러개의 데이터도 한번에 insert가 가능하다.
insert into 테이블명(컬럼명, 컬럼명,....) values (값,값,.....), (값,값,.....), (값,값,.....);
- 컬럼명과 값의 갯수 및 형식을 맞추면 여러개의 데이터도 한번에 insert가 가능하다.
- 데이터를 선택하여 결과에 insert하기
- select을 통하여 데이터를 선택하고 해당 값을 insert 할 수 있다.
insert into 테이블명(컬럼,컬럼) select 컬럼, 컬럼 from 테이블명 where 조건;
- select 결과의 컬럼명과 insert 테이블의 컬럼명이 같을 필요는 없다.
- 결과의 컬럼 타입과 insert 하려는 컬럼의 타입이 같거나 입력 할 수 있는 타입이어야 한다.
- select을 통하여 데이터를 선택하고 해당 값을 insert 할 수 있다.
update
- 기능 : 등록된 데이터를 변경할 때 사용하는 명령어 이다.
- 데이터 값 변경하기
update 테이블명 set 컬럼명=값, 컬럼명=값,......where 조건; update 테이블명 set 컬러명=값,......;
- 조건을 입력하지 않으면 전체 테이블에 대한 값을 수정한다.
delete
- 기능 : 등록된 데이터를 삭제할 때 사용하는 명령어 이다.
- 데이터 값 변경하기
delete from 테이블명 where 조건; delete from 테이블명;
- 조건을 입력하지 않으면 전체 테이블을 삭제한다.
autocommit
- mysql은 autocommit의 기본 값이 true이다.
- 데이터를 삽입/변경/삭제 시 자동으로 commit이 된다.
- 수동 커밋으로 변경하기
- 삽입/변경/삭제한 데이터를 서버에 올리려면 commit을 수행한다.
- 삽입/변경/삭제한 데이터를 취소하려면 rollback을 수행한다.
- autocommit의 true와 false의 차이
- autocommit이 false일 경우
- 조회 시 마지막으로 커밋한 테이블과 임시저장소에 저장된 내용이 출력된다.
- 커밋이후에 다른 서버에서 변경한 내용은 조회가 불가능하다.
- 다른 서버는 수동commit서버의 수정내용을 commit 전 까지는 확인 할 수 없다.
set autocommit = false;
DQL(Data Query Language)
- 데이터 조회를 다루는 SQL문법
select
- 테이블의 데이터를 조회 할 때 사용하는 문법이다.
- 모든 데이터 조회하기
select * from 테이블명;
- 특정 칼럼 데이터 조회하기
- 특정 칼럼의 값만 조회하는 것을 프로젝션이라고 한다.
select 컬럼명, concat(컬럼명,컬럼명) from 테이블명;
- 특정 칼럼의 값만 조회하는 것을 프로젝션이라고 한다.
- 특정 칼럼 병합하여 데이터 조회하기
select 컬럼명, concat(컬럼명,컬럼명) from 테이블명;
- 특정 칼럼 병합하고 컬럼명을 바꿔서 데이터 조회하기
- as는 생략가능하다.
select 컬럼명 as 별명, concat(컬럼명,컬럼명) as 별명 from 테이블명; select 컬럼명 별명, concat(컬럼명,컬럼명) 별명 from 테이블명;
- as는 생략가능하다.
- 조회할 조건을 지정하기
- 조건을 지정해서 결과를 선택하는 것을 셀렉션이라고 한다.
select * from 테이블명 where 조건;
- 조건을 지정해서 결과를 선택하는 것을 셀렉션이라고 한다.
연산자
- 기본연산자
- OR : 두 조건 중에 참인 것이 있으면 조회 결과에 포함시킨다.
- AND : 두 조건 모두 참일 때만 조회 결과에 포함시킨다.
- NOT : 조건에 일치하지 않을 때만 결과에 포함시킨다.
//or select * from 테이브명 where 조건 or 조건;
select * from 테이브명 where 조건 and 조건; - //not
select * from 테이브명 where not 컬럼명 = 값;
select * from 테이브명 where 컬럼명 != 값;
select * from 테이브명 where not 컬럼명 <> 값;
``` - null
- null 조건 검색은 is null/ is not null(not ~ is null)로 지정한다.
//is null select * from 테이블명 where 컬럼명 is null;
select * from 테이블명 where 컬럼명 is not null;
select * from 테이블명 where not 컬럼명 is null; - null 조건 검색은 is null/ is not null(not ~ is null)로 지정한다.
- 사칙연산자
- +, -, *, /, % 연산자를 사용할 수 있다.
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);
- between 값 and 값
select 5 between 3 and 5;
- like
- 문자열을 비교할 때 사용한다.
- % : 0개 이상의 문자
- _ : 갯수당 1자리 글자 탐색 ( ex)) : 1개 문자, __ : 2개 문자 )
//'값%' : 값으로 시작하는 모든 문자열 select * from 테이블명 like '값%'; // '%값%' : 값이 포한된 모든 문자열 select * from 테이블명 like '%값%'; // '값_' : 값으로 시작하고 뒤에 1개의 문자가 붙은 문자열 select * from 테이블명 like '값_';
날짜 다루기
- 특정 날짜 찾기
select * from 테이블명 where 날짜컬럼 = 'yyyy-mm-dd';
- 특정 기간 조회
select * from test1 where regdt between '2022-11-1' and '2022-12-31'; select * from test1 where regdt >= '2022-11-1' and regdt <= '2022-12-31';
- 날짜를 다루는 연산자와 함수
- now() : 현재 날짜 및 시간 알아내기
- curdate() : 현재 날짜 알아내기
- curtime() : 현재 시간 알아내기
/* 현재 날짜 및 시간 알아내기 */ select now();
select curdate(); - /* 현재 시간 알아내기 */
select curtime(); - 주어진 날짜, 시간에서 날짜만 뽑거나 시간만 뽑기
select 날짜컬럼, date(날짜컬럼), time(날짜컬럼) from 테이블명;
- 특정 날짜에 시,분,초,일,월,년을 추가하거나 빼기
date_add(날짜데이터, interval 값 년/월/일/시간/분/초); date_sub(날짜데이터, interval 값 년/월/일/시간/분/초);
- 두 날짜 사이의 간격을 알아내기
- datediff(날짜1, 날짜2);
select datediff(curdate(), 'yyyy-mm-dd');
- datediff(날짜1, 날짜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 */
- date_format(날짜, 형식)
- 문자열을 날짜 값으로 바꾸기
- str_to_date('날짜','데이트포맷')
select str_to_date('11/22/2022', '%m/%d/%Y'); select str_to_date('2022.2.12', '%Y.%m.%d');
- str_to_date('날짜','데이트포맷')
- 날짜 값을 저장할 때 기본 형식은 yyyy-MM-dd이다.
- 다른형식의 날짜를 올리기위해서는 format을 변환 해야한다.
insert into test1 (title, regdt) values('aaaa', '2022-11-22'); /* 다음 형식의 문자열을 날짜 값으로 지정할 수 없다.*/ insert into test1 (title, regdt) values('bbbb', '11/22/2022');
insert into test1 (title, regdt) values('bbbb', str_to_date('11/22/2022', '%m/%d/%Y'));