D+22::게시판만들기/데이터베이스(1) SELECT문

Am.Vinch·2022년 7월 26일
0

20220726_tue
실습예제 ppt)




프로젝트명: listBoard_

프로젝트 만들 때 주의할점
next두 번 누른 후 체크하기!!!

jsp 파일 5개 만들기
1. 위에 프로젝트 만들 때 자동 완성.
아래 welcome file들 중 하나를 만들어 주면 자동으로 가장 먼저 파일 실행된다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 <display-name>ListBoard_</display-name>
 <welcome-file-list>
   <welcome-file>index.html</welcome-file>
   <welcome-file>index.jsp</welcome-file>
   <welcome-file>index.htm</welcome-file>
   <welcome-file>default.html</welcome-file>
   <welcome-file>default.jsp</welcome-file>
   <welcome-file>default.htm</welcome-file>
 </welcome-file-list>
</web-app>


---

<%@ 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:forward page="boardList.bo"></jsp:forward><!-- 띄어쓰기 하지 말고 바로 해야 오류 x  -->
</body>
</html>



2.

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %> 	    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
table{
	border: 1px solid black;
	border-collapse: collapse;
	width: 800px;
	margin: 0 auto; 
	font-size: 24px;
	margin-top: 50px;
	text-align: center;
}

tr,td{
	border: 1px solid black;
	padding:  3px;/* 안쪽 여백 */

}
.titleTd{
	text-align: left;
}
thead{
	background-color: #F0EBE3;
	font-weight: bold;/* 글자 굵기 */
	color: #576F72;
}
input{
	font-size: 24px;
	padding: 4px  8px;/*  상하좌우 여백 */
}
</style>
</head>
<body>
<form action="board_list.bo" method="post">
	<table>
	<colgroup>
		<col width= "10%"><!-- 설정한 width의  10% 만틈 너비조정 -->
		<col width= "*"><!-- 설정한 width의 나머지 % 만틈 자동으로 채워짐 -->
		<col width= "15%">
		<col width= "20%">
	</colgroup>
		<thead>
			<tr>
				<td>글번호</td>
				<td>제목</td>
				<td>작성자</td>
				<td>작성일</td>
			</tr>
		</thead>
		<tbody>
			<!-- <tr>부터 갯수만큼 데이터 돌려야함 -> for문 사용해야함(자바파일4개  가져오기 & 위에 taglib 넣어주기)  -->
			<c:forEach var="board" items="${boardList}"><!-- items 에는 반복돌릴 애를 넣는다. var 에는 반복할 애에서 하나씩 뺄 데이터 -->
				<tr>
					<td></td>
					<td class = "titleTd"><a href = "boardDetail.bo?title=${board.title }">${board.title }</a></td><!-- 제목 클릭하면 상세페이지로 이동하기 -->
<!-- "boardDetail.bo?title=${board.title }"  :boardDetail.bo 서블릿 안에서 내가 클릭한 게시글 제목의 데이터값과 같은가?  -->
					<td>${board.writer }</td>
					<td>${board.createDate}</td>
				</tr>
			</c:forEach>
		</tbody>
	</table>
<!-- <a href = "boardDetail.bo">글제목입니다.</a><br> -->
<div align="center" style="margin-top: 20px;">
	<input type = "button" value = "글쓰기" onclick ="location.href='regBoardForm.bo';">
</div>
<!-- 글을 등록하러 갈 양식페이지로 이동(작성하러가겠다.) -->
<!-- <input type = "button" value = "글쓰기" onclick ="location.href='regBoard.bo';">글을 등록하러 갈 페이지로 이동(등록하기버튼누르는)
--><!-- onclick ="location.href='';  클릭해서 넘어가기 암기하기!!!-->
</form>
</body>
</html>


3.
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<% 
	request. setCharacterEncoding("UTF-8");
	response.setContentType("text.html;charset=UTF-8");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
table{
	border: 1px solid black;
	border-collapse: collapse;
	width: 800px;
	margin: 0 auto; 
	font-size: 24px;
	margin-top: 50px;
	text-align: center;
}

tr,td{
	border: 1px solid black;
	padding:  6px;/* 안쪽 여백 */

}
/*  tr태그의 첫번째 자식에게만 컬러를 준다.*/
tr>td:first-child {
	background-color: #EAE509;
	font-weight: bold;
	color: #B93160;
}
/*  input 태그 중에서 type 이 text인 경우만 설정할 때*/
input[type = "text" ],input[type ="date"]}{
	width: 98%
	height: 26px;
	border-radius: 6px;
	border: 2px solid black;
}
textarea{
	resize: none;
}
</style>
</head>
<body>
<form action="regBoard.bo" method="post">
	<table>
		<tr>
			<td>제 목</td>
			<td><input type="text" name="title"></td>
		</tr>
		<tr>
			<td>작성자</td>
			<td><input type="text" name="writer"></td>
		</tr>
		<tr>
			<td>작성일</td>
			<td><input type="date" name="createDate"></td>
		</tr>
		<tr>
			<td>내용</td>
			<td><textarea rows = "7" cols="70" name ="content"></textarea></td>
		</tr>
	
	</table>
		<div align="center" style="margin-top: 20px; font-size: 24px;">
			<input type ="submit" value= "글등록"><!--글 등록하러 가겠다.  -->
			<!--  submit으로 바꾸면 데이터를 가져가는 형태로 변환(onclick은 데이터 가져가지 않음.) 
			하지만 그렇게 되면 action에 있는 regBoard.bo 로 이동하면서 중복으로 onclick으로도 이동함.
			문제가 발생하므로 둘 중 하나 삭제(이중x) -->
		</div>
</form>
</body>
</html>


4.
<%@ 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>
<style type="text/css">
table{
	border: 1px solid black;
	width: 800px;
	border-collapse: collapse;
	background-color: #FFF89C;
	
}
.container{
	width: 800px;
	text-align: center;
	margin-top: 20px;
	font-color: #576F72;
}

input[type ="button"]{
	background-color: #F0EBE3;
	font-size: 15px;
	text-align: center;
	border: 1px solid black;
	width: 80px;
	border-radius: 20px;
	margin: 0 auto;
	align-content: center;
	
}

tr,td {
	border-radius: 30px;
	border: 1px solid black;
}


</style>
</head>
<body>
<form action="boardDetail.bo" method ="post">
<table>
	<tr>
		<td>글번호</td><!-- 글번호 못빼게 만들어서 빼는 건 생략 -->
		<td>1</td>
		<td>작성자</td>
		<td>${board.writer}</td>
		<td>작성일</td>
		<td>${board.createDate }</td>
	</tr>
	<tr>
		<td>제목</td>
		<td colspan="5" >${board.title }</td>
	</tr>
	<tr>
		<td>내용</td>
		<td colspan="5"> ${board.content }</td>
	</tr>
</table>
</form>
<!-- 뒤로가기 2가지 방법 -->
<!-- ①번 -->
<div class="container">
	<input type="button" value="뒤로가기1" onclick="history.back();">
	<!-- ②번 방법 -->
	<input type="button" value="뒤로가기2" onclick="location.href='boardList.bo';"><!-- 뒤로가기 시 게시글 목록페이지로 가기때문 -->
	
	<input type="button" value="수정" onclick="location.href='updateBoardForm.bo?title=${board.title}';"><!-- 글을 수정하러 갈 수 있는 페이지로 이동. -->
	<input type="button" value="삭제" onclick="location.href='deleteBoard.bo?title=${board.title}';"><!-- 페이지 이동위해서는 서블릿을 거쳐가야한다. 이 후는 페이지이동 시 데이터를 가져가는가 확인하기 -->
</div>
</body>
</html>


5.
<%@ 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>
<form action="updateBoard.bo" method="post"><!--form 하면 반드시 submit 필요 (onclick삭제)  -->
	제목 :<input name="title" value=${board.title } readonly><br>
	작성자 :<input name="writer" type="text" value=${board.writer }><br>
	작성일 :<input name="createDate"  type="date" value=${board.createDate }><br>
	내용 :<textarea rows="3" cols="50" name="content">${board.content }</textarea><br>
	<input type = "submit" value = "글수정"  >
</form>
</body>
</html>


---
클래스 1개 
package dto;

public class BoardDTO {
	//ⓐ 변수 선언
	private String title;
	private String writer;
	private String createDate;
	private String content;
	
	
	//ⓑ 생성자 2개 만들기
	public BoardDTO() {};
	
	public BoardDTO(String title, String writer, String createDate, String content) {
		super();
		this.title = title;
		this.writer = writer;
		this.createDate = createDate;
		this.content = content;
	}
	
	//ⓒ 겟터 셋터 만들기 
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getCreateDate() {
		return createDate;
	}
	public void setCreateDate(String createDate) {
		this.createDate = createDate;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
	
	
}







---

서블릿 컨트롤러 1개
package controller;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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 dto.BoardDTO;

@WebServlet("*.bo")// (~~.bo)로 끝나는 모든 command를 실행시켜준다.
public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private static final boolean String = false;
	
	//하나하나의 게시글(BoardDTO)을 여러개 담을 통(게시글 목록)을 만든다.(list사용하기)
	private List<BoardDTO> list = new ArrayList<>();//통만 만든 것임! 데이터 값 x
	//글등록할때마다 게시글 데이터 넣어주면 된다.
	
	
	
   public BoardController() {
       super();
   }
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	
	}

	@SuppressWarnings("unused")
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
				request. setCharacterEncoding("UTF-8");
				response.setContentType("text.html;charset=UTF-8");
				
				String requestURI = request.getRequestURI();
				String contextPath = request.getContextPath();
				String command = requestURI.substring(contextPath.length());
				
				System.out.println("command = " + command);
				
				String page = "";//page 변수 선언
				boolean isRedirect = false; 
					//if문 괄호가 true여야 실행된다.
					// 기본적으로 데이터넘겨받는걸 기본옵션으로 하고싶기때문에 
					
				
				//게시글 목록 페이지로 이동
				if(command.equals("/boardList.bo")) {//command 값이 괄호안 문자와 같은가?
					//게시글 전체 데이터를 jsp에 던져야 함.
					request.setAttribute("boardList", list); 
					 //게시글 데이터 list를 boardList라는 이름으로 던짐.
					page = "board_list.jsp";
				}
				//글쓰기 버튼 누르면 이동하는 글쓰기 양식페이지로 이동
				else if(command.equals("/regBoardForm.bo")) {//command 값이 괄호안 문자와 같은가?
					page = "reg_board_form.jsp";
				}
				//실제로 글 등록하러 가는 페이지 이동
				else if(command.equals("/regBoard.bo")) {//command 값이 괄호안 문자와 같은가?
					
					String title  = request.getParameter("title");
					String writer = request.getParameter("writer");
					String createDate = request.getParameter("createDate");
					String content = request.getParameter("content");
					
					//위에 있는 데이터값들을 담아둘 보따리 하나 만들어야해서 객체생성
					//클래스 따로 만들어야함!!
					BoardDTO board = new BoardDTO(title, writer, createDate, content);//(자동완성 사용하기-순서중요) 
					//위에 게시글 리스트 만들어줌
					
					list.add(board);//리스트 배열에 게시글 하나하나 데이터값을 넣어준다. 등록할 때마다
					
					/*
					 * request.setAttribute("boardList", list);//등록된 게시글 하나하나 데이터도 가져가라. page =
					 * "board_list.jsp";//이건 수정이 필요함! //문제발생: 항상 list페이지를 입력해야하는 것 반복되는 것은 비효율적이다!
					 * 해결방법이 필요하다.
					 */					
					
					//해결방법?
					//-> 위에 두 줄 합쳐서 표현하면 된다.
					page = "boardList.bo";//게시글 목록페이지 이동 if문으로 다시 이동
					isRedirect = true;
				
				}
				
				//글 상세 페이지로 이동한다.
				else if(command.equals("/boardDetail.bo")) {//command 값이 괄호안 문자와 같은가?
					//내가 클릭한 제목과 일치하는 제목을 가진 게시글을 list에서 찾는다.(for문이용)
					//제목이 같은 게시글을 찾으면 해당 게시글의 모든 정보 데이터를 jsp에 전달해야한다.
					
					String title = request.getParameter("title");
					//board_list 에서 넘어온 데이터를 받은 것!(61행_"boardDetail.bo?title=${board.title }")
					//클리한 제목과 같은 데이터정보를 갖고오기
//				[for문]
					for(int i = 0; i<list.size();i++) {
						if(list.get(i).getTitle().equals(title)){//list.get(i)(게시글 BoardDTO(자료형) 1개.)에서 title(문자열)은 title과 같은가?
							//배열에서 데이터뺄 때는 get 사용하며 정수가 들어간다!(순서)
							//우리가 필요한 정보: 내가 클릭한 제목과 일치한 게시글 하나 -> list.get(i)
							//게시글 하나를 상세보기 페이지에 던져줘야함
							request.setAttribute("board", list.get(i));//내가 찾은 게시글 하나를 board라는 이름으로 데이터 던짐.
							break;// 찾았으면 그만 찾아라
						}
					}
					page = "board_detail.jsp";
				}
					
//				[foreach문]
//					for (BoardDTO board : list) {
//						if(board.getTitle().equals(title)){
//						request.setAttribute("board", board);
//						break;
//					}
//					}
	
				
				
				//글 수정하는 페이지로 이동
				else if(command.equals("/updateBoardForm.bo")) {//command 값이 괄호안 문자와 같은가?
					String title = request.getParameter("title");
					
					for (BoardDTO board : list) {
						if(board.getTitle().equals(title)) {
							request.setAttribute("board", board);
							break;
						}
					}
					page = "update_board_form.jsp";
				}
				
				
				//실제로 글 수정 
				else if(command.equals("/updateBoard.bo")) {//command 값이 괄호안 문자와 같은가?
					String title= request.getParameter("title");
					String witer= request.getParameter("writer");
					String createDate= request.getParameter("createDate");
					String content= request.getParameter("content");
					
					for(int i = 0; i<list.size(); i++) {
						if(list.get(i).getTitle().equals(title)) {
							list.get(i).setWriter(witer);//내가 찾은 게시글의 내가 받아온 작성자로 받기.(값변경메소드 setter사용)
							list.get(i).setContent(content);
							list.get(i).setCreateDate(createDate);
						}
					}
					page = "boardList.bo";//게시글 수정하면 게시글 목록글로 간다.(이것 수정이 필요함!!!)
					//이유? 그냥 가면 데이터를 가져가지 않음.
				}
				
				
				//글 삭제를 진행한다.
				else if(command.equals("/deleteBoard.bo")) {//command 값이 괄호안 문자와 같은가?
					String title=request.getParameter("title");//내가 가져온 제목이랑 리스트 속 있는 타이틀이 일치하는지 찾기위해 데이터 가져오기
					for(int i =0; i<list.size(); i++) {
						if(list.get(i).getTitle().equals(title)) {
						list.remove(i);
						break;
						}
					}
					page = "boardList.bo";//게시글 삭제하면 게시글 목록글로 간다.(이것 수정이 필요함!!!)
				}
				
				//[페이지 이동할 때 방법들]
				//둘다 사용할 수 없음. 둘 중 하나만 실행되어야 함 그래서 if문 사용
				
				if(isRedirect) {//false 값 받음. if문 괄호가 true여야 실행된다.
					//데이터 안 가져갈 때 
					//데이터는 안가져가지만 다시 페이지로 가세요를 의미한다. 데이터가 새로 추가되거나 하지 않는다!
					response.sendRedirect(page);
					
				}
				
				else {
				//데이터 가져가야할 때
				//데이터를 가져가기 위한 코드(주소는 안바뀜)
				RequestDispatcher dispatcher = request.getRequestDispatcher(page);
				dispatcher.forward(request, response);
				}
					
				
	}
		
}
  • 데이터베이스(DagaBase)

  • 수많은 데이터를 관리하기 위한 프로그램
    단순히 많은 데이터를 저장하는 것 뿐만아니라
    그 데이터의 무결함을(데이터의 부정확성 x) 보존한다.(데이터 무결성)
    ex)오라클,mysql,mssql,mariaDB...
  • 구성요소: 튜플(행),속성(atribute),릴레이션(테이블)
    하나의 튜플(행)은 반드시 중복되어서는 안된다.

<참고>

설치 다운로드

파일명,비밀번호 입력 - <테스트> 클릭 후 상태:성공 표시 확인하기 -저장 -접속

도구 -환경설정 -UTF-8 선택 - 코드편집기 -글꼴 편집

코드편집기 - 행 여백 - 행번호 표시 체크하기

코드편집기 - 표시 - 표시되는 오른쪽 여백 표시 체크 해제

명령어 입력하기

ALTER SESSION SET"_ORACLE_SCRIPT"=true;

--계정 생성한 것 ID:MYDB PW:ORACLE 
CREATE USER MYDB IDENTIFIED BY ORACLE;
--MYDB계정에 권한을 부여
GRANT CONNECT, RESOURCE TO MYDB;

->명령어 입력 후 CTRL + ENTER 누르고 밑에 스크립트 확인 시 오류 확인 가능

성공확인 시 위에서 입력한 대로 'MYDB' 계정 하나 새로 만듦.
MYDB -테이블- 예제 데이터 가져오기 -오른쪽 위 MYDB 로 선택 - F5 실행

데이터베이스예제01)_

-- 부서 테이블 제거하기
DROP TABLE EMP;
-- 사원 테이블 제거하기
DROP TABLE DEPT;
-- 급여 테이블 제거하기
DROP TABLE SALGRADE;
-- 부서 테이블 제거하기
DROP TABLE EMPLOYEE;
-- 사원 테이블 제거하기
DROP TABLE DEPARTMENT;
-- 급여 테이블 제거하기
DROP TABLE SALGRADE;

-- 부서 테이블 생성하기
CREATE TABLE DEPT(
	 DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
	 DNAME VARCHAR2(14),
	 LOC   VARCHAR2(13) ) ;

-- 사원 테이블 생성하기
CREATE TABLE EMP( 
  	 EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
	 ENAME VARCHAR2(10),
 	 JOB   VARCHAR2(9),
	 MGR  NUMBER(4),
	 HIREDATE DATE,
	 SAL NUMBER(7,2),
	 COMM NUMBER(7,2),
	 DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

 -- 급여 테이블 생성하기
CREATE TABLE SALGRADE(
	 GRADE NUMBER,
	 LOSAL NUMBER,
	 HISAL NUMBER );

-- 사원 테이블에 샘플 데이터 추가하기
INSERT INTO DEPT VALUES(10, '경리부', '서울');
INSERT INTO DEPT VALUES(20, '인사부', '인천');
INSERT INTO DEPT VALUES(30, '영업부', '용인'); 
INSERT INTO DEPT VALUES(40, '전산부', '수원');

-- 부서 테이블에 샘플 데이터 추가하기
INSERT INTO EMP VALUES(1001, '김사랑', '사원', 1013, to_date('2007-03-01','yyyy-mm-dd'), 300, NULL, 20);
INSERT INTO EMP VALUES(1002, '한예슬', '대리', 1005, to_date('2007-04-02','yyyy-mm-dd'), 250,   80, 30);
INSERT INTO EMP VALUES(1003, '오지호', '과장', 1005, to_date('2005-02-10','yyyy-mm-dd'), 500,  100, 30);
INSERT INTO EMP VALUES(1004, '이병헌', '부장', 1008, to_date('2003-09-02','yyyy-mm-dd'), 600, NULL, 20);
INSERT INTO EMP VALUES(1005, '신동협', '과장', 1005, to_date('2005-04-07','yyyy-mm-dd'), 450,  200, 30);
INSERT INTO EMP VALUES(1006, '장동건', '부장', 1008, to_date('2003-10-09','yyyy-mm-dd'), 480, NULL, 30);
INSERT INTO EMP VALUES(1007, '이문세', '부장', 1008, to_date('2004-01-08','yyyy-mm-dd'), 520, NULL, 10);
INSERT INTO EMP VALUES(1008, '감우성', '차장', 1003, to_date('2004-03-08','yyyy-mm-dd'), 500,    0, 30);
INSERT INTO EMP VALUES(1009, '안성기', '사장', NULL, to_date('1996-10-04','yyyy-mm-dd'),1000, NULL, 20);
INSERT INTO EMP VALUES(1010, '이병헌', '과장', 1003, to_date('2005-04-07','yyyy-mm-dd'), 500, NULL, 10);
INSERT INTO EMP VALUES(1011, '조향기', '사원', 1007, to_date('2007-03-01','yyyy-mm-dd'), 280, NULL, 30);
INSERT INTO EMP VALUES(1012, '강혜정', '사원', 1006, to_date('2007-08-09','yyyy-mm-dd'), 300, NULL, 20);
INSERT INTO EMP VALUES(1013, '박중훈', '부장', 1003, to_date('2002-10-09','yyyy-mm-dd'), 560, NULL, 20);
INSERT INTO EMP VALUES(1014, '조인성', '사원', 1006, to_date('2007-11-09','yyyy-mm-dd'), 250, NULL, 10);

-- 급여 테이블에 샘플 데이터 추가하기
INSERT INTO SALGRADE VALUES (1, 700,1200);
INSERT INTO SALGRADE VALUES (2, 1201,1400);
INSERT INTO SALGRADE VALUES (3, 1401,2000);
INSERT INTO SALGRADE VALUES (4, 2001,3000);
INSERT INTO SALGRADE VALUES (5, 3001,9999);
COMMIT;

실행 후 마지막 줄 커밋 완료. 확인 후 새로고침

업로드중..

--데이터 조회
--SELECT 컬럼명 FROM 테이블명;
SELECT EMPNO FROM EMP;

//결과
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014

--사원의 사번,이름,급여를 조회
SELECT EMPNO,ENAME,SAL FROM EMP;

//결과
1001	김사랑	300
1002	한예슬	250
1003	오지호	500
1004	이병헌	600
1005	신동협	450
1006	장동건	480
1007	이문세	520
1008	감우성	500
1009	안성기	1000
1010	이병헌	500
1011	조향기	280
1012	강혜정	300
1013	박중훈	560
1014	조인성	250

--사원의 모든 정보를 조회
--JAVA처럼 *.do 와 같다.
SELECT * FROM EMP;
//결과
1001	김사랑	사원	1013	07/03/01	300		20
1002	한예슬	대리	1005	07/04/02	250	80	30
1003	오지호	과장	1005	05/02/10	500	100	30
1004	이병헌	부장	1008	03/09/02	600		20
1005	신동협	과장	1005	05/04/07	450	200	30
1006	장동건	부장	1008	03/10/09	480		30
1007	이문세	부장	1008	04/01/08	520		10
1008	감우성	차장	1003	04/03/08	500	0	30
1009	안성기	사장		96/10/04	1000		20
1010	이병헌	과장	1003	05/04/07	500		10
1011	조향기	사원	1007	07/03/01	280		30
1012	강혜정	사원	1006	07/08/09	300		20
1013	박중훈	부장	1003	02/10/09	560		20
1014	조인성	사원	1006	07/11/09	250		10

--연산 가능한 것은 연산결과를 조회 할 수도 있다. 
SELECT 5+5 FROM EMP;

//결과: 열의 갯수만큼 연산결과 출력된다.
10
10
10
10
10
10
10
10
10
10
10
10
10
10


--조건이 있는 조회문
--급여가 500이하인 사원의 사번,이름,급여,직급을 조회
SELECT EMPNO,ENAME,SAL,JOB 
FROM EMP 
WHERE SAL <= 500;
--명령어 순서 반드시 암기 SELECT-FROM-WHERE 순.
--(유의) 같다는 '=' 하나만 사용한다. / 같지않다는 '!=','<>'두개다

//결과
1001	김사랑	300	사원
1002	한예슬	250	대리
1003	오지호	500	과장
1005	신동협	450	과장
1006	장동건	480	부장
1008	감우성	500	차장
1010	이병헌	500	과장
1011	조향기	280	사원
1012	강혜정	300	사원
1014	조인성	250	사원

--사원명이 김사랑인 사원의 입사일,사원명,사번을 조회
SELECT HIREDATE,ENAME,EMPNO
FROM EMP 
WHERE ENAME = '김사랑'; 
 -- 문자열은 항상 '' 작은따옴표 사용한다.(큰따옴표"" X)

//결과
07/03/01	김사랑	1001

--직급이 과장인 사원들 중에 급여가 500이상인 사원들의 
--사번,이름,급여,직급을 조회
--그리고 AND / 이거나 OR 사용한다.
SELECT EMPNO,ENAME,SAL,JOB 
FROM EMP 
WHERE SAL <= 500 AND JOB ='과장'; -- 조건절

//결과
1003	오지호	500	과장
1005	신동협	450	과장
1010	이병헌	500	과장

--직원들 중에서 인센티브를 받지않는 직원의 모든 정보를 조회
SELECT * FROM EMP --모든 부서정보
WHERE COMM IS NULL;
-- (부정일 때)WHERE COMM IS NOT NULL;

1001	김사랑	사원	1013	07/03/01	300		20
1004	이병헌	부장	1008	03/09/02	600		20
1006	장동건	부장	1008	03/10/09	480		30
1007	이문세	부장	1008	04/01/08	520		10
1009	안성기	사장		96/10/04	1000		20
1010	이병헌	과장	1003	05/04/07	500		10
1011	조향기	사원	1007	07/03/01	280		30
1012	강혜정	사원	1006	07/08/09	300		20
1013	박중훈	부장	1003	02/10/09	560		20
1014	조인성	사원	1006	07/11/09	250		10


--사원 중 부서번호가 30이 아니고, 인센티브도 NULL이 아니면서 
--급여는 300에서 700사이인 사원의 사번,급여,인센팁,부서번호 조회
SELECT EMPNO,SAL,COMM,DEPTNO
FROM EMP 
WHERE SAL <= 700 
AND SAL >= 300 
AND COMM IS NOT NULL 
AND DEPTNO != 30;

//결과 
없음.
profile
Dev.Vinch

0개의 댓글