복붙노트

[SQL] 십자가의 용도는 무엇을 가입입니까?

SQL

십자가의 용도는 무엇을 가입입니까?

크로스 행한다에게 두 세트의 튜플에 직교 제품 가입.

SELECT *
FROM Table1
CROSS JOIN Table2

어떤 경우에 특히 유용 이러한의 SQL 작업을 렌더링?

해결법

  1. ==============================

    1.당신은 당신이 의류의 특정 기사에 대한 크기와 색상 정보처럼 완전히 채우려하는 "그리드"가있는 경우 :

    당신은 당신이 의류의 특정 기사에 대한 크기와 색상 정보처럼 완전히 채우려하는 "그리드"가있는 경우 :

    select 
        size,
        color
    from
        sizes CROSS JOIN colors
    

    어쩌면 당신은 하루에 매 순간에 대한 행을 포함하는 테이블을 원하고, 당신은 세 개의 테이블을 통과 할 수 있도록 절차가 분마다 실행되었는지 확인하는 데 사용할 :

    select
        hour,
        minute
    from
        hours CROSS JOIN minutes
    

    또는 당신은 당신이 해에 매달에 적용 할 표준 보고서 사양의 세트를 가지고 :

    select
        specId,
        month
    from
        reports CROSS JOIN months
    

    보기 이러한 유지 관리의 문제는 대부분의 경우에, 당신은 특히 옷과 관련하여, 완벽한 제품을 원하지 않는다는 것입니다. 당신은 당신이 수행하지 않는 것이 특정 조합을 제거하기 위해 쿼리에 MINUS 로직을 추가 할 수 있습니다,하지만 당신은 쉽게 테이블을 다른 방법으로 채우고 데카르트 제품을 사용하지 찾을 수 있습니다.

    또한, 당신은 십자가 당신이 생각했던 것보다 더 아마도 몇 행이 테이블에 가입하려고 끝날 수도 있고, 아마 당신은 WHERE 절은 부분적으로 또는 완전히 실종됐다. 이 경우, 당신의 DBA는 즉시 누락을 알려드립니다. 일반적으로 그 또는 그녀는 행복하지 않을 것입니다.

  2. ==============================

    2.테스트를위한 데이터를 생성합니다.

    테스트를위한 데이터를 생성합니다.

  3. ==============================

    3.당신은 일반적으로 대부분의 데이터베이스 쿼리에 대한 전체 직교 제품을 원하지 않을 것입니다. 관계형 데이터베이스의 전체 힘은 당신이 당신이 DB에서 불필요한 행을 당겨 피할 수에 관심을 가질만한 어떤 제한을 적용 할 수 있다는 것입니다.

    당신은 일반적으로 대부분의 데이터베이스 쿼리에 대한 전체 직교 제품을 원하지 않을 것입니다. 관계형 데이터베이스의 전체 힘은 당신이 당신이 DB에서 불필요한 행을 당겨 피할 수에 관심을 가질만한 어떤 제한을 적용 할 수 있다는 것입니다.

    당신은 당신이 직원의 테이블과 일 필요가 작업의 테이블을 가지고 하나의 작업 한 직원의 가능한 모든 과제를보고 싶다면 즉 할 수 있습니다 어디 하나 인위적인 예를 가정합니다.

  4. ==============================

    4.그것이 사실 (그리고 심지어 있는지 그 아니에요)하면 좋아, 이것은 아마도 그것은 역사의 재미 비트의 질문에 대답하지만,하지 않습니다.

    그것이 사실 (그리고 심지어 있는지 그 아니에요)하면 좋아, 이것은 아마도 그것은 역사의 재미 비트의 질문에 대답하지만,하지 않습니다.

    오라클의 초기에는 개발자 중 하나는 그가 테이블에서 모든 행을 복제하는 데 필요한 것을 깨달았다 (예를 들어, 그것은 사건의 테이블이었다 가능하고 그는 그것이 분리 "이벤트를 시작합니다"와 "종료 이벤트"변경 필요 항목). 그는 단지 두 개의 행이있는 테이블이 있다면, 그는 첫 번째 테이블에서 바로 열을 선택, 크로스 조인을 수행 정확하게 얻을 그가 필요했다 수 있다는 것을 깨달았다. 그래서 그는 자연스럽게 정도 "DUAL"라는 간단한 테이블을 만들었습니다.

    나중에, 그는 작업 자체가 아마도 그는 자신의 시계를 잊어 FROM SELECT SYSDATE를 통해 시간을 읽을 원 (테이블과는 아무런 관련이없는 경우에도, 단지 테이블에서 선택을 통해 할 수있는 일을 할 필요가 ... .가) 그는 여전히 주위에 거짓말을 자신의 DUAL 테이블을 가지고 있음을 깨달았다 것을 사용했다. 결국 그가 행 중 하나를 삭제 있도록 잠시 후, 그는 두 번 인쇄 시간을 보는 피곤.

    오라클의 다른 사람들은 자신의 테이블을 사용하기 시작, 결국, 그것은 표준 Oracle 설치에 포함하기로 결정했다.

    그의 유일한 의미있는 테이블이 하나 개의 행을 "이"을 의미 이름을 가지고 있다는 것입니다 이유는 설명한다.

  5. ==============================

    5.핵심은 "모든 가능한 조합 보여줘"입니다. 나는 다음 분류 / 그 필터링 다른 계산 된 필드와 함께 다음을 사용했습니다.

    핵심은 "모든 가능한 조합 보여줘"입니다. 나는 다음 분류 / 그 필터링 다른 계산 된 필드와 함께 다음을 사용했습니다.

    예를 들어, 당신은 차익 거래 (거래) 응용 프로그램을 구축하고 말한다. 당신은 판매자가 가격에 제품을 제공하고 구매자가 비용으로 제품을 요청해야합니다. (잠재적 구매자와 판매자 일치하는) 당신은 십자가 제품 키에 가입 할 비용과 가격 사이의 확산, 다음 종류의 내림차순을 계산합니다. 이 당신 (중개인) 실행하기 위해 가장 수익성이 거래를 제공합니다. 거의 항상 물론 다른 경계 필터 기준을해야합니다.

  6. ==============================

    6.숫자 0-9에 대한 열 행이있는 자리 테이블과 같이 이동합니다. 당신은 결과가 적절하게 번호와 함께, 당신이 필요하지만 많은 행이있는 GET 결과에 몇 번 간 사용하는 테이블에 가입 할 수 있습니다. 이것은 사용을 가지고 있습니다. 예를 들어, 특정 연도의 모든 일에 대한 집합을 얻기 위해 datadd () 함수를 결합 할 수 있습니다.

    숫자 0-9에 대한 열 행이있는 자리 테이블과 같이 이동합니다. 당신은 결과가 적절하게 번호와 함께, 당신이 필요하지만 많은 행이있는 GET 결과에 몇 번 간 사용하는 테이블에 가입 할 수 있습니다. 이것은 사용을 가지고 있습니다. 예를 들어, 특정 연도의 모든 일에 대한 집합을 얻기 위해 datadd () 함수를 결합 할 수 있습니다.

  7. ==============================

    7.이 크로스 크로스 탭 보고서를 만들 조인을 사용하는 재미있는 방법입니다. 나는 조 셀코의 SQL의 경우에 smarties에서 그것을 발견하고 그것을 여러 번 사용했다. 그것은 약간의 설정을 수행하지만 가치 투자 한 시간이었다.

    이 크로스 크로스 탭 보고서를 만들 조인을 사용하는 재미있는 방법입니다. 나는 조 셀코의 SQL의 경우에 smarties에서 그것을 발견하고 그것을 여러 번 사용했다. 그것은 약간의 설정을 수행하지만 가치 투자 한 시간이었다.

  8. ==============================

    8.당신은 당신이 (등 가격, 가용성) 항목과 날짜의 특정 조합을 통해 발행 할 일련의 쿼리를했다 상상해보십시오. 당신은 별도의 임시 테이블에 항목과 날짜를로드 및 쿼리 테이블을 조인 교차있을 수 있습니다. 이것은 일부 데이터베이스가 IN 절에있는 요소의 수를 제한, 특히 이후 IN 절에서 항목과 날짜를 열거의 대안보다 더 편리 할 수 ​​있습니다.

    당신은 당신이 (등 가격, 가용성) 항목과 날짜의 특정 조합을 통해 발행 할 일련의 쿼리를했다 상상해보십시오. 당신은 별도의 임시 테이블에 항목과 날짜를로드 및 쿼리 테이블을 조인 교차있을 수 있습니다. 이것은 일부 데이터베이스가 IN 절에있는 요소의 수를 제한, 특히 이후 IN 절에서 항목과 날짜를 열거의 대안보다 더 편리 할 수 ​​있습니다.

  9. ==============================

    9.당신은에 가입 CROSS 사용할 수 있습니다 : - 테스트 목적을위한 데이터를 생성 - 모든 속성을 결합 - 당신의 Rh 모든 가능한 예컨대 조합 혈액형 (A, B, ...) 필요 - 등 / +를, ... 그것을 용도에 --tune) -이 분야에서 전문가가 아니에요)

    당신은에 가입 CROSS 사용할 수 있습니다 : - 테스트 목적을위한 데이터를 생성 - 모든 속성을 결합 - 당신의 Rh 모든 가능한 예컨대 조합 혈액형 (A, B, ...) 필요 - 등 / +를, ... 그것을 용도에 --tune) -이 분야에서 전문가가 아니에요)

    CREATE TABLE "HR"."BL_GRP_01" 
    ("GR_1" VARCHAR2(5 BYTE));
    REM INSERTING into BL_GRP_01
    SET DEFINE OFF;
    Insert into BL_GRP_02 (GR_1) values ('A');
    Insert into BL_GRP_02 (GR_1) values ('B');
    Insert into BL_GRP_02 (GR_1) values ('O');
    Insert into BL_GRP_01 (GR_1) values (NULL);
    
    CREATE TABLE "HR"."BL_GRP_02" 
    ("GR_1" VARCHAR2(5 BYTE));
    
    REM INSERTING into BL_GRP_02
    SET DEFINE OFF;
    Insert into BL_GRP_02 (GR_1) values ('A');
    Insert into BL_GRP_02 (GR_1) values ('B');
    Insert into BL_GRP_02 (GR_1) values ('O');
    Insert into BL_GRP_02 (GR_1) values (NULL);
    
    CREATE TABLE "HR"."RH_VAL_01" 
    ("RH_VAL" VARCHAR2(5 BYTE));
    REM INSERTING into RH_VAL_01
    SET DEFINE OFF;
    Insert into RH_VAL_01 (RH_VAL) values ('+');
    Insert into RH_VAL_01 (RH_VAL) values ('-');
    Insert into RH_VAL_01 (RH_VAL) values (NULL);
    
    select distinct  a.GR_1 || b.GR_1 || c.RH_VAL as BL_GRP
    from BL_GRP_01 a, BL_GRP_02 b, RH_VAL_01 c
    GROUP BY a.GR_1, b.GR_1, c.RH_VAL;
    
  10. from https://stackoverflow.com/questions/219716/what-are-the-uses-for-cross-join by cc-by-sa and MIT license