Join 이란?
  • - 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법 이다.
  • - 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key 값을 사용하여 조인 한다.
  • - 두 개의 테이블을 SELECT문장 안에서 조인 하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야 한다.

Join 방법과 방식
  • - 조인의 방법 : Equi Join (등가 조인, 내부조인) , Non-Equi Join , Self Join , Outer Join
  • - 조인의 방식 : Nested Loop Join, Sort Merge Join, Hash Join

Equi Join

  • - 가장 일반적으로 사용하는 Equality Condition(=)에 의한 조인이다
  • - Equi join의 성능을 높이기 위해서는 Index 기능을 사용하는 것이 좋다.
-- dept 테이블과 emp 테이블을 조인하는 예제
SELECT e.empno, e.ename, d.dname
  FROM dept d, emp e
 WHERE d.deptno = e.deptno;

콤마(,) 대신 INNER JOIN을 사용 할 수 있으며, INNER는 생략 가능하다. Join 조건은 ON 절에 온다.

-- INNER JOIN절을 이용하여 조인하는 예제
SELECT e.empno, e.ename, d.dname
  FROM dept d 
 INNER JOIN emp e
    ON d.deptno = e.deptno;

NATURAL JOIN을 사용 하면 동일한 컬럼을 내부적으로 모두조인 하므로, ON절이 생략 가능하다.

-- NATURAL JOIN절을 이용하여 조인하는 예제
SELECT  e.empno, e.ename, d.dname
  FROM  dept d 
NATURAL JOIN emp e;

NATURAL JOIN의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데, USING 문을 사용하면 컬럼을 선택해서 조인을 할 수가 있다.

-- JOIN~USING절을 이용하여 조인하는 예제
SELECT e.empno, e.ename, deptno 
  FROM emp e 
  JOIN dept d 
 USING (deptno);

Non-Equi Join

  • - 테이블의 어떤 column도 Join할 테이블의 column에 일치하지 않을 때 사용하고, 조인조건은 동등( = )이외의 연산자를 갖는다.
  • - BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN
  • - 거의 사용하지 않는다
-- emp 테이블과 salgrade 테이블의 Non-Equi Join 예제
SELECT e.ename,e.sal,s.grade
  FROM emp e, salgrade s
  WHERE e.sal 
BETWEEN s.losal 
    AND s.hisal;

ENAME             SAL      GRADE
---------- ---------- ----------
SMITH             800          1
JAMES             950          1
ADAMS            1100          1
...

Self Join

  • - Equi Join과 같으나 하나의 테이블에서 조인이 일어나는 것이 다르다.
  • - 같은 테이블에 대해 두 개의 alias를 사용하여 FROM절에 두 개의 테이블을 사용하는 것 처럼 조인한다.
-- 사원의 매니저명을 조회하는 Self Join 예제
SELECT e.ename, a.ename "Manager"
  FROM emp e, emp a
 WHERE e.empno = a.mgr;

ENAME     Manager
------- ----------
FORD      SMITH
BLAKE     ALLEN
BLAKE     WARD
KING      JONES
...

Cartesian Product
  • - 검색하고자 했던 데이터뿐 아니라 조인에 사용된 테이블들의 모든 데이터가 반환 되는 현상
  • - Cartesian Product는 조인 조건을 정의하지 않은 경우 발생한다.
  • - 테이블의 개수가 N이라면 Cartesian Product를 피하기 위해서는 적어도 N-1개의 등가 조건을 SELECT 문안에 포함시켜야 하며 각 테이블의 컬럼이 적어도 한번은 조건절에 참조되도록 해야 한다.
  • CROSS JOIN을 이용하면 Cartesian Product 값을 얻을 수 있다.
-- CROSS JOIN절을 이용하여 Cartesian Product 값을 얻는 예제
SELECT  e.empno, e.ename, d.dname
  FROM  dept d CROSS JOIN emp e;

56 개의 행이 선택되었습니다.

'공부 > ORACLE_SQL' 카테고리의 다른 글

ORACLE_[ 집계함수(Aggregate function) ]  (0) 2013.05.20
ORACLE_[ OUTER JOIN ]  (0) 2013.05.20
ORACLE_[CREATE TABLE]  (0) 2013.01.09
ORACLE_[CASE문 사용법]  (0) 2012.10.05
ORACLE_[DECODE문_사용법]  (0) 2012.10.05

@Autowire 속성에 지정 가능한 값


1. no

- Autowiring 을 하지 않는다. 기본 값.


2. byName

- Bean 필드 이름과 같은 이름의 id를 갖는 Bean을 연결해준다.


3. byType

- Bean 필드에 대한 Setter 메서드의 인수 타입을 사용해 연결해준다.


4. constructor

- 생성자에 대해 byType을 사용해 연결해준다.


5. autodetect

- constructor인지 byType 인지 자동으로 판단한다.

  기본 생성자가 정의되어 있지 않은 경우는 constructor를, 정의되어 있는 경우에는 byType을 사용해 연결해준다.

 IBATIS 처리 후 Return 값

insert()는 성공 시 null이 반환 실패하면 에러 발생(구지 Return 값을 받아야 한다면, 'Update' 로 쿼리 실행)

update()는 성공 시 1 실패 시 0 반환

delete()는 삭제한 row수를 반환 한다. 잊지 말자

 

자꾸, 할때 마다 헷갈려서 메모한다. 

'공부 > IBATIS & MYBATIS' 카테고리의 다른 글

MYBATIS_[ insert() 후 result 값 받기 ]  (0) 2014.10.27

'공부 > ETC' 카테고리의 다른 글

ETC_[ Win7 Telnet 설정 ]  (0) 2014.11.04
ETC_[Apache Error Code]  (0) 2013.08.24
ETC_[제발 a href="#" 좀 쓰지 말자]  (0) 2013.03.13
주저리_[날짜 약자]  (0) 2013.01.08
NHN_NEXT 학교(?)를 설립하다  (0) 2012.06.30

비전공 전문대 2년 졸업

취업 후 정보처리기사도 없고(정보처리사업기사 유) 관련학과 4년제도 아니고

직업을 바꾼 후 이걸로 쭉 - 먹고 살자 늦게 시작했으니 공부 좀 하잔 생각으로 시작한 사이버대학 생활

5주차 접어들면서 처음으로 과제가 나왔다.

어렵진 않았는데 <FRAME> 태그는 처음 써보는거 같다. 잼있다.

실무에서 안쓰는거 같지만(지금회사가 첫 직장. 이제 2년차[학교졸업하면 이직할까?)

혹시나 나중에 쓸일이 생기면 참고하라고 흔적을 남긴다.

아 - 정보처리기사 실기 1주일 남았는데... 다음 회차로 미룰까?

 

간단히 과제 소개

1. 테이블 그리기(셀 합치기 & 정렬)

2. <FRAMESET><FRAME> 이용해서 화면 분할

3. 이미지 맵을 이용한 범위 지정 및 링크처리하기

 

- 내가 학교에 제출한 과제 (한참 나중에 보면 웃길거 같아서 남긴다)

 5주차과제.zip

 

class 파일 소스를 보려면

이전까지 Jad 따로 열어서 Class 소스 드래그 해서 봤었는데... 멍청한 짓이였다.

생각해보면 미친 또라이 짓이였다.

 

이걸 이제야 알다니... 충격이다.

다른분 블러그에서 내용을 보고 나드 설치 완료.

 

2012년에 작성하신건데.. 구글링을 좀 해봐도 지금 올려져 있는 버젼이 최신인거 같다.

JAD는 바이트코드인 Java Class 파일을 디컴파일해주는 프로그램(개발자가 볼수있도록)

JadClipse 는 자바디컴파일을 이클립스에서 편리하게 사용할 수 있도록 도와주는 이클립스 플러그인

 

처음에 이클립스 Help -> Eclipse MarketPlace -> Find: jad -> JadClipse For Eclipse 4.x -> install 했는데

설치가 안된다. 이유를 모르겟다. 그래서 검색해보니 다른방법이 있다. 그래서 했다. 처음방법이 왜안되는지는 모르겠다.

 

- 필요한 파일

1. Jad.exe 다운로드

http://www.varaneckas.com/jad

jad158g.win.zip

 

2. net.sf.jadclipse_x.x.x.jar (현재 3.3.0 버젼이 최신) 확실히 모름

http://sourceforge.net/projects/jadclipse/

net.sf.jadclipse_3.3.0.jar

 

- Jad 설정

Jad.zip 압출풀기 -> 이클립스 폴더(내 컴퓨터 기준 :D:\DEV\Toolz\eclipse\jad.exe)에 Jad.exe 추가

 

- net.sf.jadclipse_x.x.x.jar 설정

net.sf.jadclipse_x.x.x.jar 통째로 이클립스/플러그인 폴더 추가

(내 컴퓨터준:D:\DEV\Toolz\eclipse\plugins\net.sf.jadclipse_3.3.0)

 

- JadClipse 사용을 위한 이클립스 내의 환경설정

 

- 사용법(?)

이클립스 재부팅

사용시 확인하고자 하는 소스(?) Ctrl + 마우스클릭

 

- GoogleMap API 오버레이 & 마커 표시

1. 오버레이 : 지도상의 위치정보 연결객체

2. 마커 : 지도상의 위치 표시(아이콘)

- 사용 예)

<!DOCTYPE html>
<html DIR="LTR">
<head>
<title>Google Maps JavaScript API v3 예제: 오버레이 제거</title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
    var map;
  /* 클릭한 마커의 ID, 좌표를 관리할 배열 생성 */
  var markersArray = [];

  /* 초기화 */
  function initialize() {
    /* 초기화 나타날 지도 센터의 좌표 */
    var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);
    var mapOptions = {
      zoom: 12,
      center: haightAshbury,
      /* 출력한 지도 타입 */
      mapTypeId: google.maps.MapTypeId.TERRAIN
  };

    /* 맵 생성 */
    map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
   
    /* 사용자의 이벤트처리할 리스너 */
    google.maps.event.addListener(map, 'click', function(event) {
      addMarker(event.latLng);
    });
  }
 
  function addMarker(location) {
    marker = new google.maps.Marker({
      position: location,
      map: map
  });
    /* 맵의 입력 */
    markersArray.push(marker);
  }

  // Removes the overlays from the map, but keeps them in the array
  /* 마커 지도(화면단)에서 지우기(실제 정보는 존재) */
  function clearOverlays() {
    if (markersArray) {
      for (i in markersArray) {
        markersArray[i].setMap(null);
      }
    }
  }

  // Shows any overlays currently in the array
  function showOverlays() {
    if (markersArray) {
      for (i in markersArray) {
        markersArray[i].setMap(map);
      }
    }
  }

  // Deletes all markers in the array by removing references to them
  /* 마커정보 완전 삭제 */
  function deleteOverlays() {
    if (markersArray) {
        for (i in markersArray) {
        /* 마케지우고 */
        markersArray[i].setMap(null);
    }
      /* 마커정보 배열 지우기 */
      markersArray.length = 0;
    }
  }
</script>
</head>
<body onload="initialize();">
  <div>
    <input onclick="clearOverlays();" type=button value="오버레이 지우기" />
    <input onclick="showOverlays();" type=button value="오버레이 모두 표시" />
    <input onclick="deleteOverlays();" type=button value="오버레이 삭제" />
  </div>
  <div id="map_canvas" style="top:30px;width:600px; height:500px"></div>
</body>
</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>회원가입</title>

    <script src="../../js/jquery-1.3.2-vsdoc2.js" type="text/javascript"></script>

    <script src="jquery.validate-vsdoc.js" type="text/javascript"></script>

    <script type="text/javascript">

        $(document).ready(function() {

            //$('#myForm').validate(); // 유효성 검사

            $('#myForm').validate({

                rules: {

                    txtID: { required: true, minlength: 3, remote:"Validate.aspx" },

                    txtPassword: { required: true },

                    txtName: { required: true },

                    txtEmail: { email: true },

                    txtPasswordConfirm: { equalTo: "#txtPassword" },

                    txtAge: { range: [1, 150] }

                },

                messages: {

                    txtID: {

                        required: "아이디를 입력하시오.",

                        minlength: jQuery.format("아이디는 {0}자 이상"),

                        remote : jQuery.format("{0}는 이미 있는 아이디")

                    },

                    txtPassword: { required: "암호를 입력하시오." },

                    txtName: { required: "이름을 입력하시오." },

                    txtEmail: { email: "올바른 이메일을 입력하시오." },

                    txtPasswordConfirm: { equalTo: "암호를 다시 확인하세요." },

                    txtAge: { range: "나이는 1~150" }

                },

                // 아래 코드는 버그

                //submitHandler: function () {

                //    $('#myForm').submit(); // 통과시 전송

                //},

                submitHandler: function (frm) {

                    frm.submit(); // 통과시 전송

                },

                success: function (e) {

                    //

                }               

            });

        });

    </script>

</head>

<body>

<form id="myForm" method="post" action="Validate.aspx">

    아이디 : <input type="text" id="txtID" name="txtID" class="required" /><br />

    암호 : <input type="text" id="txtPassword" name="txtPassword" class="required" /><br />

    암호확인 : <input type="text" id="txtPasswordConfirm" name="txtPasswordConfirm" class="required" /><br />

    이름 : <input type="text" id="txtName" name="txtName" class="required" minlength="2" /><br />

    이메일 : <input type="text" id="txtEmail" name="txtEmail" class="required email" /><br />

    나이 : <input type="text" id="txtAge" name="txtAge" /><br />

   

    <input type="submit" value="전송" />

</form>

</body>

</html>


- HTML <A> 태그의 TARGET 속성의 값

1] 일반적인 예)

<a href="http://lucetedaniel.tistory.com">내 티스토리 블러그</a>


2] 속성 TARGET 의 종류

1. _blank

- 링크된 내용을 새로운 창으로 보여준다.

2. new

- 링크된 내용을 새로운 창으로 보여준다.

3. _self

- 현재의 창에 링크된 내용을 보여준다.

4. _top

- 현재의 창이 프레임으로 구성되어 있을때 프레임이 사라지고 하나의

  화면에 링크된 내용을 보여준다.

5. _parent

- 링크 부분이 있는 프레임에 새로운 프레임이 만들어져 링크된 내용을 보여준다.


3] TARGET 사용 예

<a href="http://lucetedaniel.tistory.com" target="_blank">내 티스토리 블러그</a>


'공부 > HTML' 카테고리의 다른 글

HTML_[ optgroup ]  (0) 2014.05.26
HTML_[속성 id 와 name 차이]  (0) 2013.01.18
function
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

fn:contains(string, substring)  
string이 substring을 포함하면 true 리턴. 

fn:containsIgnoreCase(string,substring)
대소문자에 관계없이, string이 substring을 포함하면 true 리턴. 

fn:endsWith(string, suffix)   
string이 suffix로 끝나면 true 리턴. 

fn:escapeXml(string)    
string에 XML과 HTML에서 특별한 의미를 가진 문자들이 있으면, XML 엔티티 코드로 바꿔준 뒤 문자열 리턴. 

fn:indexOf(string,substring)  
string에서 substring이 처음으로 나타나는 인덱스 리턴. 

fn:join(array, separator)
  
array(배열) 요소들을 separator를 구분자로 하여 연결해서 리턴 

fn:length(item)
      
item 이 배열이나 컬렉션이면 요소의 갯수를, 문자열이면 문자의 갯수를 리턴. 

fn:replace(string, before, after)
 
string 내에 있는 before 문자열을 after 문자열로 모두 바꿔서 리턴. 

fn:split(string, separator)
   
string 내의 문자열을 separator에 따라 나누어서 배열로 구성해 리턴. 

fn:startsWith(string, prefix)
  
string이 prefix로 시작하면 true 리턴. 

fn:substring(string, begin, end)
 
tring에서 begin 인덱스에서 시작해서 end 인덱스에 끝나는 부분
(end 인덱스에 있는문자 포함)의 문자열을 리턴.

fn:substringAfter(string, substring)

string에서 substring이 나타나는 이후의 부분에 있는 문자열을 리턴. 

fn:substringBefore(string, substring)

string에서 substring이 나타나기 이전의 부분에 있는 문자열을 리턴. 

fn:toLowerCase(string)
    
string을 모두 소문자로 바꿔 리턴. 

fn:toUpperCase(string)
    
string을 모두 대문자로 바꿔 리턴. 

fn:trim(string)
      
string 앞뒤의 공백(whitespace)을 모두 제거하여 리턴.

+ Recent posts