2017-05-30 69 views
-6

我必須將SQL轉換爲相應的關係代數。將SQL SELECT查詢轉換爲相應的/等效關係代數

SELECT * FROM student; 

在關係代數中它的等價表達式是什麼?

+0

看起來像一個選擇對我說:https://開頭恩.wikipedia.org/wiki/Relational_algebra#Selection_.28.CF.83.29 – duffymo

+0

我經歷了鏈接,但不明白。我必須從表名學生中選擇所有行,並且我想知道它在關係代數中的表達式 – sukhbir1996

+0

我知道你想要什麼。問題是關係代數沒有*的語法糖。它是維基百科 - 如果你對SQL和關係運算符有一些瞭解,你應該能夠弄清楚你想要什麼。如果不是,我會假設你正在尋找某人爲你做功課。 – duffymo

回答

0

你沒有定義「關係代數」。 (有很多變體。)我將使用關係代數的最簡單變體,其中一個關係的標題是一組屬性名稱,而一個主體是屬性名稱爲&值的一組元素運營商包括NATURAL JOIN,PROJECT,RENAME & RESTRICT

您沒有定義「轉換」/「對應」/「等效」。

「Equivalent expression」=具有相同值的表達式?

的代數表達式與相同的值SELECT * FROM Student

Student 

「等效表述」 與相應的表&運營=表達?

如果你不只是想要任何舊的查詢返回相同的東西,那麼你可能想要一些查詢,其結構在某種意義上遵循或反映了原始結構。 (大概是爲了表明你知道哪些SQL查詢子句對應於什麼代數表達式。)SQL由於具有這種不尋常的複雜語法而加劇了這種情況。根據你的教師/教科書,你需要說出「某種意義上的」意味着什麼。

SELECT-FROM-WHERE的一些可能的轉換規則:

首先FROM子句RENAME小號列C1, ...每個表與(可能隱含的)別名AA.C1, ...到。然後它處理一系列連接,每個連接都是CROSS JOIN或INNER JOINON

SQL in FROM clause   Algebra 

*table* A     RENAME C1\A.C1, ... (*table*) 
... ON *condition*   RESTRICT *condition* (...) 
... INNER JOIN *table*  (...) NATURAL JOIN (*table*) 
... CROSS JOIN *table*  (...) NATURAL JOIN (*table*) 

FROM子句映射到一個表,*table* WHERE *condition*映射到RESTRICT *condition* (*table*)後。

一個SQL SELECT子句PROJECT S於所需的列然後或者每AS或下降A.小號RENAME秒。 (Solitary *是所有列的簡稱,A.*是從A.開始的所有列的列表的簡稱。)

SQL    Algebra 

SELECT ..., A.Ci, ..., A.Cj AS X, ... 
FROM *table* T 

       RENAME ..., A.Ci\Ci, ..., A.Cj\X, ... 
        PROJECT ..., A.Ci, ..., A.Cj, ... 
         *table* 

因此,使用這些機械規則

SELECT * FROM Student 

是短期的SQL

SELECT Student.C1, ... FROM Student Student 

其轉換爲

RENAME ..., Student.Ci\Ci, ... 
    PROJECT ..., Student.Ci, ... 
     Student 

由於SQL是這樣一個不規則的語言,則更多的SQL表達式允許更多規則。如果你想讓簡單的SQL表達式對應於簡單的代數表達式而不是臃腫的表達式,那麼可以爲這些特殊情況添加規則。你的代數越複雜,像SQL越簡單,規則越少。

(代數SELECT/RESTRICT不對應的SQL SELECT條款,它相當於一個SQL WHERE條款。)

+0

你不瞭解的第一件事是什麼?這個答案中的第一件事就是「學生」是「它在關係代數中的等價表達」 - 如果「等價」意味着「具有相同的價值」。 (但是你不會說什麼「等價」意味着什麼。)Pease解決我對你的問題的評論。看看downvotes。你不清楚。您沒有向我們展示您所知道的信息,或者您的參考信息,或者任何「研究工作」(請參閱​​downvote symbol mouseover。)(但其他評論者不瞭解這些問題。) – philipxy

0

即使它並不總是可能的SQL轉換爲RA或其他方式,還有一些有用的東西知道:

  • SELECT操作者
  • (R)π可以看出通常用作FROM
  • σ凸輪NE視爲WHERE操作

SELECT * FROM student; 

看起來像這樣在RA:

π(student) 

雖然

SELECT name FROM student WHERE age='20' 

π name(σ age='20' (student)) 

注意年齡= '20'通常會被寫入標這樣

enter image description here