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

21.01.07 Thu [032]

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

오라클(oracle)

 

데이터베이스란?

검색, 보안, 저장 등등 (데이터는 하드에 저장) 

데이터를 잘관리할수있는 소프트웨어가 생겼는데 그게 오라클이다.

(어쩔수없이 생길수밖에 없었던것..)

 

학번, 이름, 전공 등 테이블 만든거를 RDBMS라고 한다.

relation (2차원표로 나타내는것.)

교수테이블 key와 보유기술테이블 key가 관계를 맺을 수 있다. - relation

 

 

 

***SQL에서는 대소문자 안가리지만 ' ' 에 들어가는것은 대소문자 가린다***

scott클릭 - scott-테이블 클릭해보면 테이블로 만들어진 걸 볼 수있다.

<기본 정보 출력>

desc dept; : dept에 대한 data type이 나온다. (description dep)

desc emp; : emp에 있는 

select * from dept; : dept에 있는 모든것을 select해라 라는 뜻이다.(dept에 있는 정보들이 테이블로 나온다.)

select dname from dept; : dept에 있는 dname를 가져와라

select deptno,dname from dept; : dept에 있는 deptno와 dname에 있는 것을 가져와라

 

<where + 조건절>

* > , < , <> , = , != , not , between and, in, '%', '_ %'

select empno,ename from emp where sal > 3000; 조건절 - salary가 3000초과만 가져와라

select ENAME, SAL, SAL+100 FROM EMP; : salary에 +100한걸 옆에 출력해줌.

select ENAME FROM EMP where deptno=20; : 부서번호가 20인 사람만 출력

select ENAME FROM EMP where deptno<>20; : 부서번호가 20번이 아닌 사람만 출력(이걸 많이 씀)

select ENAME FROM EMP where deptno != 20; : 부서번호가 20번이 아닌 사람만 출력

select ENAME FROM EMP where deptno not 20; : 부서번호가 20번이 아닌 사람만 출력

select EMPNO, ENAME, SAL FROM EMP where ENAME='FORD'; : 이름이 FORD인 사람의 사번, 이름, 급여를 출력하는 쿼리문(문자열은 ' '로 검색한다. 대소문자 구별하기)

select ENAME FROM EMP where HIREDATE > '82/01/01'; : 입사일이 82년 1월 1일 이후인 사원이름 출력. '1982/01/01'로 해도된다.

select ENAME FROM EMP where JOB='MANAGER' AND DEPTNO=10; : job이 MANAGER고 사번이 10인 사람 출력

select ENAME FROM EMP where JOB='MANAGER' OR DEPTNO=10; : job이 MANAGER이거나 사번이 10인 사람 출력

select ename from EMP where sal between 2000 and 3000; : 급여가 2000과 3000 사이인 사원 출력

select ename from EMP where sal not between 2000 and 3000; : 급여가 2000미만, 3000초과인 사원 출력

select ename from EMP where HIREDATE between '1982/01/01' and '1982/12/31'; : 1982년 입사인 사원 출력

select ename from EMP where comm = 300 or comm=500 or comm=1400; : 커미션이 300또는 500또는 1400인 사원출력(이렇게해도 되지만 in() 쓰는 문법 있음)

select ename from EMP where comm IN (300, 500, 1400); : 커미션이 300또는 500또는 1400인 사원출력

select ename from EMP where comm NOT IN (300, 500, 1400); : 커미션이 300또는 500또는 1400이 아닌 사원출력

select * from EMP where ename like 'F%';  :  사원이름이 F로 시작하는 사원 출력

select * from EMP where ename like '%A%'; : 사원이름이 순서상관없이 A가 들어가는 사원 출력

select * from EMP where ename like '%N'; : 사원이름이 N으로 끝나는 사원 출력 

select * from EMP where ename like '_A%'; : 사원이름 중 A가 두번째에 들어가는 사원 출력

select * from EMP where ename like '__A%'; :사원이름 중 A가 세번째에 들어가는 사원 출력

select * from EMP where ename not like '%A%'; : 사원이름 중 A를 포함하지 않는 사원 출력

 

<NULL>

select ename, job, comm from emp where comm=NULL; → 출력안됨 why? 

null은 저장하지 않는 값이다. 그냥 빈칸.

int a = null;은 안되지만 Integer inte = null;은 된다.

comm=NULL; 이 출력이 안되는 이유는 NULL은 알수없는 값인데 연산붙이는거 자체가 논리적으로 안됨.

NULL값을 뽑아내고 싶으면?   where comm is null;

NULL값 아닌 걸 뽑아내고 싶으면?  where comm is not null;

 

<정렬 order by>

ASC : 오름차순, DESC : 내림차순

select * from emp order by sal ASC;

select * from emp order by HIREDATE DESC; : 가장 최근에 입사한 사원부터 출력

 

<중복제거 distinct>

★select DISTINCT deptno from emp; : 사원들이 소속되어 있는 부서의 번호를 출력하는 쿼리문(중복제거)

 

<별칭 바꾸기 as"이름" , as 이름, "이름" >

select ename as "이름" from emp; : ename이 이름으로 바뀐다.

select ename as 이름 from emp;

select ename 이름 from emp;  : as가없어도 바뀜

 

select ename, sal*12 + nvl(comm, 0) from emp; : nvl = null value(comm이 null이면 무조건 0으로 처리해라.)

select ename, sal*12 + nvl(comm, 0) "연봉" from emp; : 별칭바꾸기랑 혼합

 

<연결점 함수  || 문자열 , || 문자열 ||>

SELECT ENAME || ' is a ' || JOB "연결점의 예" from emp;  : SMITH is a CLERK 으로 출력. ||이 연결점이 되어 병합돼서 출력됨. 연결하고 싶은건 문자열만 가능. (수식불가능)

 

<오라클이 제공해주는 함수>

*테이블 dual

select 24*60 from dual; : 산술연산을 위한 테이블

desc dual; : daul이름은 dummy테이블이다.

select sysdate from dual; : 오늘 날짜 출력

 

*절댓값 abs

select -10, abs(-10) from dual; // -10 | 10 출력

 

*소숫점 버리는 함수 floor

select 34.5432, floor(34.5432) from dual; // 3.5432 | 34 출력

 

*반올림시키는 함수 round

select 34.5432, round(34.5432) from dual; // 34.5432 | 35 출력

select 34.5432, round(34.5432 ,2) from dual //34.5432 | 34.54 출력 : 반올림해서 둘째자리까지 출력

select 34.5432, round(34.5432 ,-1) from dual; // 34.5432 | 30 출력 : 반올림해서 소숫점 -1값까지 출력

 

*버림연산 함수 TRUNC

select trunc(34.5432), trunc(34.5432 ,2),trunc(34.5432,-1), trunc(34.5432,0) from dual //34 | 34.54 | 30 | 34 출력

:0은 그냥 버림, -1은 0값으로 바꾸고 버림.

 

*나머지 연산 함수 MOD

select mod(27,2), mod(27,5), mod(27,7) from dual; // 출력값 1 | 2 | 6

: 27에서 뒤에 숫자 나눈 나머지 출력

 

 

 

 

 

JSP

jsp_lecture_17

 

 

오전수업때 함

 

 

 

jsp_lecture_18

JDBC = 자바 데이터베이스 커넥션

라이브러리 갖고와야함. 

 

 

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

↑ [WebContent]-[WEB-INF]-[lib]에 넣어야함

앞에 3줄은 외우고 
밑에는 무조건 복붙하기
<%!
Connection connection;
Statement statement;
ResultSet resultSet;

String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "scott";
String upw = "tiger";
String query = "select * from emp";

%>
//수업예제
[memberData.jsp] - WebContent에 생성
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
	<%!
		Connection connection;
		Statement statement;
		ResultSet resultSet;
	
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String uid = "scott";
		String upw = "tiger";
		String query = "select * from member";
	%>
<!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>
	
<%
	try{
			
		Class.forName(driver);	//oracle.jdbc.driver.OracleDriver
		connection = DriverManager.getConnection(url, uid, upw);	//jdbc:oracle:thin:@localhost:1521:xe
		statement = connection.createStatement();
		resultSet = statement.executeQuery(query);	//select * from member
			
		while(resultSet.next()){
			String id = resultSet.getString("id");
			String pw = resultSet.getString("pw");
			String name = resultSet.getString("name");
			String phone = resultSet.getString("phone");
				
			out.println("아이디 : " + id + ", 비밀번호 : " + pw + ", 이름 : " + name + ", 전화번호 : " + phone + "<br />");
		}
			
	} catch(Exception e) {
	} finally {
	try{
		if(resultSet != null) resultSet.close();
			if(statement != null) statement.close();
			if(connection != null) connection.close();
		} catch(Exception e){}
	}
%>
	
</body>
</html>
//코드설명 - 밑에 코드 다시 작성
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%!Connection connection;
	Statement statement;
	ResultSet resultSet;

	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String uid = "scott";
	String upw = "tiger";
	String query = "select * from emp";%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	try {
		Class.forName(driver); //얘는 그냥 forName은 static. class이름이 Class임
					//driver은 위에 oracle. oracle이 메모리에 올라감
	
		connection = DriverManager.getConnection(url, uid, upw);
							//url, scott, tiger들어감. connection하는 이름
							
		statement = connection.createStatement();
							
		resultSet = statement.executeQuery(query);
						//execute쿼리. select * from emp 얘담아오는것.(emp 12개)
						
		while(resultSet.next()){
			String name = resultSet.getString("ename");
			
			out.println("이름:"+name+ "<br>");
			
		}
		
	} catch (Exception e) {

	} finally { //while문 다 마치고 나면 connection과 statement를 close 시키는것
			//close는 메모리해제. 이거 안하면 에러날 수 있어서 무조건 해야함.
		try{
				if(resultSet != null) resultSet.close();
				if(statement != null) statement.close();
				if(connection !=null) connection.close();
		}catch(Exception e){}			
	}
	%>



</body>
</html>

↑↓ 원리. sql developer 에 있는 scott의 emp를 가져온것이기 때문에 scott안에있는 것들을 넣어줘야 실행이 된다. 다른거 넣으면 실행 안됨.

 

<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%!Connection connection;
	Statement statement;
	ResultSet resultSet;

	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String uid = "scott";
	String upw = "tiger";
	String query = "select * from emp";%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	try {
		Class.forName(driver); 
		connection = DriverManager.getConnection(url, uid, upw);						
		statement = connection.createStatement();
			
		resultSet = statement.executeQuery(query);
		
		while(resultSet.next()){
			String empno = resultSet.getString("empno");
			String ename = resultSet.getString("ename");
			String job = resultSet.getString("job");
			String mgr = resultSet.getString("mgr");
			String hiredate = resultSet.getString("hiredate");
			String sal = resultSet.getString("sal");
			String comm = resultSet.getString("comm");
			String deptno = resultSet.getString("deptno");
			
			out.println("<table border=\"1\">");
			out.println("<tr><td>");
			out.println("EMPNO:"+empno+ "<br/>");
			out.println("ENAME:"+ename+ "<br/>");
			out.println("JOB:"+job+ "<br/>");
			out.println("HIREDATE"+hiredate+ "<br/>");
			out.println("COMM"+comm+ "<br/>");
			out.println("DEPTNO"+deptno+"<br/>");
			
			 out.println("</td></tr></table>");
		}
		
	} catch (Exception e) {

	} finally {
		try{
				if(resultSet != null) resultSet.close();
				if(statement != null) statement.close();
				if(connection !=null) connection.close();
		}catch(Exception e){}			
	}
	%>
</body>
</html>

usebean관련 한번 보기

hyeonstorage.tistory.com/96

 

오늘의 문제

 

1.아래를 SQL문으로 표기 하시오.
-- 부서 번호(DEPTNO)가 20인 사원에 관한 정보만 출력

select ename from emp where deptno = 20;

 

--이름(ENAME)이 FORD인 사람의 사번(empno), 이름(ename), 급여(SAL)를 출력하는 쿼리문

select empno, ename, sal from emp where ename='FORD';

 

--1982년 1월 1일 이후에 입사한 사원을 출력하는 쿼리문

select ename from emp where hiredate>'82/01/02';

 

--job 이 manage 이고 10번 부서인 사원

select ename from emp where job='MANAGE' and deptno=10;


--job 이 manage 이거나 10번 부서인 사원

select ename from emp where job='MANAGE' or deptno=10;


--10번 부서가 아닌 사원

select ename from emp where deptno!=10;


--급여가 2000~3000 사이의 사원을 검색하는 쿼리문

select ename from emp where sal between 2000 and 3000;


--급여가 2000 미만이거나 3000 초과인 사원을 검색하는 쿼리문

select ename from emp where sal not between 2000 and 3000;


--1987년에 입사한 사원을 출력하는 쿼리문

select ename from emp where hiredate between '1987/01/01' and '1987/12/31';


--커미션(COMM)이 300 혹은 500 혹은 1400인 사원이 있는지 검색하는 쿼리문

select ename from emp where comm in(300, 500, 1400);


--커미션(COMM)이 300 혹은 500 혹은 1400이 아닌 사원이 있는지 검색하는 쿼리문

select ename from emp where comm not in(300, 500, 1400);


--이 F로 시작하는 사람을 찾는 쿼리문

select ename from emp where ename like 'F%';


--위치 상관 없이 이름 중에 A가 들어있는 사람을 찾는 쿼리문

select ename from emp where ename like '%A%';

 

--이름이 N으로 끝나는 사람을 찾는 쿼리문

select ename from emp where ename like '%N';


--이름의 두 번째 글자가 A인 사원을 찾는 쿼리문

select ename from emp where ename like '_A';


--이름의 세 번째 글자가 A인 사원을 찾는 쿼리문

select ename from emp where ename like '__A';

 

--이름에 A를 포함하지 않는 사람만 검색하는 쿼리문

select ename from emp where ename not like '%A%';


--사원들의 급여를 오름차순으로 정렬하는 쿼리문

select sal from emp order by sal asc;

 

--가장 최근에 입사한 사원부터 출력하는 쿼리문

selec enum from emp order by hiredate desc;

 

--사원들이 소속되어 있는 부서의 번호를 출력하는 쿼리문

select distinct deptno from emp;

 

--아래와 같이 출력하시오.
SMITH is a CLERK
ALLEN is a SALESMAN
WARD is a SALESMAN
JONES is a MANAGER
MARTIN is a SALESMAN
BLAKE is a MANAGER
CLARK is a MANAGER
KING is a PRESIDENT
TURNER is a SALESMAN
JAMES is a CLERK
FORD is a ANALYST
MILLER is a CLERK

 

select ename ||' is a '|| job from emp;

 

 

1. 가위바위보게임을 useBean을 활용하여 (객체로 만들어서) 짜시오

roqhdehd502.github.io/2021-01-07-116/이분코드가 잘짜여져있음

[realMain.html]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>가위바위보 게임</h2>
	<a><img src="가위바위보.PNG"></a>
	<form action="Game.jsp" method="post">
		<select name="game" onchange="drawImage()">
			<option value="1">가위</option>
			<option value="2">바위</option>
			<option value="3">보</option>
		</select> <input type="submit" value="제출">
	</form>
</body>
</html>

원래 jsp에 usebean쓰는건 안좋음. 나중에 게시판짤때 코드 위치선정 배움

[Game.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="use" class="jsp_0103.getsetGame" scope="page" />


	<%
	int game = Integer.parseInt(request.getParameter("game"));
	use.setGame(game);
	%>

	<h2>당신이 낸 것</h2>
	<%
		if (game == 1) {
		out.println("<img src=\"가위.PNG\">");
	} else if (game == 2) {
		out.println("<img src=\"바위.PNG\">");
	} else if (game == 3) {
		out.println("<img src=\"보.PNG\">");
	}
	%>
	<h2>컴퓨터가 낸 것</h2>

	<%
		if (use.getCom() == 1) {
		out.println("<img src=\"가위.PNG\">");
	} else if (use.getCom() == 2) {
		out.println("<img src=\"바위.PNG\">");
	} else if (use.getCom() == 3) {
		out.println("<img src=\"보.PNG\">");
	}
	out.println(use.getResult());
	%>

	<a href="realMain.html">다시하기</a>
</body>
</html>

 

[getsetGame.java]
package jsp_0103;

public class getsetGame {
	private int game;
	private int com = (int) (Math.random() * 3) + 1;

	public int getGame() {
		return game;
	}

	public void setGame(int game) {
		this.game = game;
	}

	public int getCom() {
		return com;
	}

	public void setCom(int com) {
		this.com = com;
	}

	public String getResult() {
		if (com == 1 && game == 1) {
			return "비김";
		} else if (com == 1 && game == 2) {
			return "이김";
		} else if (com == 1 && game == 3) {
			return "컴퓨터승리";
		}

		if (com == 2 && game == 2) {
			return "비김";
		} else if (com == 2 && game == 1) {
			return "컴퓨터승리";
		} else if (com == 2 && game == 3) {
			return "이김";
		}

		if (com == 3 && game == 3) {
			return "비김";
		} else if (com == 3 && game == 1) {
			return "이김";
		} else {
			return "컴퓨터승리";

		}
	}
}

 

2. 아래의 프로그램을 Employee 객체를 생성하여 아래를 만드시오.

[empList.jsp]
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%!Connection connection;
	Statement statement;
	ResultSet resultSet;

	String driver = "oracle.jdbc.driver.OracleDriver";
	String url = "jdbc:oracle:thin:@localhost:1521:xe";
	String uid = "scott";
	String upw = "tiger";
	String query = "select * from emp";%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		try {
			Class.forName(driver); //얘는 그냥 forName은 static. class이름이 Class임
			//driver은 위에 oracle. oracle이 메모리에 올라감

			connection = DriverManager.getConnection(url, uid, upw);
			//url, scott, tiger들어감. connection하는 이름

			statement = connection.createStatement();

			resultSet = statement.executeQuery(query);
			//execute쿼리. select * from emp 얘담아오는것.(emp 12개)

			out.println("<table border=\"1\">");

			out.println("<td>EMPNO</td>");
			out.println("<td>ENAME</td>");
			out.println("<td>JOB</td>");
			out.println("<td>MRG</td>");
			out.println("<td>HIREDATE</td>");
			out.println("<td>SAL</td>");
			out.println("<td>COMM</td>");
			out.println("<td>DEPTNO</td>");
			while (resultSet.next()) {
		{
			String setEmpno = resultSet.getString("empno");
			String setEname = resultSet.getString("ename");
			String setJob = resultSet.getString("job");
			String setMgr = resultSet.getString("mgr");
			String setHiredate = resultSet.getString("hiredate");
			String setSal = resultSet.getString("sal");
			String setComm = resultSet.getString("comm");
			String setDeptno = resultSet.getString("deptno");

			out.println("<tr>");
			out.println("<td>" + setEmpno + "</td>");
			out.println("<td>" + setEname + "</td>");
			out.println("<td>" + setJob + "</td>");
			out.println("<td>");
			if (setMgr == null) {
		out.println("");
			} else {
		out.println(setMgr + "</td>");
			}
			out.println("<td>" + setHiredate + "</td>");
			out.println("<td>" + setSal + "</td>");
			out.println("<td>");
			if (setComm == null) {
		out.println("");
			} else {
		out.println(setComm + "</td>");
			}
			out.println("<td>" + setDeptno + "</td>");
			out.println("</tr>");
		}

	}
	out.println("</table>");

	} catch (Exception e) {

	} finally {
	try {
		if (resultSet != null)
			resultSet.close();
		if (statement != null)
			statement.close();
		if (connection != null)
			connection.close();
	} catch (Exception e) {
	}
	}
	%>
</body>
</html>
[employee.java]
package jsp_jdbc;

public class employee {

	String empno;
	String ename;
	String job;
	String mgr;
	String hiredate;
	String sal;
	String comm;
	String deptno;
	
	public String getEmpno() {
		return empno;
	}
	public void setEmpno(String 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 String getMgr() {
		return mgr;
	}
	public void setMgr(String mgr) {
		this.mgr = mgr;
	}
	public String getHiredate() {
		return hiredate;
	}
	public void setHiredate(String hiredate) {
		this.hiredate = hiredate;
	}
	public String getSal() {
		return sal;
	}
	public void setSal(String sal) {
		this.sal = sal;
	}
	public String getComm() {
		return comm;
	}
	public void setComm(String comm) {
		this.comm = comm;
	}
	public String getDeptno() {
		return deptno;
	}
	public void setDeptno(String deptno) {
		this.deptno = deptno;
	}
}

↓출력화면

728x90

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

21.01.11 Mon [034]  (0) 2021.01.11
21.01.08 Fri [033]  (0) 2021.01.08
21.01.06 Wed [031]  (0) 2021.01.06
21.01.05 Tue [030]  (0) 2021.01.05
21.01.04 Mon [029]  (0) 2021.01.04

댓글