books 테이블

case로 시작 end로 끝나며 when을 통해 조건문과 then을 통해 원하는 값을 넣어준다.

-- stock_quantity 가 0 ~ 50 사이면, * (별표한개)
-- stock_quantity 가 51 ~ 100 사이면, ** (별표두개)
-- stock_quantity 그 외에는 *** (별표3개)
select *, 
	case 
		when stock_quantity between 0 and 50 then '*'
        when stock_quantity between 51 and 100 then '**' 
        else '***' 
	end as stars
from books;

 

people2 테이블

DATE는 날짜 TIME은 시간 DATETIME은 날짜와 시각이다. 아래와 같이 임의의 데이터와 현재 날짜와 시간을 받아오는 함수를 통해 insert 한다.

insert into people2
(name, birthdate, birthtime, birthdt)
values
('Padma', '1988-11-11', '10:07:35', '1988-11-11 10:07:35'),
('Larry', '1994-04-22', '04:10:42', '1994-04-22 04:10:42');

insert into people2
(name, birthdate, birthtime, birthdt)
values
('Harry', curdate(), curtime(), now());

select *
from people2;

 

날짜와 시간에서 특정 년도나 몇시인지 아래처럼 불러올 수 있다.

select name, year(birthdate)
from people2;

select name, month(birthdate)
from people2;

select name, day(birthdate)
from people2;

select name, dayofweek(birthdate)
from people2;

select name, dayname(birthdate)
from people2;

select name, hour(birthtime)
from people2;

select name, minute(birthtime)
from people2;

select name, second(birthtime)
from people2;

 

아래는 날짜 포맷과 시간 계산방법이다.

-- 2000-11-11 03:50 에 태어났습니다.
select date_format(birthdt, '%Y-%m-%d %H:%i 에 태어났습니다.')
from people2;

-- birthdate 컬럼과 현재시간의 차이를 가져오세요
select datediff(now(), birthdate)
from people2;

-- birthdate에 36일 후는??
select date_add(birthdate, interval 36 day);

 

아래처럼 데이터를 insert하면 created_at에 timestmap로 현재시간이 저장된다.

timestamp는 1970년 1월 1일 자정을 0으로 시작해서(정확하게 표현하면 00:00:00 UTC on January 1, 1970) ~

특정 시점까지 얼마나 많은 초(second) 단위의 시간이 지났는지를 통해 특정 시점을 표기하는 방식이다.

create table comments (
	id int unsigned not null auto_increment primary key,
    content varchar(100),
    created_at timestamp default now()
);

insert into comments
(content)
values
('사과 진짜 맛있나요??????????');

books 테이블

년도별로, 평균 재고량과 해당 년도가 나오도록 데이터를 가져오기 위해 group by를 from 뒤에 쓰겠다.

select avg(stock_quantity), released_year
from books
group by released_year;

 

 

books 테이블

갯수 count 함수, 작가별 작품 수는?

SELECT author_fname, author_lname, count(*) as cnt
FROM books
GROUP BY author_fname, author_lname;

 

 

합계 sum 함수, 이 테이블의 페이지수 총 합은???

select sum(pages)
from books;

 

평균 avg 함수, 이 테이블의 책 페이지수 평균은?

select avg(pages)
from books;

 

최대값 max 함수, 이 테이블에 책 페이지수가 가장 큰 값은??

SELECT MAX(pages)
FROM books;

 

최소값 min 함수, 이 테이블에 책 페이지수가 가장 작은 값은??

SELECT MIN(released_year)
FROM books;

 

SELECT *
FROM books
WHERE title like '%the%';

문자열 포함 ( Search ) like 키워드를 통해  내가 찾고자 하는 문자열이 컬럼에 포함되어 있는지 확인하는 방법

책 제목에 the 라고 들어있는(%) 책만 가져오시오.

 

 

-- the로 시작하는 책만 가져오시오
SELECT *
FROM books
WHERE title like 'the%';

위는 예제에 쓸 books 테이블이다.

 

 

-- 책 테이블의 데이터를 3개만 가져오시오
SELECT *
FROM books
LIMIT 3;

LIMIT를 이용해 처음부터 3개만 가져왔다.

 

 

-- 최신책을 기준으로 10번째 책부터 끝까지 가져오시오.
SELECT *
FROM books
ORDER BY released_year DESC
LIMIT 9, 192948902;

LIMIT의 처음에는 OFFSET(시작지점)을 넣고, 끝까지 가져오고 싶으면 뒤에 큰 숫자를 넣어준다.

혹은 총 갯수를 세서 넣어주는 방법도 있다.

위는 예제에 쓸 데이터 books 테이블이다.

 

 

SELECT *
FROM books
ORDER BY title;

title을 기준으로 오름차순 정렬을 했다.

 

 

-- author_lname으로 정렬을 하고, 이 author_lname이 같으면
-- author_fname으로 정렬하세요.
SELECT *
FROM books
ORDER BY author_lname ASC, author_fname DESC;

여러 개를 기준으로 정렬하고 싶으면 콤마를 이용한다. default는 ASC(오름차순)이고 내림차순은 DESC를 써준다.

위는 예제 데이터 books 테이블이다.

 

 

column 앞에 DISTINCT를 붙이면 중복없이 가져올 수 있다.

upper 함수는 대문자로 lower 함수는 소문자로 변경해 출력한다.

char_length 함수는 column 안의 문자열이 몇개인지 길이를 구해준다.

+ Recent posts