DB

[DB 개념] DBMS 내장 함수/페이징 처리

ryureeru 2022. 9. 21. 16:36

사용할 테이블 참고 ...!!!

https://ryureeru.tistory.com/6

 

alias, JOIN

실습 전 사용할 테이블 만들어줍시다 ~ alias 예약어이시다 how? [테이블명] as [지정할 예약어] [예약어].[컬럼] as [컬럼을 다르게 보이게 하고 싶을 때 쓰는 이름] select m.member_type as 회원구분 , m.user.

ryureeru.tistory.com

 

 

 

 

 


 

 

 

 

 

DBMS 내장 함수

 

      ..중에서 실습했던 거 정리 ㅎㅎ

 

 

select member_type, user_id, password, name,
case
when length(password) > 2

then concat(substring(password, 1, 2), '**')
else ''
end as password_mask
from members;
  • length 함수로 password 데이터들의 길이를 추출하고,
  • case 문으로 2 이상이면 substring 함수로 password에서 1~2 번째를 가져오고,
  • concat 함수로 ** 문자를 붙여주었다
  • 지정될 컬럼명은 password_mask로

 

 

select register_date
, date_format(register_date, %Y.%m.%d') as dt_format
from members_detail;
  • 날짜를 문자열로 바꾸기 위해 date_format 함수 사용
  • 데이터 표시 포맷은 %Y.%m.%d

 

 

select '20220321' as dt_string
, str_to_date('20220321', '%Y%m%d) as dt_date
, date_add(str_to_date('20220321', '%Y%m%d), interval 1 month) as dt_date2
from dual;
  • 문자열을 날짜로 바꾸기 위해 str_to_date 함수 사용
  • date_add 함수로 날짜(문자열을 날짜로 바꾸어준 것)를 +1 month 해서 20220421로 !!

 

 

select now() as now
, date_format(now(), '%Y-%m-01') as start_date
, date_add(str_to_date(date_format(now(), '%Y-%m-01'), %Y-%m-%d), interval 1 month),
interval -1 day) as end_date
from dual
  • 월초월말 날짜 구하기를 해보자~
  • now()로 현재 날짜 불러오고,
  • date_format 함수로 %Y-%m-01 포맷의 문자열로 변환하고 (1일로 설정됐겠쥬 ? ㅎㅎ),
  • str_to_date 함수로 문자열을 다시 날짜로,
  • date_add 함수로 +1 month를 한 후, 다시!!!!!!
  • date_add 함수로 -1 day를 해주면 완성 !!!!!!! (2월 같은 경우 때매)

 

 

 

 

 


 

 

 

 

 

페이징 처리

 

  • mysql, mariadb -> limit
  • oracle -> rownum
  • mssql -> offset, fetch

 

현재 나는 MariaDB를 사용 중

 

 

1. limit

 

select *
from members
limit 0, 10
;
  • 첫 번째(인덱스 0부터 시작)부터 10개를 가져오겠다

 

select c.code, c.company_name, c.eng_company_name, c.category
, row_number() over (order by c.code desc) as row_index
from company c
order by c.code desc
limit 30, 10
;
  • 다른 테이블(company) 예시

 

 

2. select from where로 싸버리기

 

select *
from
(
select *
from
(
select c.code, c.company_name, c.eng_company_name, c.category
, row_number() over (order by c.code desc) as row_index
from company c
order by c.code desc
) t1
where row_index <= 30
) t2
where row_index > 20
;
  • 이것도 다른 테이블(company) 예시

'DB' 카테고리의 다른 글

[DB] 대용량 sql 파일 임포트시키기  (0) 2022.09.23
[DB 개념] 함수/프로시저/트리거  (2) 2022.09.21
[DB 개념] VIEW 테이블  (0) 2022.09.21
[DB 개념] alias/JOIN  (0) 2022.09.21
[DB Error] 한글 입력 오류  (0) 2022.09.20