2020년 7월 19일 일요일

카티션 프로덕트(Cartesian Product)

카티션 프로덕트(Cartesian Product)

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=620

6.2 카티션 프로덕트(Cartesian Product)

조인을 하는 경우 WHERE절을 기술 하지 않으면 FROM절 뒤에 기술된 각 테이블의 레코드 건수의 곱 만큼 결과가 나오게 되는데 이를 카티션 프로덕트(Cartesian Product) 라고 한다. 즉 테이블간의 조인에 있어 조인되는 조건을 기술하지 않거나 생략하는 경우에 발생한다.

SQL> select count(*) from emp;

COUNT(*)

----------

14

SQL> select count(*) from dept;

COUNT(*)

----------

4

--WHERE절을 기술 하지 않았으므로 결과는 (EMP의 데이터 건수) * (DEPT의 데이터 건수)가 된다.

SQL> select count(*) from emp, dept;

COUNT(*)

----------

56

--아래의 경우 결과로 나타나는 칼럼은 EMP, DEPT의 모든 칼럼이 나타나게 된다.

SQL> select * from emp, dept;

EMPNO ENAME JOB MGR HIREDATE SAL COMM

---------- ---------- --------- ---------- -------- ---------- ----------

DEPTNO DEPTNO DNAME LOC

---------- ---------- -------------- -------------

7369 SMITH CLERK 7902 80/12/17 800 96

20 10 ACCOUNTING NEW YORK

7499 ALLEN SALESMAN 7698 81/02/20 1600 300

30 10 ACCOUNTING NEW YORK

…… 중략……

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

오라클, SQL,테이블 별명(Table Alias)

오라클, SQL,테이블 별명(Table Alias)

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=619

6.1 테이블 별명(Table Alias)

테이블 명칭이 너무 긴 경우 원래 테이블 명칭 대신 별도의 이름을 부여해서 사용하는데 이를 테이블 별명(Table Alias)이라고 한다. 보통 테이블의 이름이 긴 경우 직관적이고 짧은 이름의 별명(Alias)을 이용하여 Query를 간결히 하는데 많이 이용되고 이 별명을 이용하여 같은 테이블이 조인되는 경우 칼럼 이름의 모호함을 방지 할 수 있다(EMP테이블의 MGR 칼럼이 참조하는 EMPNO 칼럼과의 조인, 사원별 관리자 이름 출력하는 경우). 이전에 배웠던 칼럼별명(Column Alias)과 비슷하게 생각하면 된다.

--주로 많이 사용하는 방식이다.

SQL> select e.ename, e.sal, e.deptno, d.dname

from emp e, dept d

where e.deptno = d.deptno

and e.deptno = 10;

ENAME SAL DEPTNO DNAME

---------- ---------- ---------- --------------

CLARK 2450 10 ACCOUNTING

KING 5000 10 ACCOUNTING

MILLER 1300 10 ACCOUNTING

SQL> select "사원".ename, "사원".sal, "사원".deptno, "부서".dname

from emp "사원", dept "부서"

where "사원".deptno = "부서".deptno

and "사원".deptno = 10;

ENAME SAL DEPTNO DNAME

---------- ---------- ---------- --------------

CLARK 2450 10 ACCOUNTING

KING 5000 10 ACCOUNTING

MILLER 1300 10 ACCOUNTING

--아래의 경우 1라인의 deptno의 경우 EMP와 DEPT 테이블 두 테이블에 공통으로 있는 칼럼이다. ename, sal, dname등은 컬럼 이름 앞에 소속을 밝히지 않아도 어느 테이블에 있는지를 알 수 있지만 deptno와 같은 경우는 어느 테이블의 것인지를 알기가 모호하다.

SQL> select ename, sal, deptno, dname

from emp e, dept d

where e.deptno = d.deptno

and e.deptno = 10;

select ename, sal, deptno, dname

*

1행에 오류:

ORA-00918: 열의 정의가 애매합니다

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...