DATABASE ojdbc, DXL, Data dictionary (230712)

이원건·2023년 7월 12일
0

DATABASE

목록 보기
5/6
post-thumbnail

1. 오라클 emp table을 출력하는 자바 프로그래밍을 쓰시오.

  • 코드

    • EmpDTO.java
    package google_docs_emp.DTO;
    
    import java.sql.Date;
    
    //EMPNO    NOT NULL NUMBER(4)    
    //ENAME             VARCHAR2(10) 
    //JOB               VARCHAR2(9)  
    //MGR               NUMBER(4)    
    //HIREDATE          DATE         
    //SAL               NUMBER(7,2)  
    //COMM              NUMBER(7,2)  
    //DEPTNO            NUMBER(2)
    public class EmpDTO {
    	private int empno;
    	private String ename;
    	private String job;
    	private int mgr;
    	private Date hiredate;
    	private int sal;
    	private int comm;
    	private int deptno;
    	
    	
    	public EmpDTO() {
    	}
    	
    	public int getEmpno() {
    		return empno;
    	}
    	public void setEmpno(int empno) {
    		this.empno = empno;
    	}
    	public String getEname() {
    		return ename;
    	}
    	public void setEname(String ename) {
    		this.ename = ename;
    	}
    	public String getJob() {
    		return job;
    	}
    	public void setJob(String job) {
    		this.job = job;
    	}
    	public int getMgr() {
    		return mgr;
    	}
    	public void setMgr(int mgr) {
    		this.mgr = mgr;
    	}
    	public Date getHiredate() {
    		return hiredate;
    	}
    	public void setHiredate(Date hiredate) {
    		this.hiredate = hiredate;
    	}
    	public int getSal() {
    		return sal;
    	}
    	public void setSal(int sal) {
    		this.sal = sal;
    	}
    	public int getComm() {
    		return comm;
    	}
    	public void setComm(int comm) {
    		this.comm = comm;
    	}
    	public int getDeptno() {
    		return deptno;
    	}
    	public void setDeptno(int deptno) {
    		this.deptno = deptno;
    	}
    
    
    	@Override
    	public String toString() {
    		return "empno : " + empno + " ename : " + ename + " job : " + job + " mgr : " + mgr + " hiredate : " + hiredate
    				+ " sal : " + sal + " comm : " + comm + " deptno : " + deptno; 
    	}
    	
    }
    • EmpDAO.java
    package google_docs_emp.DAO;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    
    import google_docs_emp.DTO.EmpDTO;
    
    public class EmpDAO {
    	private String driver = "oracle.jdbc.OracleDriver";
    	private String url="jdbc:oracle:thin:@localhost:1521:xe";
    	private String user = "scott";
    	private String password = "tiger";
    
    	public EmpDAO() {
    		try {
    			Class.forName(driver);
    			System.out.println("JDBC 연결 성공");
    		} catch (Exception e) {
    
    		}
    
    	}
    
    	public List<EmpDTO> getAll() {
    		Connection conn = null;
    		PreparedStatement pstmt = null;
    		ResultSet rs = null;
    		String sql = "select * from emp";
    		
    		List<EmpDTO> empList = null;
    		try {
    			conn = DriverManager.getConnection(url, user, password);
    			pstmt = conn.prepareStatement(sql);
    			rs = pstmt.executeQuery();
    			empList = new ArrayList<>();
    			
    			while(rs.next()) {
    				EmpDTO emp = new EmpDTO();
    				emp.setEmpno(rs.getInt("empno"));
    				emp.setEname(rs.getString("ename"));
    				emp.setJob(rs.getString("job"));
    				emp.setMgr(rs.getInt("mgr"));
    				emp.setHiredate(rs.getDate("hiredate"));
    				emp.setSal(rs.getInt("sal"));
    				emp.setComm(rs.getInt("comm"));
    				emp.setDeptno(rs.getInt("deptno"));
    				empList.add(emp);	
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return empList;
    	}
    	
    }
    • EmpMain.java
    package google_docs_emp;
    
    import java.util.List;
    
    import google_docs_emp.DAO.EmpDAO;
    import google_docs_emp.DTO.EmpDTO;
    
    public class EmpMain {
    	public static void main(String[] args) {
    		
    		EmpDAO dao = new EmpDAO();
    		
    		List<EmpDTO> empList = dao.getAll();
    		
    		for(EmpDTO emp : empList)
    			System.out.println(emp);
    		
    	}
    }

2. 아래의 객체에 대하여 설명하시오.

  • Connection connection : java와 db를 연결하는 객체, DriverManager class를 통해 connection을 받아오며, 통신 관리와 sql 실행 기능을 제공
  • PreparedStatement pstmt : Sql쿼리 실행을 하기 위해 미리 컴파일된 객체. SQL 문의 매개 변수를 쉽게 설정 가능, 여러 번 실행 시 성능 향상. 인젝션 방지 기능도 제공.
  • ResultSet rs : DB에서 검색된 결과 집합. Statement 또는 PreparedStatement 객체에서 실행된 Select 문의 결과를 저장하고 데이터를 읽을 수 있는 메서드를 제공. 특정 행을 (순서대로)가리키는 cursor 역할을 한다.

3. 아래의 개념에 대하여 설명하시오.

  • DTO : Data Transfer Object. db와 통신할 때 데이터를 받아올 객체. 테이블에 해당하는 변수들이 field에 존재
  • DAO : Database Access Object. db와 통신용으로 만드는 객체. 보통 connection, db에서 data를 가져오는 작업을 여기서 수행한다.

4. 아래에 대하여 설명하시오.

  • DML : Data Manipulation Language. 데이터의 CRUD 작업을 수행합니다. SELECT, INSERT, UPDATE, DELETE 등의 SQL 문을 사용하여 데이터를 조작
  • DCL : Data Control Language. 데이터베이스 사용자의 권한 관리와 데이터의 무결성을 제어하는 작업을 수행. 주로 GRANT, REVOKE 등의 SQL 문을 사용하여 사용자의 권한을 부여하거나 제거
  • DDL : Data Definition Language. 데이터베이스의 구조를 정의하거나 변경하는 작업을 수행합니다. 주로 CREATE, ALTER, DROP 등의 SQL 문을 사용하여 테이블, 인덱스, 제약조건 등을 생성하거나 수정하고, 데이터베이스 객체를 삭제

5. 아래의 쿼리에서 WHERE 1=0 의 의미는?

CREATE TABLE DEPT03 AS SELECT * FROM DEPT WHERE 1=0;
  • 설명
SELECT * FROM DEPT WHERE 1=0;

여기서 dept의 모든 column을 가져오는데 where 1=0 조건을 보면 false이므로
column명을 만들어 놓고 아무 값도 가져오지 않는다. 그러므로 table의 column의 타입과 크기만 가져온다.

  • 실행 결과
deptnodnameloc

6. 다중행 쿼리에서 아래를 설명하시오.

  • any : any는 set에서 합집합(union)의 개념
  • all : all은 set에서 교집합(intersection) 개념

7. 아래 쿼리를 완성하시오.

  1. 연봉을 3000이상 받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 정보를 출력하는 쿼리문

    • 쿼리문
    select * from emp where deptno = any(select deptno from emp where sal >=3000);
    select * from emp where deptno in(select deptno from emp where sal >=3000);
    • 실행 결과
    EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
    17934MILLERCLERK778282/01/231300(null)10
    27839KINGPRESIDENT(null)81/11/175000(null)10
    37782CLARKMANAGER783981/06/092450(null)10
    47902FORDANALYST756681/12/033000(null)20
    57566JONESMANAGER783981/04/022975(null)20
    67369SMITHCLERK790280/12/17800(null)20
  2. 부서 번호가 30번인 사원들의 급여 중 가장 낮은 값(800)보다 높은 급여를 받는 사원의 이름, 급여를 출력하는 쿼리문

    • 쿼리문
    select ename, sal, deptno from emp where sal > any( select sal from emp) and deptno = 30;
    select ename, sal, deptno from emp where sal > (select min(sal) from emp) and deptno = 30;
    • 실행 결과
    ENAMESALDEPTNO
    1ALLEN160030
    2WARD125030
    3MARTIN125030
    4BLAKE285030
    5TURNER150030
    6JAMES95030
  3. 30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름과 급여를 출력하는 쿼리문

    • 쿼리문
    select ename, sal, deptno from emp where sal > (select max(sal) from emp where deptno = 30);
    select ename, sal, deptno from emp where sal > all (select sal  from emp where deptno = 30);
    • 실행 결과
    EMPNOSALDEPTNO
    1JONES297520
    2FORD300020
    3KING500010

8. DELETE, TRUNCATE, DROP 명령어의 차이점은?

  • delete는 데이터를 지우는 것, truncate는 row를 전체 삭제하는 것, drop은 table 자체를 없애는 것.

9.데이터 딕셔너리 란?

  • DB에 저장된 데이터에 대한 메타데이터를 관리하는 시스템. 데이터베이스 구조, 테이블, 열, 제약 조건 등의 정보를 제공. 이를 통해 데이터의 정의, 관계, 유형 등을 문서화하고, 데이터의 일관성과 정확성을 유지하며, 데이터 모델링 및 개발 프로세스에서 유용한 정보를 제공

0개의 댓글