SQL
outer join
조인 조건에 만족하지 않는 행도 나타내는 조인 기법이다.
SELECT * FROM emp;
↓결과

SELECT employee.ename || '의 매니저는 ' || manager.ename || '입니다.' FROM emp employee, emp manager WHERE employee.mgr = manager.empno (+);
↓결과

<4가지>
DML(데이터 조작어)" select, insert ,update, delete -" 데이터 다루는 것
DDL(데이터 정의어) "create, alter ,crop ,rename ,truncate "-테이블 다루는 것
DCL TCL - 이거 두개는 나중에 배움.
<데이터 추가하는 insert 명령문>
일단 연습용으로 쿼리 복사
//테이블만 복사?
CREATE TABLE DEPT02 AS SELECT * FROM DEPT WHERE 1=0; //데이터 구조만 복사해서 새로운 테이블 생성
WHERE 1=1 은 언제나 '참' / OR 구문에서는 1=0;
INSERT INTO dept02 ( deptno, dname, loc ) VALUES ( 10, 'accounting', 'new york' ); SELECT * FROM dept02;
결과값

INSERT INTO dept02 VALUES ( 20, 'research', 'dallas' ); //만약 테이블 지정안해주면 그냥 순서대로 알아서 들어간다.
결과값

그리고 commit; 시키는 것 잊지말기 - 그냥 변경된 내용을 모두 영구 저장한다. 라고 이해하기.
<내용까지 복사하는 create 명령문>
create table emp01 as select * from emp; //emp복사해서 emp01에 넣어라(이건 테이블 뿐만아니라 내용도 복사된다.)
<데이터 수정하는 update 명령문>
모든 사원의 부서 번호를 30번으로 수정 후 확인하는 쿼리문 update emp01 set deptno = 30;
//사원의 급여를 10% 인상시키는 update문을 만드는 쿼리문 update emp01 set sal = sal+(sal*0.1); 또는 sal*1.1;
//모든 입사일을 오늘로 수정하는 쿼리문 update emp01 set hiredate=sysdate;
//부서번호가 10번인 사원의 부서번호를 40번으로 수정하는 쿼리문 update emp01 set deptno=40 where deptno=10;
//job컬럼값이 manager인 경우, 급여를 10% 인상하는 쿼리문 update emp01 set sal=sal*1.1 where job='MANAGER';
//1982년에 입사한 사원의 입사일을 오늘로 수정하는 쿼리문 update emp01 set hiredate=sysdate where hiredate between '1982/01/01' and '1982/12/31'; update emp01 set hiredate=sysdate where substr(hiredate, 1, 2)='82'; //이렇게해도 가능
//SMITH사원의 부서번호는 20번으로, job컬럼값은 manager로 한꺼번에 수정 update emp01 set deptno=20, job='MANAGER' where ename='SMITH';
<데이터를 삭제하는 delete 명령문>
create table dept01 as select * from dept; select * from dept01; delete from dept01;

create table dept01 as select * from dept; select * from dept01; //다시 생성해서 연습...dept01을 복사해야함
//30번 부서 삭제하기 delete from dept01 where deptno=30;
<DDL> - 안에 어떤 명령문이있는지 다 외울필요없지만 익숙해지기
문자 숫자 데이터 순으로 많이씀
<가변길이 문자데이터 VARCHRA2(size)>
varchar2(size) - 가변형이다. / 바차투 라고 읽는다.
CREATE TABLE emp01 ( empno NUMBER(4), //배열공간 4개 ename char(1000), //배열공간 1000개 sal NUMBER(7, 2) ); //근데 1000개는 너무 많을 수 있다. CREATE TABLE emp01 ( empno NUMBER(4), ename VARCHAR2(1000),//varchar2를 쓰면 입력된 길이만큼만 배열공간가짐 sal NUMBER(7, 2) );
파일같은건 db에 저장 거의 안하기때문에(그냥 링크만 걸어놓음) ddl거의 안씀 - db 모델링 툴 로 다 사용하게 됨
char(size), varchar2(size), number, number(w)정도만 알아두기
CREATE TABLE emp01 ( empno NUMBER(4), ename VARCHAR2(20), sal NUMBER(7, 2) );
**desc 는 DTO만들때 유용하다. ex)desc emp01;
<컬럼추가하는 alter>
//emp01 테이블에서 job 컬럼을 추가하고싶으면? alter table emp01 add (job varchar2(9)); 확인은 desc emp01; 로 하기
<컬럼 수정 변경 하는 alter modify>
alter table emp01 modify (job varchar(30));
출력화면

<기존 컬럼 삭제하는 drop> - 실무에서 테스트용 아니고서야 안씀
alter table emp01 drop column job; //emp01 테이블의 job컬럼을 삭제
<잘라내기 truncate>
delete, truncate , drop 명령어 차이

- DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어 들지 않는다. 원하는 데이터만 지울 수 있다. 삭제 후 잘못 삭제한 것을 되돌릴 수 있다.
- TRUNCATE 명령어는 용량이 줄어 들고, 인덱스 등도 모두 삭제 된다. 테이블은 삭제하지는 않고, 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제 후 절대 되돌릴 수 없다.
- DROP 명령어는 데이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.
<데이터 딕셔너리와 데이터 딕셔너리뷰 DD> 중요도하지않은데 정처기에서만 나옴
시스템테이블이다.
desc user_tables;
<서브쿼리> select문이 2개 들어가있는 문
//사원들의 평균급여보다 더 많은 급여를 받는 사원을 검색하는 쿼리문 select ename, sal from emp where sal > (select avg(sal) from emp);
↓join의 기본 반드시 외우기 ★★★
//SMITH가 속한 부서의 이름 //join 방식 일단 emp와 dept 에 있으니까 join! select e.ename,d.dname from emp e, dept d where d.deptno=e.deptno; // join은 이거 무조건 외우기 select e.ename,d.dname from emp e, dept d where d.deptno=e.deptno and e.ename='SMITH'; //서브쿼리 방식 select dname from dept where deptno= (select deptno from emp where ename = 'SMITH');
//연봉을 3000이상 받는 사원이 소속된 부서와 동일한 부서에서 근부하는 사원들의 정보를 출력하는 쿼리문 select ename, sal, deptno from emp where deptno in (select distinct deptno from emp where sal >= 3000); //결과물이 2개이상일땐 in으로 처리한다.
어제 게시판 list이어서...
content, write, command 부분 생성
[content_view.jsp] <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>Insert title here</title> </head> <body> <table width="500" cellpadding="0" cellspacing="0" border="1"> <form action="modify.do" method="post"> <input type="hidden" name="bId" value="${content_view.bId}"> <tr> <td> 번호 </td> <td> ${content_view.bId} </td> </tr> <tr> <td> 히트 </td> <td> ${content_view.bHit} </td> </tr> <tr> <td> 이름 </td> <td> <input type="text" name="bName" value="${content_view.bName}"></td> </tr> <tr> <td> 제목 </td> <td> <input type="text" name="bTitle" value="${content_view.bTitle}"></td> </tr> <tr> <td> 내용 </td> <td> <textarea rows="10" name="bContent" >${content_view.bContent}</textarea></td> </tr> <tr > <td colspan="2"> <input type="submit" value="수정"> <a href="list.do">목록보기</a> <a href="delete.do?bId=${content_view.bId}">삭제</a> <a href="reply_view.do?bId=${content_view.bId}">답변</a></td> </tr> </form> </table> </body> </html>
[BFrontController.java] package edu.bit.ex.controller; //패키지명 반드시 이렇게 쓰기 import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.bit.ex.command.BCommand; import edu.bit.ex.command.BContentCommand; import edu.bit.ex.command.BDeleteCommand; import edu.bit.ex.command.BListCommand; import edu.bit.ex.command.BModifyCommand; import edu.bit.ex.command.BWriteCommand; @WebServlet("*.do") // 유저가 url치고들어오는데 뭘치고 들어오든 .do(controll로 들어오는거)면 다 받겠다. public class BFrontController extends HttpServlet { private static final long serialVersionUID = 1L; public BFrontController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet"); actionDo(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 한글처리했을때 에러나서 throws 추가 System.out.println("actionDo"); // .do로 들어오면 actionDo로 표시하겠다. request.setCharacterEncoding("EUC-KR"); String viewPage = null; // FrontController에서 view들을 결정하는것. BCommand command = null; // 그림에 command command 객체가 바로 이거. // Command가 인터페이스(자손구현하는것)이다. String uri = request.getRequestURI(); String conPath = request.getContextPath(); String com = uri.substring(conPath.length()); System.out.println(uri); System.out.println(conPath); System.out.println(com); if (com.equals("/list.do")) { // .list.do 이렇게 치고 들어오게 링크주는것. command = new BListCommand(); // ↑다형성 적용. BCommand는 부모 command.execute(request, response); viewPage = "list.jsp"; } else if (com.equals("/content_view.do")) { // .list.do 이렇게 치고 들어오게 링크주는것. command = new BContentCommand(); // ↑다형성 적용. BCommand는 부모 command.execute(request, response); viewPage = "content_view.jsp"; // 얘로 받아와야하니까 수정. } else if (com.equals("/write_view.do")) { viewPage = "write_view.jsp"; // 얘로 받아와야하니까 수정. } else if (com.equals("/write.do")) { // write.do에서 넘어오는거만듦 command = new BWriteCommand(); command.execute(request, response); viewPage = "list.do"; // write가끝났으면 list.do로 돌아가야하니까 } else if (com.equals("/delete.do")) { // write.do에서 넘어오는거만듦 command = new BDeleteCommand(); command.execute(request, response); viewPage = "list.do"; // write가끝났으면 list.do로 돌아가야하니까 } else if (com.equals("/modify.do")) { // write.do에서 넘어오는거만듦 command = new BModifyCommand(); command.execute(request, response); viewPage = "list.do"; // write가끝났으면 list.do로 돌아가야하니까 } RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage); dispatcher.forward(request, response); //위치헷갈리지말기... } }
[BDao.java] package edu.bit.ex.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.ArrayList; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import edu.bit.ex.dto.BDto; public class BDao { private DataSource dataSource;// 전역변수로 수정 public BDao() { try { Context context = new InitialContext(); dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle"); } catch (Exception e) { e.printStackTrace(); } } public ArrayList<BDto> list() { ArrayList<BDto> dtos = new ArrayList<BDto>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = dataSource.getConnection(); String query = "select bId, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent from mvc_board order by bGroup desc, bStep asc"; preparedStatement = connection.prepareStatement(query); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { int bId = resultSet.getInt("bId"); String bName = resultSet.getString("bName"); String bTitle = resultSet.getString("bTitle"); String bContent = resultSet.getString("bContent"); Timestamp bDate = resultSet.getTimestamp("bDate"); int bHit = resultSet.getInt("bHit"); int bGroup = resultSet.getInt("bGroup"); int bStep = resultSet.getInt("bStep"); int bIndent = resultSet.getInt("bIndent"); BDto dto = new BDto(bId, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent); dtos.add(dto); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (resultSet != null) resultSet.close(); if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } return dtos; } public BDto contentView(String bId) { BDto dtos = null;// 위에Array소스 복붙하고 얘는 배열받을필요없으니까 수정 Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { connection = dataSource.getConnection(); String query = "select * from mvc_board where bId =?"; // ?로 받기.이건 prepareStatement의 자바문법이니 외우기\ // ?는 함수에서 변수로 넘어올때 쓴다. preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, Integer.parseInt(bId)); // bId가 int여서 1로주고 파싱하기 // 이렇게 쓰면 위에 ?에 자동으로 1이 들어간다. resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { int id = resultSet.getInt("bId"); // 위에 bid있으니까 id로 수정 String bName = resultSet.getString("bName"); String bTitle = resultSet.getString("bTitle"); String bContent = resultSet.getString("bContent"); Timestamp bDate = resultSet.getTimestamp("bDate"); int bHit = resultSet.getInt("bHit"); int bGroup = resultSet.getInt("bGroup"); int bStep = resultSet.getInt("bStep"); int bIndent = resultSet.getInt("bIndent"); dtos = new BDto(id, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (resultSet != null) resultSet.close(); if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } return dtos; } public void write(String bName, String bTitle, String bContent) { // 위에contentView소스 복붙. Connection connection = null; PreparedStatement preparedStatement = null; // ResultSet resultSet = null; - 얘는 필요없다. try { connection = dataSource.getConnection(); String query = "insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent) values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq.currval, 0, 0 )"; // ?로 받기.이건 prepareStatement의 자바문법이니 외우기 // ?는 함수에서 변수로 넘어올때 쓴다. preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, bName); preparedStatement.setString(2, bTitle); preparedStatement.setString(3, bContent); int rn = preparedStatement.executeUpdate(); // insert는 update로 들어가줘야함 System.out.println("insert 결과" + rn); } catch (Exception e) { e.printStackTrace(); } finally { try { if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } } public void delete(int bId) { // 위에 write 소스 복붙. Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); String query = "delete from mvc_board where bId=?"; preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, bId); int rn = preparedStatement.executeUpdate(); // System.out.println("delete 결과" + rn); } catch (Exception e) { e.printStackTrace(); } finally { try { if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } } public void modify(int bId, String bName, String bTitle, String bContent) { // 위에 write 소스 복붙. Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); String query = "update mvc_board set bName = ?, bTitle = ?, bContent = ? where bId = ?"; preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, bName); preparedStatement.setString(2, bTitle); preparedStatement.setString(3, bContent); preparedStatement.setInt(4, bId); int rn = preparedStatement.executeUpdate(); System.out.println("modify 결과" + rn); } catch (Exception e) { e.printStackTrace(); } finally { try { if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } } }
[BDeleteCommand.java] package edu.bit.ex.command; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.bit.ex.dao.BDao; public class BDeleteCommand implements BCommand { @Override public void execute(HttpServletRequest request, HttpServletResponse response) { int bId = Integer.parseInt(request.getParameter("bId")); BDao dao = new BDao(); dao.delete(bId); } }
[BContentCommand.java] package edu.bit.ex.command; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.bit.ex.dao.BDao; import edu.bit.ex.dto.BDto; public class BContentCommand implements BCommand { @Override public void execute(HttpServletRequest request, HttpServletResponse response) { String bId= request.getParameter("bId"); BDao dao = new BDao(); BDto dto = dao.contentView(bId); //BDao.java 에 생성 //array에 ctrl+c,v request.setAttribute("content_view", dto); } }
[BModifyCommand.java] package edu.bit.ex.command; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.bit.ex.dao.BDao; public class BModifyCommand implements BCommand { @Override public void execute(HttpServletRequest request, HttpServletResponse response) { int bId = Integer.parseInt(request.getParameter("bId")); String bName = request.getParameter("bName"); String bTitle = request.getParameter("bTitle"); String bContent = request.getParameter("bContent"); BDao dao = new BDao(); dao.modify(bId, bName, bTitle, bContent); } }
* 헷갈리는 거 정리*
request.setParameter() 와 request.getParameter()를 이용하면 String의 값 밖에는 주고 받을 수 없다.
그럼 Action으로 넘어온 값을 변경시킨후 JSP 페이지로 넘겨주기 위해서는 request.setAttribute() 를 써서 넘겨주고 JSP 페이지에서는 request.getAttribute()를 써서 받아야한다.
이때 request.setAttribute() 를 통해 넘겨준 값을 request.getParameter() 를 써서 받으려 해도 받지 못한다.
이때 type이 Object 이기 때문에 반드시 형변환을 해줘야 한다.
* action에서 객체를 request에 담아 보낼경우.
request.setAttribute("객체명", 객체);
ex) request.setAttribute("page",page)
만약 form 의 hidden 값인 page 를 넘겨받았다면 그 값을 변경하여 다시 보낼수 있다.
이때 사용하는 것이 request.setAttribute() 이다.
request.getAttribute() 는 요청된 이름의 Value 를 Object로 넘겨준다.
getAttribute는 특정 요소노드 내에 특정 한 속성값을 가져오는 메소드이다.
setAttribute는 메소드는 속성값을 변경시키는 메소드이다.
사용방법은 객체명.setAttribute("속성노드명",새로운속성값);
Object x = request.getAttribute("객체")
1. 게시판 삭제와 업데이트(수정)를 구현하시오.
[BDao.java] public void delete(int bId) { // 위에 write 소스 복붙. Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); String query = "delete from mvc_board where bId=?"; preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, bId); int rn = preparedStatement.executeUpdate(); // System.out.println("delete 결과" + rn); } catch (Exception e) { e.printStackTrace(); } finally { try { if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } } public void modify(int bId, String bName, String bTitle, String bContent) { // 위에 write 소스 복붙. Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); String query = "update mvc_board set bName = ?, bTitle = ?, bContent = ? where bId = ?"; preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, bName); preparedStatement.setString(2, bTitle); preparedStatement.setString(3, bContent); preparedStatement.setInt(4, bId); int rn = preparedStatement.executeUpdate(); System.out.println("modify 결과" + rn); } catch (Exception e) { e.printStackTrace(); } finally { try { if (preparedStatement != null) preparedStatement.close(); if (connection != null) connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } }
[BDeleteCommand.java] package edu.bit.ex.command; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.bit.ex.dao.BDao; public class BDeleteCommand implements BCommand { @Override public void execute(HttpServletRequest request, HttpServletResponse response) { int bId = Integer.parseInt(request.getParameter("bId")); BDao dao = new BDao(); dao.delete(bId); } }
[BModifyCommand.java] package edu.bit.ex.command; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.bit.ex.dao.BDao; public class BModifyCommand implements BCommand { @Override public void execute(HttpServletRequest request, HttpServletResponse response) { int bId = Integer.parseInt(request.getParameter("bId")); String bName = request.getParameter("bName"); String bTitle = request.getParameter("bTitle"); String bContent = request.getParameter("bContent"); BDao dao = new BDao(); dao.modify(bId, bName, bTitle, bContent); } }
2.아래를 sql 문으로 나타 내시오.
--1> 부서테이블의 모든 데이터를 출력하라.
select * from dept; desc dept;
--2> EMP테이블에서 각 사원의 직업, 사원번호, 이름, 입사일을 출력하라.
select job,empno,ename, hiredate from emp;
--3> EMP테이블에서 직업을 출력하되, 각 항목(ROW)가 중복되지 않게 출력하라.
select distinct job from emp ;

--4> 급여가 2850 이상인 사원의 이름 및 급여를 표시하는 출력하라.
select ename, sal from emp where sal>=2850 ;

--5> 사원번호가 7566인 사원의 이름 및 부서번호를 표시하는 출력하라.
select e.ename, d.deptno, e.empno from emp e,dept d where e.empno=7566;

--6> 급여가 1500이상 ~ 2850이하의 범위에 속하지 않는 모든 사원의 이름 및 급여를 출력하라.
select ename, sal from emp where sal not between 1500 and 2850;

--7> 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 입사일을 출력하라.
입사일을 기준으로 해서 오름차순으로 정렬하라.
select ename, job, hiredate from emp where hiredate between '81/02/20' and '81/05/01' order by hiredate asc;

--8> 10번 및 30번 부서에 속하는 모든 사원의 이름과 부서 번호를 출력하되,
이름을 알파벳순으로 정렬하여 출력하라.
select e.ename, d.deptno, d.dname from emp e, dept d where d.deptno in(10,30) order by e.ename asc;

--9> 10번 및 30번 부서에 속하는 모든 사원 중 급여가 1500을 넘는 사원의
이름 및 급여를 출력하라.
--(단 컬럼명을 각각 employee 및 Monthly Salary로 지정하시오)
select e.ename as "employee" ,e.sal as "Monthly Salary" from emp e, dept d where d.deptno in(10,30) and sal>1500;

--10> 관리자가 없는 모든 사원의 이름 및 직위를 출력하라.
select ename, job, mgr from emp where mgr is null;

--11> 커미션을 받는 모든 사원의 이름, 급여 및 커미션을 출력하되, 급여를 기준으로
내림차순으로 정렬하여 출력하라.
select ename, sal, comm from emp where comm != '0' order by sal desc;

--12> 이름의 세 번째 문자가 A인 모든 사원의 이름을 출력하라.
select ename from emp where ename like '__A%';

--13> 이름에 L이 두 번 들어가며 부서 30에 속해있는 사원의 이름을 출력하라.
select e.ename, d.deptno from emp e, dept d where e.ename like '%L%L%' and d.deptno = 30;

--14> 직업이 Clerk 또는 Analyst 이면서 급여가 1000,3000,5000 이 아닌
모든 사원의 이름, 직업 및 급여를 출력하라.
select ename, job, sal from emp where sal not in(1000,3000,5000) and job in('CLERK','ANALYST');

--15> 사원번호, 이름, 급여 그리고 15%인상된 급여를 정수로 표시하되 컬럼명을
New Salary로 지정하여 출력하라.
select deptno, ename, sal, sal*1.5 as "New Salary" from emp;

--16> 15번 문제와 동일한 데이타에서 급여 인상분(새 급여에서 이전 급여를 뺀 값)을 추가해서
출력하라.(컬럼명은 Increase로 하라).
select deptno, ename, sal, (sal*1.5-sal) as "Increase" from emp;

--18> 모든 사원의 이름(첫 글자는 대문자로, 나머지 글자는 소문자로 표시) 및 이름 길이를
표시하는 쿼리를 작성하고 컬럼 별칭은 적당히 넣어서 출력하라.
select initcap(ename)as name, length(ENAME) as name_length from emp;

--19> 사원의 이름과 커미션을 출력하되, 커미션이 책정되지 않은
사원의 커미션은 'no commission'으로 출력하라.
select ename, decode(comm,0,'no commission',null,'no commission',comm) from emp; //↓선생님 풀이 select empno, deptno, nvl(to_char(comm), 'no commission') from emp;

++
오라클 sql developer에서 잘못 건드려서 파일 수정되었을때 다시 시간 되돌려서 복구하는 방법.
SELECT *
FROM emp
AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '30' MINUTE);
'코딩 > 수업 정리' 카테고리의 다른 글
21.01.15 [038] Fri (0) | 2021.01.15 |
---|---|
21.01.14 Thu [037] (0) | 2021.01.14 |
21.01.12 Tue [035] (0) | 2021.01.12 |
21.01.11 Mon [034] (0) | 2021.01.11 |
21.01.08 Fri [033] (0) | 2021.01.08 |
댓글