본문 바로가기
코딩/수업 정리

21.01.13 Wed [036]

by 6^6 2021. 1. 13.
728x90

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="수정"> &nbsp;&nbsp; <a href="list.do">목록보기</a> &nbsp;&nbsp; <a href="delete.do?bId=${content_view.bId}">삭제</a> &nbsp;&nbsp; <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);

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

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

댓글