암시 적을 만듭니다 CROSS JOIN
. SQL-89 구문입니다.
여기서는 예제 용으로 pseduo-tables (값 테이블)을 사용 values(1)
하고 values(2)
생성합니다. 그 후 일이 t(x)
, 그리고 g(y)
이라고 별칭부터 괄호 안에 문자가 열 (대한 별칭입니다 x
및 y
각각이). 이것을 테스트하기 위해 테이블을 쉽게 만들 수 있습니다.
SELECT *
FROM (values(1)) AS t(x), (values(2)) AS g(y)
다음은 지금 쓰는 방법입니다.
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(2)) AS g(y);
거기 INNER JOIN
에서 조건을 추가하여 이를 암시 적 으로 만들 수 있습니다 .
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(1)) AS g(z)
WHERE x = z;
또는 명시적이고 새로운 INNER JOIN
구문
SELECT *
FROM (values(1)) AS t(x)
INNER JOIN (values(1)) AS g(z)
ON ( x = z );
예를 들어 ..
FROM apod, to_tsquery('neutrino|(dark & matter)') query
이것은 본질적으로 새로운 구문과 동일합니다.
FROM apod
CROSS JOIN to_tsquery('neutrino|(dark & matter)') AS query
이 경우 실제로는 동일 to_tsquery()
합니다.
SELECT title, ts_rank_cd(
textsearch,
to_tsquery('neutrino|(dark & matter)')
) AS rank
FROM apod
WHERE to_tsquery('neutrino|(dark & matter)') @@ textsearch
ORDER BY rank DESC
LIMIT 10;
그러나 위의 내용은 to_tsquery('neutrino|(dark & matter)')
두 번 발생할 수 있지만이 경우에는 STABLE (으로 확인 됨 ) to_tsquery
로 표시 되지 않습니다 .\dfS+ to_tsquery
STABLE
함수는 데이터베이스를 수정할 수 없으며 단일 테이블 스캔에서 동일한 인수 값에 대해 동일한 결과를 일관되게 리턴하지만 결과는 SQL 문에서 변경 될 수 있음을 나타냅니다. 이는 데이터베이스 조회, 매개 변수 (예 : 현재 시간대) 등에 따라 결과가 달라지는 함수에 적합한 선택입니다. (현재 명령으로 수정 된 행을 쿼리하려는 AFTER 트리거에는 적합하지 않습니다.) current_timestamp 함수 계열은 트랜잭션 내에서 값이 변경되지 않으므로 안정적인 것으로 간주됩니다.
SQL-89와 SQL-92의 차이점을 더 완벽하게 비교하려면 여기 내 답변도 참조하십시오.
,
단지 직교 곱이므로 비교가 필요하지 않기 때문에 크로스 조인이되는 것이 합리적입니다 . 질문 하나만 더 대답 해 주시겠습니까? 무엇t(x)
에(values(1)) AS t(x)
???