select li.lec_id
, li.tutor_id
, ui.name
, li.lec_name
, li.tutor_name
, CONCAT(DATE_FORMAT(li.c_st, '%Y.%m.%d'),'~', DATE_FORMAT(li.c_end, '%Y.%m.%d')) as cdate
from tb_lec_info li
inner join tb_userinfo ui on ui.loginID = li.tutor_id and ui.user_type = 'B';
-- 이력서 관리
select li.lec_id
, li.tutor_id
, ui.name
, li.lec_name
, li.tutor_name
, li.pre_pnum
, (select count(*) from tb_lecstd_info ls where ls.lec_id = li.lec_id ) as cnt
, CONCAT(DATE_FORMAT(li.c_st, '%Y.%m.%d'),'~', DATE_FORMAT(li.c_end, '%Y.%m.%d')) as cdate
from tb_lec_info li
inner join tb_userinfo ui on ui.loginID = li.tutor_id and ui.user_type = 'B';
-- 취업 관리
select ui.name, ui.loginID, ui.tel, ui.mail, ifnull(em.wp_state,'미취업') as wp_state
from tb_lecstd_info li
inner join tb_userinfo ui on ui.loginID = li.std_id
left outer join tb_employ em on li.std_id = em.std_id
where li.lec_id = '1007';
-- 학생명 연락처 입사일 퇴사일 업체명 재직여부
select ui.name
, ui.tel
, em.employ_day
, em.resign_day
, em.comp_name
, ifnull(em.resign_day,'재직중')
, case em.resign_day WHEN '' then '재직중'
ELSE '퇴직'
END as emp_type
from tb_employ em
inner join tb_userinfo ui on ui.loginID = em.std_id;
-- 학번 학생명 연락처 강의명 가입일자
select ui.std_num
,ui.name
,ui.tel
,ll.lec_name
,ui.join_date
from tb_userinfo ui
left outer join (
select li.lec_id
,li.lec_name
,le.std_id
from tb_lecstd_info le
inner join tb_lec_info li on li.lec_id = le.lec_id
) ll on ui.loginID = ll.std_id
where ui.user_type = 'A'
and ui.loginID not in (
select em.std_id
from tb_employ em
);
-- 강의실 명 크기 자리수 비고
select lm.lecrm_name
,lm.lecrm_size
,lm.lecrm_snum
,lm.lecrm_note
,lm.lecrm_id
from tb_lecrm lm;
-- 번호 장비명 갯수 비고
select eq.equ_id
,eq.equ_name
,eq.equ_num
,eq.equ_note
from tb_equ eq
where eq.lecrm_id = '1';
-- 강의명 시험명 시험기간 상태 대상자 수 응시자 수 미응시자 수
select li.lec_id
,li.lec_name
,te.test_name
,concat(DATE_FORMAT(te.test_start, '%Y.%m.%d'),'-',DATE_FORMAT(te.test_end, '%Y.%m.%d')) as dduedate
,case when te.test_end < now() then '시험종료'
else '시험중'
end state
,ifnull(llc.cnt,0) as cnt
,ifnull(llt.cnt,0) as lltcnt
,(ifnull(llc.cnt,0) - ifnull(llt.cnt,0)) as nocnt
-- ,(cnt - lltcnt) as nocnt
from tb_test te
inner join tb_lec_info li on te.lec_id = li.lec_id
left outer join (
select lc.lec_id, count(*) as cnt
from tb_lecstd_info lc
group by lc.lec_id
) llc on li.lec_id = llc.lec_id
left outer join (
select tu.test_id, count(*) as cnt
from tb_test_user tu
group by tu.test_id
) llt on te.test_id = llt.test_id;
Oracle만 사용했던 나는 이번 프로젝트에서 생전 처음으로 MariaDB를 쓰면서 MySql 문법을 익혀야 했다.
■ 공백치환 함수 ( NVL -> IFNULL )
Oracle : SELECT NVL('컬럼명', '') FROM DUAL;
MySql : SELECT IFNULL('컬럼명', '') FROM DUAL;
■ 현재 날짜시간
Oracle : SYSDATE
Mysql : NOW()
■ 날짜포멧
Oracle : TO_CHAR(sysdate,'MMDDYYYYHH24MISS')
Mysql : DATE_FORMAT(now(),'%Y%m%d%H%i%s') -> 여기서 대문자Y는 4자리 년도, 소문자 y는 2자리 년도
■ 날짜 포멧 : 요일
Oracle : 요일이 1~7로 인식함 -> TO_CHAR(SYSDATE - 1, 'D')
Mysql : 요일이 0~6으로 인식 -> DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), '%w')
■ Like절 '%' 사용법
Oracle : Like '%'||'문자'||'%' 이런식으로 컬럼명 앞뒤로 '%'를 붙여주면 된다
Mysql : LIKE CONCAT('문자','%') 이런식으로 CONCAT 함수 사용
■ 형변환
Oracle : To_char, To_number 등
Mysql : CAST
SELECT TO_CHAR(1234) FROM DUAL
-> SELECT CAST(1234 AS CHAR) FROM DUAL
■ 대소문자 구분함
Oracle : 구분없음
Mysql : 기본적으로 구분하나, 설정으로 변경 가능함
■ ROWNUM
Oracle : where 절에 rownum > 5 and rownum =< 10
Mysql : where절 없이 limit 5,10
■ Sequence(시퀀스)는 둘 다 사용자함수를 만들어서 아래와 같이 사용
Oracle : 시퀀스명.nextval
Mysql : 시퀀스명.currval
■ 문자열 자르기
Oracle: SUBSTR(문자열, 1, 10)
Mysql: SUBSTRING(문자열, 1,10), LEFT(문자열, 3), RIGHT(문자열, 3)
■ 문자열 합치기 ( - 문자열을 연결한다고 가정)
Oracle: 문자열(또는 컬럼) ||' - '
Mysql: CONCAT(문자열(또는 컬럼), ' - ')
■ 예약어가 컬럼명일 때
Oracle: 컬럼명을 따옴표(")로 감싸기 (예: select "column" from tab)
Mysql: 컬럼명을 TAB 키 위에 있는 ` 키 ( Single quotation )로 감싸기
■ 저장프로시저 있는지 여부 파악해서 Create 하기
Oracle: CREATE OR REPLACE PROCEDURE 프로시저명
Mysql: DROP PROCEDURE IF EXISTS 프로시저명; 을 한 뒤에 CREATE PROCEDURE 프로시저명
짱이예요bbbbb