MySQL
MySQL Workbench에서 insert, update 할 때마다 시간 저장하기
이용자가 글을 작성할 때마다 현재시간을 저장하고, 글을 수정했을 때도 현재시간을 저장하는 테이블을 만들어 보자. 작성시간을 저장하는 created_at 컬럼과 수정시간을 저장하는 updated_at 컬럼을 TIMESTAMP 타입으로 만든다. 그리고 default 값에 now() 함수를 쓰면 insert할 때 자동으로 현재 시간을 저장할 수 있다. now() 뒤에 이어서 on update now() 라고 적어주면 update 할 때의 시간도 저장할 수 있다.
MySQL 날짜, 시간 처리하기 - date, time, datetime
DATE 타입 날짜는 포함하지만 시간은 포함하지 않을 때 사용하는 타입. YYYY-MM-DD 형식으로 입력한다. 1000-01-01 부터 9999-12-31 까지만 입력 가능하다. TIME 타입 시간에 대한 정보를 담는 타입. HH:MM:SS 형식으로 -838:59:59 ~ 838:59:59 까지 입력 가능하다. DATETIME 타입 날짜와 시간을 모두 포함할 때 사용하는 타입. YYYY-MM-DD HH:MM:SS 형식으로 1000-01-01 00:00:00 부터 9999-12-31 23:59:59 까지 가능하다. TIMESTAMP 타입 날짜와 시간을 모두 포함한 타입. TIMESTAMP는 시간을 1970년 1월 1일 0시부터 몇초가 지났는지 숫자로 표현한 것이다. 숫자이기 때문에 시간계산에 용이하다. ..
MySQL - select 문의 여러 문법들
not equal -- 출간 년도가 2017년도가 아닌 데이터를 가져오시오. select * from books where released_year != 2017; not like -- 책 제목에 W가 포함되지 않은 책을 가져오시오 select * from books where title not like '%W%'; between A and B -- 출간년도가 1990년에서 2015년 사이의 데이터를 가져오시오. select * from books where released_year between 1990 and 2015; and -- 출간년도가 1990년에서 2015년 사이의 책 데이터를 가져오시오. select * from books where released_year >= 1990 and relea..
MySQL - group by 와 having
group by group by 명령어를 통해 특정 컬럼을 기준으로 그룹화 할 수 있다. 그룹화를 하면 조회된 데이터를 통계를 내기 위한 집계함수( avg, sum 등.. )를 사용하기에 용이해진다. -- author_lname 별로 몇권의 책을 썼는지, 작가 이름과 책 권수를 가져오세요 select author_lname, count(title) as count from books group by author_lname; -- author_lname과 author_fname 별로(작가의 풀네임별로) -- 그 작가의 이름(풀네임)과 출간년도의 최소값을 보여주세요. -- (각 작가별로, 최초 책 발간한 년도가 언제입니까?) select concat(author_lname, ' ', author_fname)..
MySQL - 서브쿼리(SubQuery)
서브쿼리란 부모 쿼리 안에 작성하는 내부의 SELECT 쿼리이며, 주로 부모 쿼리의 FROM과 WHERE의 조건으로 사용된다. 서브쿼리(=자식쿼리, 내부쿼리) - 메인쿼리 컬럼 사용 가능 메인쿼리(=부모쿼리, 외부쿼리) - 서브쿼리 컬럼 사용 불가 select * from books; 간단한 서브쿼리를 사용하는 예제를 살펴보자. 페이지 수가 가장 긴 책의 제목과 페이지를 가져오려 한다. -- 페이지수가 가장 긴 책의 제목과 페이지는? select max(pages), title from books; -- 잘못된 sql 에러없이 동작하지만 이건 결과값이 다른 잘못된 sql 문이다. -- 방법1. 정렬해서 가져오는 방법 select title, pages from books order by pages des..
MySQL - 집계함수 count(), min(), max(), sum(), avg()
select * from books; 갯수를 세는 함수 count() -- books의 전체 데이터 갯수 select count(*) from books; select count(*) from books where title like '%the%'; 최소값을 구하는 함수 min() -- 출간년도가 가장 빠른 책은 몇년도인가? => 출간년도의 최소값을 찾아라 select min(released_year) as min_year from books; 최대값을 구하는 함수 max() -- 페이지수가 가장 많은 책은 몇페이지로 되어있나? => 페이지의 최대값을 찾아라 select max(pages) as max_pages from books; 값을 모두 더해주는 함수 sum() select sum(pages) f..
MySQL - 문자열 부분 일치 검색하기 like
select * from books; like : 찾는 문자열이 포함된 데이터 찾기 대소문자 구분 없음 퍼센트(%)를 기입하지 않으면 해당 문자열로만 된 데이터를 검색 찾는문자열% : 찾는 문자열로 시작하는 데이터 검색 %찾는문자열% : 위치에 상관 없이 찾는 문자열이 포함된 데이터 검색 %찾는문자열 : 찾는 문자열로 끝나는 데이터 검색 언더스코어(_) : 갯수만큼 자리수에 맞는 데이터를 검색 -- 책 제목에 the 가 들어가 있는 데이터를 가져오시오. select * from books where title like '%the%'; -- 책 제목에 시작이 the 로 시작하는 데이터를 가져오시오. select * from books where title like 'the%'; -- 책 제목이, the 로..
MySQL - 데이터를 끊어서 가져오기 limit
select * from books; -- 테이블의 데이터를 처음부터 5개만 가져오시오. select * from books limit 5; -- = limit 0, 5; limit 에 숫자가 2개면, 왼쪽은 시작위치(offset), 오른쪽은 갯수를 의미한다. limit 의 offset은 0부터 시작한다는걸 주의하자! -- 위에서 가져온 5개 이후로, 5개의 데이터를 가져오시오. select * from books limit 5, 5; -- 위에서 가져온 5개 이후로, 5개의 데이터를 가져오시오. select * from books limit 10, 5;