Plopino를 만들면서 해결하려는 문제는 작습니다. HTML 페이지는 이미 완성됐는데, 검토하는 사람이 휴대폰에서 열려면 파일이나 ZIP을 받아 실행해야 합니다. Plopino는 이미 만든 HTML, 폴더 또는 ZIP을 열람 링크로 바꾸는 도구 입니다. 내용 작성은 기존 편집기에서 하고, 공유 단계에 사용합니다. 파일 하나로 시작하기 다음을 index.html 로 저장합니다. <!doctype html> <html lang="ko"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>제안서 미리보기</title> <main> <h1>제안서 — 데모</h1> <p>작업 범위를 검토하는 예제이며 실제 주문은 접수하지 않습니다.</p> <details> <summary>작업 범위 보기</summary> <ul><li>페이지 1개</li><li>수정 1회</li></ul> </details> </main> </html> 로컬에서 열고 작업 범위를 펼쳐 봅니다. details 는 브라우저의 기본 요소라서 프레임워크나 서버 없이 동작합니다. 처음에는 외부 파일이 없는 예제로 페이지 동작과 공유 과정을 따로 확인하는 편이 좋습니다. Plopino 에 파일을 올리고 열람 링크를 복사합니다. 로그인하지 않은 다른 브라우저에서 그 링크를 열어 보세요. 이미지나 CSS를 별도 파일로 추가했다면 폴더 전체 또는 해당 파일을 포함한 ZIP을 올립니다. HTML만 올린다고 참조된 파일까지 자동으로 포함되지는 않습니다. 일회성 검토와 계속 수정할 자료 익명 업로드는 공개 링크이며 30일 동안 보관됩니다. 파일당 한도는 5MB입니다. 가상의 데이터를 넣은 작은 시연이나 단기 검토에 맞는 흐름입니다. 계정을 사용하면 board를 저장하고 관리할 수 있습니다. 내용을 갱신하면서 기존 열람 URL을 유지할 수 있고 파일당 한도는 50MB입니다. 계정 저장에는 익명 업로드의 30일 만료가 적용되지 않습니다. 같은 링크로 수정본을 전달할 때는 페이지 안에 버전과 날짜를 표시해야 검토자가 무엇이 바뀌었는지 알 수 있습니다. 활용 범위와 한계 접히는 섹션이 있는 제안서, 작은 문서 페이지, HTML로 내보낸 보고서, 정적 프로토타입처럼 브라우저에서 보여 주고 조작하는 자료를 생각하고 있습니다. HTML, CSS와 클라이언트 JavaScript의 상호작용을 유지할 수 있습니다. 정적 페이지를 공유한다고 데이터베이스, 결제 처리나 로그인 서버가 생기지는 않습니다. 위 예제도 내용을 펼칠 뿐 응답을 저장하지 않습니다. 별도 API에 의존하는 페이지라면 그 API도 따로 준비되어야 합니다. 공개 링크에 고객의 비공개 자료를 넣지 말고 데모에는 가상 데이터를 사용하세요. 빌드·테스트·팀 코드 리뷰가 필요한 서비스라면 저장소 기반 배포 흐름이 더 적합할 수 있습니다. Plopino는 이미 있는 파일을 다른 사람이 열어 보는 단계에 초점을 맞췄습니다. 링크와 함께 “이것은 [날짜/버전] 미리보기입니다. [섹션]에서 [구체적인 질문]을 확인해 주세요. 버튼은 실제 주문을 접수하지 않습니다”라고 적으면 검토 범위가 명확해집니다.
오라클 SQL 1단원 p.39 연습문제1 (Student 테이블에서 모든 학생의 이름과 ID,체중을 아래 화면과 같이 출력하세요. 컬럼 이름은 "ID AND WEIGHT"로 나오게 하세요.) >select name||'''s ID: '||id||' , WEIGHT is '||weight||'Kg' "ID AND WEIGHT" from student; p.39 연습문제2 (emp 테이블을 조회하여 모든 사람의 이름과 직업을 아래와 같이 출력하세요.) >select ename||'('||job||'), '||ename||''''||job||'''' "NAME AND JOB" from emp; p.40 연습문제3 (emp 테이블을 조회하여 모든 사원의 이름과 급여를 아래와 같은 형태로 출력하세요.) >select ename||'''s sal is $'||sal "Name And Sal" from emp; 2장. SQL 단일행 함수 단일행 함수란? 한번에 하나씩 처리하는 함수 p.79 SUBSTR/INSTR 퀴즈 (Student 테이블을 참조해서 아래 화면과 같이 1전공이(deptno1컬럼) 201번인 학생의 이름과 전화번호와 지역번호를 출력하세요. 단, 지역번호는 숫자만 나와야 합니다.) >col "AREA CODE" for a25 >select name,tel,substr(tel,1,instr(tel,')',1)-1) "AREA CODE" from student where deptno1=201; p.81 LPAD 퀴즈 (emp 테이블을 사용하여 아래 화면과 같이 deptno가 10번인 사원들의 사원 이름을 총 9바이트로 출력하되 빈자리에는 해당 자리의 숫자로 채우세요.) >select lpad(ename,9,'123456789') "LPAD" from emp where deptno=10; p.82 RPAD 퀴즈 (아래 화면과 같이 emp 테이블에서 deptno가 10번인 사원들의 이름을 총 9자리로 출력하되 오른쪽 빈자리에는 해당 자릿수에 해당되는 숫자가 출력되도록 하세요.) >select rpad(ename,9,substr('123456789',length(ename)+1,9)) "RPAD" from emp where deptno=10; P.84 REPLACE 퀴즈1 (emp 테이블에서 아래와 같이 20번 부서에 소속된 직원들의 이름과 2~3번째 글자만 '-'으로 변경해서 출력하세요.) >select ename,replace(ename,substr(ename,2,2),'--') "REPLACE" from emp where deptno=20; P.84 REPLACE 퀴즈2 (student 테이블에서 아래와 같이 1전공(depnto1)이 101번인 학생들의 이름과 주민등록번호를 출력하되 주민등록번호의 뒤 7자리는 '-'과 '/'로 표시되게 출력하세요.) >col "REPLACE" for a25 >select name,jumin,replace(jumin,substr(jumin,7,7),'-/-/-/-') "REPLACE" from student where deptno1=101; P.85 REPLACE 퀴즈3 (student 테이블에서 아래 그림과 같이 1전공이 102번인 학생들의 이름과 전화번호, 전화번호에서 국번 부분만 '* '처리하여 출력하세요. 단, 모든 국번은 3자리로 간주합니다.) >select name,tel,replace(tel,substr(tel,instr(tel,')',1)+1,3),'***') "REPLACE" from student where deptno1=102; P.85 REPLACE 퀴즈4 (student 테이블에서 아래와 같이 deptno1이 101번인 학과 학생들의 이름과 전화번호와 전화번호에서 지역번호와 국번을 제외한 나머지 번호를 * 로 표시해서 출력하세요.) >select name,tel,replace(tel,substr(tel,instr(tel,'-',1)+1,4),'****') "REPLACE" from student where deptno1=101; P.105 형 변환 함수 퀴즈: 날짜 변환하기1 (student 테이블의 birthday 컬럼을 사용하여 생일이 1월인 학생의 이름과 birthday를 아래의 화면과 같이 출력하세요. 윈도용 오라클 기준) >select studno,name,birthday from student where to_char(birthday,'MM')='01'; P. 106 형 변환 함수 퀴즈: 날짜 변환하기2 (emp 테이블의 hiredate 컬럼을 사용하여 입사일이 1,2,3월인 사람들의 사번과 이름, 입사일을 출력하세요. 윈도용 오라클 기준) > select empno,ename,hiredate from emp where to_char(hiredate,'MM') between '01' and '03'; P.108 형 변환 함수 퀴즈 3 (emp 테이블을 조회하여 comm 값을 가지고 있는 사람들의 empno,ename,hiredate, 총 연봉,15% 인상 후 연봉을 아래 화면처럼 출력하세요. 단, 총 연본은 (sal* 12)+comm으로 계산하고 아래 화면에서는 SAL로 출력되었으며 15% 인상한 값은 총 연봉의 15% 인상 값입니다. HIREDATE 컬럼의 날짜 형식과 SAL 컬럼, 15% UP 컬럼의 $표시와 기호가 나오게 하세요.) >select empno,ename, to_char(hiredate,'YYYY-MM-DD')"HIREDATE", to_char((sal*12)+comm,'$999,999') "SAL", to_char(((sal*12)+comm)*1.15,'$999,999') "15% UP" from emp where comm is not null; P.112 NVL 함수 퀴즈 (professor 테이블에서 201번 학과 교수들의 이름과 급여, bonus,총 연봉을 아래와 같이 출력하세요. 단, 총 연봉은 (pay * 12 +bonus)로 계산하고 bonus가 없는 교수는 0으로 계산하세요.) >select profno,name,pay,bonus,to_char((pay*12)+nvl(bonus,0),'999,999') "TOTAL" from professor where deptno=201; P.113 NVL2 함수 퀴즈 (아래 화면과 같이 emp 테이블에서 deptno가 30번인 사원들을 조회하여 comm값이 있을 경우 'Exist'을 출력하고 comm값이 null일 경우 'NULL'을 하세요.) >select empno,ename,comm,nvl2(comm,'Exist','NULL') "NVL2" from emp where deptno=30; P.120 DECODE 퀴즈1 (student 테이블을 사용하여 제 1전공(deptno1)이 101번인 학과 학생들의 이름과 주민번호, 성별을 출력하되 성별은 주민번호(jumin) 컬럼을 이용하여 7번째 숫자가 1일 경우 "MAN", 2일 경우 "WOMAN"으로 출력하세요.) >select name,jumin,decode(substr(jumin,7,1),1,'MAN',2,'WOMAN') "Gender" from student where deptno1=101; P.120 DECODE 퀴즈2 (student 테이블에서 1전공이(deptno1) 101번인 학생의 이름과 연락처와 지역을 출력하세요. 단, 지역번호가 02는 "SEOUL", 031은 "GYEONGGI", 051은 "BUSAN", 052는 "ULSAN", 055는 "GYEONGNAM" 입니다.) >select name,tel, decode(substr(tel,1,instr(tel,')',1)-1),02,'SEOUL',031,'GYEONGGI',051, 'BUSAN',052,'ULSAN',055,'GYEONGNAM') "LOC" from student where deptno1=101; P.123 CASE문 퀴즈 (emp 테이블을 조회하여 empno,ename,sal,LEVEL(급여등급)을 아래와 같이 출력하세요. 단, 급여등급은 sal을 기준으로 1-1000이면 Level1, 1001-2000 이면 Level 2, 2001-3000 이면 Level 3, 3001-4000 이면 Level 4, 4001보다 많으면 Level 5로 출력하세요.) >select empno,ename,sal, case when sal between 1 and 1000 then 'Level 1' when sal between 1001 and 2000 then 'Level 2' when sal between 2001 and 3000 then 'Level 3' when sal between 3001 and 4000 then 'Level 4' when sal>=4001 then 'Level 5' end "LEVEL" from emp order by 3 desc; 3장. 복수행 함수(그룹함수) 한꺼번에 여러 건의 데이터가 함수로 입력 집계함수인 count(),max(),min() -> 모든 데이터 사용 가능 sum(),avg() -> 숫자 데이터(number) 만 사용 가능 집계함수와 컬럼을 같이 select 할시 반드시 group by 사용. group by 뒤에는 사용한 모든 컬럼을 적어야 함. P.210 1 (emp 테이블을 사용하여 사원 중에서 급여(sal)와 보너스(comm)를 합친 금액이 가장 많은 경우와 가장 적은 경우, 평균 금액을 구하세요. 단, 보너스가 없을 경우는 보너스를 0으로 계산하고 출력 금액은 모두 소수점 첫째 자리까지만 나오게 하세요.) >select max(sal+nvl(comm,0)) "MAX", min(sal+nvl(comm,0)) "MIN", round(avg(sal+nvl(comm,0)),1) "AVG" from emp; 2 (student 테이블의 birthday 컬럼을 참조해서 아래와 같이 월별로 생일자 수를 출력하세요.) > 3 (student 테이블의 tel 컬럼을 참고하여 아래와 같이 지역별 인원수를 출력하세요. 단, 02-SEOUL, 031-GYEONGGI, 051-BUSAN, 052-ULSAN, 055-GYEONGNAM 으로 출력하세요. > 4 (emp 테이블을 사용하여 아래의 화면과 같이 부서별로 직급별로 급여 합계 결과를 출력하세요.) > 5 (emp 테이블을 사용하여 직원들의 급여와 전체 급여의 누적 급여금액이 아래와 같도록 출력하세요. 단, 급여를 오름차순으로 정렬하여 출력하세요.) >select deptno,ename,sal,sum(sal) over(order by sal) from emp; 6 (fruit 테이블을 아래와 같은 형태로 출력하세요.) -> pivot(sum(아래값에 넣을것) for 컬럼으로 만들것 in ('원본 컬럼이름' as "바꿀 컬럼이름")); > select * from(select name,price from fruit) pivot(sum(price) for name in('apple' as "APPLE",'grape' as "GRAPE", 'orange' as "ORANGE")); 7 (student 테이블의 tel컬럼을 사용하여 아래와 같이 지역별 인원수와 전체 대비 차지하는 비율을 출력하세요. 단, 02-SEOUL, 031-GYEONGGI, 051-BUSAN, 052-ULSAN, 055-GYEONGNAM 으로 출력하세요.) > 8 (emp 테이블을 사용하여 아래와 같이 부서별로 급여 누적 합계가 나오도록 출력하세요. 단, 부서 번호로 오름차순 출력하세요.) >select deptno,ename,sal, sum(sal) over(partition by deptno order by sal) "TOTAL" from emp; 9 (emp 테이블을 사용하여 아래와 같이 각 사원의급여액이 전체 직원 급여 총액에서 몇%의 비율을 차지하는지 출력하세요. 단, 급여 비중이 높은 사람이 먼저 출력되도록 하세요.) >select deptno,ename,sal,sum(sal) over () "TOTAL_SAL", round(ratio_to_report(sal) over()*100,2) "%" from emp order by 3 desc; 10 (emp 테이블을 조회하여 아래와 같이 각 직원들의 급여가 해당부서 합께금액에서 몇 %의 비중을 차지하는지를 출력하시오. 단, 부서 번호를 기준으로 오름차순으로 정렬하시오.) >select deptno,ename,sal,sum(sal) over(partition by deptno) as "SUM_DEPT", round(ratio_to_report(sal) over(partition by deptno)*100,2) as "%" from emp order by 1,2; 11 (loan 테이블을 사용하여 1000번 지점의 대출 내역을 출력하되 대출일자,대출종목코드,대출건수,대출총액,누적대출금액을 아래와 같이 출력하세요.) >select l_date "대출일자",l_code "대출코드",l_qty "대출건수",l_total "대출총액", sum(l_total) over(order by l_date) as "누적대출금액" from loan where l_store=1000; 12 (loan 테이블을 사용하여 전체 지점의 대출종목코드,대출지점,대출일자,대출건수,대출액을 대출코드와 대출지점별로 누적 합계를 구하세요.) >select l_code "대출종목코드",l_store "대출지점",l_date "대출일자", l_qty "대출건수",l_total "대출액", sum(l_total) over(partition by l_code,l_store order by l_date) as "누적대출금액" from loan; 13 (loan 테이블을 조회하여 1000번 지점의 대출 내역을 대출 코드별로 합쳐서 대출일자,대출구분코드,대출건수,대출총액,코드별 누적대출금액을 아래와 같이 출력하세요.) > select l_date "대출일자",l_code "대출구분코드",l_qty "대출건수",l_total "대출총액", sum(l_total) over(partition by l_code order by l_date) "누적대출총액" from loan where l_store=1000; 14 (professor 테이블에서 각 교수들의 급여를 구하고 각 교수의 급여액이 전체 교수의 급여 합계에서 차지하는 비율을 출력하세요.) >select deptno,name,pay,sum(pay) over() "TOTAL_PAY", round(ratio_to_report(pay) over()*100,2) "RATIO %" from professor order by pay desc; 15 (professor 테이블을 조회하여 학과번호,교수명,급여,학과별 급여 합계를 구하고 각 교수의 급여가 해당 학과별 급여 합계에서 차지하는 비율을 출력하세요.) >select deptno,name,pay,sum(pay) over(partition by deptno) "TOTAL_DEPTNO", round(ratio_to_report(pay) over(partition by deptno)*100,2) "RATIO(%)" from professor order by 1,2;