-- 임의의 사원 정보 :
-- 이름 : 이선우
-- 입사일 : 2015-05-06
select '이선우','2015-05-06' 입사일,
date_add('2015-05-06',
interval 7 - dayofweek('2015-05-06')+ 1 day);
-- 풀이
일단 이선우의 입사일은 2015-05-06 이다. 이 날짜를 기준으로 다음주 일요일이 언제인지 구하는 것인데.
5월 6일의 요일을 date_add를 통해 토요일로 만들어야한다. 토요일로 만드는 이유는 초기화의 개념으로 받아들
이면 편한다. 날짜의 기준을 잡을때 어떤 요일이던 토요일로 만들어주고 거기서 원하는 요일의 코드를 dayofweek
함수로 반환해서 초기화한 토요일에 더 해주면 자연스레 다음주의 원하는 요일을 구할 수 있다.
date_add함수를 이용하여 기준날짜로부터 몇일을 추가하는지 interval을 이용해서 일주일인 7일을 기준으로 잡고
일요일로 만들기 위해 dayofweek함수를 이용하여 현재요일의 코드를 반환받아 7에서 빼주면 토요일까지 남은 날짜가
나올 것이고 남은 날짜를 기준날짜에 더해주면 자연스레 토요일이 된다.
토요일이 되고나서 dayofweek 함수로 요일들을 뽑아내면 1: 일요일 2: 월요일 3: 화요일 ...
이렇게 나오는데 원하는 요일인 일요일인 +1을 더해주면 다음주 일요일의 날짜가 출력되는걸 확인할 수 있다.
풀면서 골때렸던 문제가 뭐가 더 있나 훑어봤는데 2일넘게 다 반복적으로 훑어봤던거라 뭔가 다 익숙한 느낌이 난다.
select substr(123456789,5,1);
-- 숫자형 데이터가 자동으로 문자형으로 변환
select 1234567890, cast(1234567890 as char); -- 숫자는 오른쪽정렬 문자형은 왼쪽으로 정렬
-- cast를 char형을 바꿔서 왼쪽정렬해서 출력되는 것을 확인할 수 있다~
select 10/3, 10/'3';
-- 첫번째 값은 float형으로 소수점자리가 4자리까지나오고
-- 두번재 값은 문자가 실수(float)로 자동형변환 되어 더블형으로 소수점자리가 많아지네요잉~
select 10/cast( '3' as signed ),10/cast('3' as float);
select 10/cast('3' as integer), 10/cast('3' as float );
select cast(124035 as time);
select cast(20201210 as date);
-- 시간, 날짜도 변환가능 (단, 정수형태로 작성해야 함)
깃허브를 알게된뒤 부터 블로그에 올리지 않고 바로 깃허브에 학원에서 올린 코드들을 보며 복습해왔는데
확실히 사람이 편해지면 게을러진다. 나만 그런걸수도 있지만 컹스컹스
그전에 올린 글을 보니 DAY1 통합개발환경 구축하는 이클립스를 설치했었는데 친구가 블로그에 복습하면서 하는게 좋다고 해서 나도 한번 다시 블로그에 수업에 했던 내용을 적어 복습할겸 적어본다.
깃허브로 코드들만 보니 뭔가 복습이 제대로 안되고 있다고 느끼기도 해서 컹스컹스방구
일단 오늘 MySQL에서 뷰와 내장함수를 배웠다.
뷰( View) :
1. 다른 테이블을 기반으로 만들어진 가상 테이블
2. 데이터를 실제로 저장X , 논리적 존재하는 테이블 but 일반테이블과 동일한 방법으로 사용
3. 뷰를 통해 기본테이블( 뷰를 만드는 물리적 테이블)의 내용을 쉽게 조회 가능하나 기본테이블의
데이터를 변경하는 것은 제한적이다.
4. order by 정렬 불가능
뷰( View )의 목적 :
1. 특정필드에만 접근 허용( 보안의 목적 )
2. 데이터 조작의 간소화 ( 조인/검색 )
뷰( View ) 생성 코드 :
-- 뷰 생성
create view [뷰이름] as select문
-- 뷰의 이름을 생성후 as 로 뷰에 추가할 테이블을 select 문으로 설정해준다.
-- 뷰를 변경할수도 있다.
alter view [뷰이름] as select문
뷰( View ) 를 이용한 데이터 삽입, 수정,삭제 :
1. 뷰는 원본테이블의 분신이다.
2. 삽입, 수정, 삭제 작업은 원본테이블을 대상으로 진행
단, 수정,삭제는 제한적으로 수행이 될 수 있다.
3. 수정,삭제가 제한적으로 수행이 되는 테이블의 예로 지금 까지 내가 확인한 바로는
테이블에서 컬럼을 뽑아와 뷰를 만든 뷰에서
수정을 하려고 할 때 안뽑아온 나머지 컬럼에 not null 이 적용 되어있으면 수정 불가능하다.
문제) 원본테이블의 부재의 이유는 깃허브에 있다.. 아쉬운 마음에 사진을 첨부해본다...
-- 제품번호가 p08, 재고량이 1000, 제조업체가 신선식품인 새로운 제품의 정보를
-- 제품1 뷰에 삽입해보자. 그런 다음 제품1 뷰에 있는 모든 내용을 검색해보자
create view 제품1 as
select pdNum ,qunatity,company from productTest;
insert into 제품1 values ('p08',1000,'신선식품');
select * from 제품1;
문제2) 뷰를 만들때 여러 테이블을 조인하여 만들 수도 있다..
조인하여 만들면 편하게 데이터를 조회할 수 있는데
아래의 문제가 그렇다.
주문 테이블은 상품테이블과 고객테이블에 외래키를 두고 있다.
그 외래키로 묶인걸 조인해서 뷰를 만들어 놓으면 각각의 테이블의 데이터 값들을 넘나들며 조회할 수 있는데
예를들어 고객테이블의 csid 가 'banana' 인 고객의 이름은 '김선우'이다. 단순하게 김선우의 주문 제품이 무엇인지
알아보려면 뷰를 만들기 이전에는 셀랙문에 서브쿼리를 이용하든 조인을 이용해서 제품테이블과 주문테이블을 연결 해주어야 하지만 전부 묶어서 뷰를 만들어 놓으면 셀렉문을 쓸때 from에 뷰를 걸어놓고 where 절에 김선우 라는 조건을 걸어만 주면 된다. 앙 기모륑~
-- 주문, 상품, 고객테이블을 조인하고
-- 판매데이터라는 뷰를 만드세요
-- 또한, banana 고객이 주문한 상품이름을 조회하세요
create view 판매데이터 as
select * from orderTest ot join productTest pt using(pdNum)
join customerTest ct using(csid);
select pdName from 판매데이터 where csid='banana';