개방 질문은 우리를 잘못된 생각으로 보냅니다. 다음과 같아야합니다.
SQL 표현 R WHERE ... [NOT] IN S
에 해당하는 관계형 대수가 있습니까?
는
대답은 '예, 그것은 (자연)에 나비 넥타이 연산자 ⋈
일명 JOIN
이다 (즉, 대답은 두 개의 관계, 하지 필터의 일종. 사이에 작업입니다).
이유를 알아 보려면 먼저 주어진 SQL 솔루션을 정리해 보겠습니다. 그림과 같이 속성 A1 NOT IN
이 단일 속성 A2
과의 관계를 찾고 있습니다. 속성 이름에 실제로는 일치하지 않습니다. SQL은 where 조건 내에 NOT
을 허용합니다. 이 SQL을 사용하면 논리 구조가 더 명확 해집니다.
SELECT * FROM R
WHERE NOT (A1 IN (SELECT A2 AS A1 FROM R))
이제 투영과 이름 바꾸기를 볼 수 있습니다. (주위에 NOT
우리는 첫 번째 답변 당 MINUS 세트로 구현할 수 있습니다.) 그래서 해당하는 RA는 다음과 같습니다
R - (R ⋈ ρ
A1/A2(π
A2 관심을(R)))
, 자습서 D는 다음과 같습니다
질문을 넣어하는 방법으로
R MINUS (R JOIN (R {A2} RENAME A2 AS A1))
가있다 SQL 사고에서 숙취. SQL의 WHERE
은 당신을 행 수준의 '모드'로 만듭니다. 이것은 일련의 at-a-time 운영자를 요구하는 contra Codd의 규칙 7입니다.
일반적으로 행 수준 필터가있는 SQL의 WHERE
및 RA의 σ
은 한 번에 한 세트의 논리로 (자연) JOIN
으로 간결하게 구현 될 수 있습니다. (예를 들어,이 다웬가 대수에 무슨 일 &입니다.)
당신이 어떻게 작동하는지 설명 ... 어쩌면 줄임표 점을 확장하십시오 수 있습니다. 교차 제품의 결과를 이해하는 데 어려움을 겪고 있습니다. R에는 두 개의 필드 만 있으므로 두 개 이상의 인수를 사용하여 어떻게 pi 연산자를 넣을 수 있습니까? – jsj
두 개의 열만있는 경우 줄임표를 생략 할 수 있습니다. 그 답은 또한 RHO를 사용해야했던 곳에서 PI를 사용했는데, 그것이 편집에 있었는지 확실하지 않았거나 원래의 대답이었습니다. – Andomar
@Andomar : 또한 관계형 대수학 문제에 문제가 있습니다. 나는 내 질문 [여기] (http://stackoverflow.com/questions/18997845/how-to-convert-sql-to-relational-algebra-incase-of-sql-joins)을 올렸다. 여기 좀 도와 줄 수있어? 감사. –