오라클(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관련 한번 보기
오늘의 문제
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;
}
}
↓출력화면
'코딩 > 수업 정리' 카테고리의 다른 글
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 |
댓글