QUEL frågespråk
Familj | Frågespråk |
---|---|
Designad av | Michael Stonebraker |
Dök först upp | 1976 |
Stora implementeringar | |
Ingres , POSTQUEL | |
Influenced by | |
Alpha |
QUEL är ett frågespråk för relationsdatabas , baserat på tupelrelationskalkyl, med vissa likheter med SQL . Det skapades som en del av Ingres DBMS -satsning vid University of California, Berkeley , baserat på Codds tidigare föreslagna men inte implementerade Data Sub-Language ALPHA . QUEL användes under en kort tid i de flesta produkter baserade på den fritt tillgängliga Ingres-källkoden, framför allt i en implementering som heter POSTQUEL som stöds av POSTGRES . Eftersom Oracle och DB2 tog marknadsandelar i början av 1980-talet, flyttade de flesta företag som sedan stödde QUEL till SQL istället. [ citat behövs ] QUEL fortsätter att vara tillgänglig som en del av Ingres DBMS, även om inga QUEL-specifika språkförbättringar har lagts till på många år. [ när? ]
Användande
QUEL-satser definieras alltid av tupelvariabler , som kan användas för att begränsa frågor eller returnera resultatuppsättningar. Betrakta det här exemplet, taget från en av de första originaltidningarna från Ingres:
intervall av E är ANSTÄLLDA hämta till W ( COMP = E . Lön / ( E . Ålder - 18 )) där E . Namn = "Jones"
Här är E en tupelvariabel som sträcker sig över EMPLOYEE-relationen, och alla tupler i den relationen hittas som uppfyller kvalifikationen `E.Name = "Jones"`. Resultatet av frågan är en ny relation W, som har en enda domän COMP som har beräknats för varje kvalificerande tupel. Ytterligare frågor kan sedan göras mot relationen W.
En motsvarande SQL-sats är:
skapa tabell W as välj ( E . lön / ( E . ålder - 18 )) som COMP från anställd som E där E . namn = 'Jones'
I det här exemplet lagras relationen i en ny tabell W. Detta är inte en direkt analog till QUEL-versionen; relationer i QUEL liknar mer temporära tabeller i de flesta moderna SQL-implementationer.
Här är ett exempel på en enkel session som skapar en tabell, infogar en rad i den och sedan hämtar och modifierar data inuti den och slutligen tar bort raden som lades till (förutsatt att namnet är ett unikt fält).
QUEL | SQL |
---|---|
skapa elev ( namn = c10 , ålder = i4 , kön = c1 , tillstånd = c2 ) intervall av s är elev lägg till s ( namn = "philip" , ålder = 17 , kön = "m" , tillstånd = "FL" ) hämta ( s . alla ) där s . state = "FL" ersätt s ( ålder = s . ålder + 1 ) hämta ( s . alla ) radera s där s . namn = "philip"
|
skapa tabell elev ( namn char ( 10 ), ålder int , kön char ( 1 ), ange char ( 2 )); infoga i studentvärden ( namn , ålder , kön , stat ) ( 'philip' , 17 , 'm' , 'FL' ) ; välj * från student där state = 'FL' ; uppdatera elevens inställda ålder = ålder + 1 ; välj * från student ; radera från elev där namn = 'philip' ;
|
En annan egenskap hos QUEL var ett inbyggt system för att flytta poster en-masse in i och ut ur systemet. Tänk på det här kommandot:
kopiera elev ( namn=c0, komma=d1, ålder=c0, komma=d1, kön=c0, komma=d1, adress=c0, nl=d1) till " /student.txt "
som skapar en kommaavgränsad fil med alla poster i elevtabellen. D1 indikerar en avgränsare, i motsats till en datatyp. Att ändra till
till ett från
vänder processen. Liknande kommandon finns i många SQL-system, men vanligtvis som externa verktyg, till skillnad från att vara interna i SQL-språket. Detta gör dem otillgängliga för lagrade procedurer.
QUEL har en extremt kraftfull aggregeringsförmåga. Aggregat kan kapslas och olika sammanslag kan ha oberoende bilistor och/eller restriktionssatser. Till exempel:
hämta ( a = count ( y . i by y . d där y . str = "ii*" eller y . str = "foo" ), b = max ( count ( y . i by y . d )))
Det här exemplet illustrerar en av de kanske mindre önskvärda egenskaperna hos QUEL, nämligen att alla strängjämförelser potentiellt är mönstermatchningar. y.str = "ii*"
matchar alla y.str-
värden som börjar med ii
. Däremot använder SQL =
för exakta matchningar, medan like
används när mönstermatchning krävs.
Se även
- D4 (programmeringsspråk) (en implementering av D)
- Relationell algebra
- Relationskalkyl
Vidare läsning
- CJ Date: A Critique of the SQL Database Language . SIGMOD Record 14(3): 8-54, 1984.