'db'에 해당되는 글 2건

  1. 2008.06.16 ADO.NET2.0 특정한 값들만 가져오기
  2. 2008.04.19 ORACLE-JOIN 알아보기 4


지난 부분에 올렸던 부분의 후속부분으로 전체데이터를 읽어오지 않고 특정한 부분만 읽어올 경우는
어떻게 하면 될까요?

지난번처럼 GridView와 버튼하나 올려놓고 버튼을 더블클릭해서 아래와 같이 코딩합니다.


    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        'Connection 객체생성
        Dim strConn As String = "server=(local);database=AdventureWorks;uid=testman2;pwd=123645"
        Dim Conn As New SqlConnection(strConn)

        'Connection 객체열기
        Conn.Open()

        'Command 객체 생성
        Dim strSQL As String = "SELECT * FROM Person.Address where PostalCode= @PostalCode"
        Dim Comm As New SqlCommand(strSQL, Conn)

        'Parameter 객체 생성해서 Command 객체에 추가하기
        Dim param As New SqlParameter("@PostalCode", Data.SqlDbType.VarChar)
        param.Value = "98055"
        Comm.Parameters.Add(param)

        'DataReader 생성
        Dim reader As SqlDataReader = Comm.ExecuteReader

        'DataReader를 이용해서 DataView 컨트롤에 바인딩하기
        GridView1.DataSource = reader
        GridView1.DataBind()

        'DataReader와 Connection 닫기
        reader.Close()
        Conn.Close()

위에서 표시한대로 Command객체에서 SP(저장 프로시저)를 이용해서 특정한 값들을 불러오는 것처럼
SELECT문을 입력하고  Parameter객체를 생성한다음 Command객체에 추가해 주어 원하는 결과를 얻을 수 있음.

원래 AdventureWorks DB의 Person.Address테이블의 총레코드수는 19614이나 위의 예제에서는
PostalCode=98055인 것만 선택하여 GridView 보여지도록 하였다.

실행결과

사용자 삽입 이미지
결과적으로 115의 레코드만이 검색되어 뿌려주는 것을 알 수 있다.

Posted by 원철연(체르니)
,

조인(JOIN)

하나 이상의 테이블을 연결하여 데이터를 검색하는 방법

 

형식

SELECT 테이블1.칼럼1, 테이블1.칼럼2, …, [테이블2.칼럼1, 테이블2.칼럼2, …]

FROM 테이블1, 테이블2

WHERE 테이블1.공통칼럼=테이블2.공통칼럼 ;

 

1. Equi-JOIN(동등 조인) or INNER JOIN(내부 조인)

일반적으로 JOIN하면 INNER JOIN을 지칭할 정도로 많이 사용한다.

 

예제) 급여가 2000 이상인 사원에 대해 사원 번호, 사원이름, 업무, 부서명, 위치를 검색

SELECT a.EMPNO, a.ENAME, a.JOB, a.SAL, b.DNAME, b.LOC

FROM EMP a, DEPT b

WHERE a.DEPTNO=b.DEPTNO AND a.SAL>=2000;

 

SELECT a.EMPNO, a.ENAME, a.JOB, a.SAL, b.DNAME, b.LOC

FROM EMP a INNER JOIN DEPT b

ON a.DEPTNO=b.DEPTNO AND a.SAL>=2000;

결과

사용자 삽입 이미지

2. Non-Equi JOIN(비동등 조인)
테이블의 어떤 칼럼도 조인할 테이블의 칼럼과 일치하지 않을 때 사용.

따라서 조인 조건 대신 BETWEEN  AND, IS NULL, IS NOT NULL, IN, NOT IN

같은 연산자를 사용

 

예제) 사원 테이블(EMP) 내의 급여가 급여등급테이블(SALGRADE)의 하한값과 상한값 사이에 포함되는 경우 사원번호, 사원이름, 사원급여, 사원등급이 표시되도록 하시오.

SELECT a.EMPNO 사원번호, a.ENAME 사원이름, a.SAL 사원급여,
b.GRADE
사원등급

FROM EMP a, SALGRADE b

WHERE a.SAL BETWEEN b.LOSAL AND b.HISAL ;

 

결과

사용자 삽입 이미지

3. SELF JOIN(자기 조인)

일반적인 조인은 서로 다른 테이블을 이용하여 처리하였으나 SELF JOIN은 자기 자신의 테이블을 별칭을 이용해서 조인하여 원하는 결과값을 검색하는 조인의 한 유형이다.

 

예제) 사원번호, 사원이름, 관리자이름, 관리자번호가 나타나도록 검색하시오.

SELECT a.EMPNO 사원번호, a.ENAME 사원이름, b.ENAME 관리자이름,

b.EMPNO 관리자번호

FROM EMP a, EMP b

WHERE a.MGR=b.EMPNO;

 

결과

 

사용자 삽입 이미지

4. OUTER JOIN(외부 조인)

동등조인과 비동등 조인의 경우에 조인 조건이 만족하는 데이터만 검색이 되므로

위의 검색결과를 참고하면 알 수 있듯이 DEPT 테이블에 있는 DEPTNO=40에 해당하는

OPERATIONS 부서는 절대로 검색되지 않는다.

따라서 이러한 문제를 해결하기 위해서 OUTER JOIN을 사용한다.


유형

LEFT OUT JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있는데 FULL OUTER JOIN LEFT, RIGHT JOIN을 합한 형태이다.

(+) 기호를 사용하기도 하는데 (+) 기호는 일치되지 않는 행이 존재하지 않은 쪽에 붙인다.

 

SELECT a.EMPNO, a.ENAME, b.DNAME

FROM EMP a, DEPT b

WHERE a.DEPTNO (+)= b.DEPTNO;

 

SELECT a.EMPNO, a.ENAME, b.DNAME

FROM EMP a RIGHT OUTER JOIN  DEPT b

ON a.DEPTNO = b.DEPTNO;

 

결과

사용자 삽입 이미지

참고로 FULL OUTER JOIN (+)기호를 사용해서 구할 수 없고 FULL OUTER JOIN 형식으로만 가능하다.

SELECT a.EMPNO, a.ENAME, b.DNAME

FROM EMP a, DEPT b

WHERE a.DEPTNO(+)= b.DEPTNO(+); -> 에러 발생

 

SELECT a.EMPNO, a.ENAME, b.DNAME

FROM EMP a FULL OUTER JOIN  DEPT b

ON a.DEPTNO = b.DEPTNO;

 

5. Cartesian Product(카티션 곱) or Cross JOIN(크로스 조인)

 

쿼리문

SELECT EMPNO, ENAME, DNAME

FROM DEPT

CROSS JOIN EMP;

 

결과

사용자 삽입 이미지

6. Natural JOIN(자연 조인)

자연 조인은 Equi-JOIN과 동일하지만 기술하는 방법이 조금 다른데,

JOIN 조건을 표시하지 않고 FROM 뒤의 테이블 내에서 동일한 이름을

갖는 칼럼들을 찾아서 동등한 조건으로 JOIN해줌.


쿼리문

SELECT EMPNO, ENAME, DNAME

FROM DEPT

NATURAL JOIN EMP;

 

결과

 

사용자 삽입 이미지

이상으로 JOIN(조인)에 대해서 간략히 알아보았습니다.
그럼 이만..

Posted by 원철연(체르니)
,