The main application of relational algebra is to provide a theoretical foundation for relational databases, particularly query languages for such databases, chief among which is SQL. Relational databases store tabular data represented as relations. Queries over relational databases often likewise return tabular data represented as relations.
The main purpose of relational algebra is to define operators that transform one or more input relations to an output relation. Given that these operators accept relations as input and produce relations as output, they can be combined and used to express complex queries that transform multiple input relations (whose data are stored in the database) into a single output relation (the query results).
Unary operators accept a single relation as input. Examples include operators to filter certain attributes (columns) or tuples (rows) from an input relation. Binary operators accept two relations as input and combine them into a single output relation. For example, taking all tuples found in either relation (union), removing tuples from the first relation found in the second relation (difference), extending the tuples of the first relation with tuples in the second relation matching certain conditions, and so forth.
Introduction
Relational algebra received little attention outside of pure mathematics until the publication of E.F. Codd's relational model of data in 1970. Codd proposed such an algebra as a basis for database query languages.
Relational algebra operates on homogeneous sets of tuples where we commonly interpret m to be the number of rows of tuples in a table and n to be the number of columns. All entries in each column have the same type.
A relation also has a unique tuple called the header which gives each column a unique name or attribute inside the relation). Attributes are used in projections and selections.
The relational algebra uses set union, set difference, and Cartesian product from set theory, and adds additional constraints to these operators to create new ones.
For set union and set difference, the two relations involved must be union-compatible—that is, the two relations must have the same set of attributes. Because set intersection is defined in terms of set union and set difference, the two relations involved in set intersection must also be union-compatible.
For the Cartesian product to be defined, the two relations involved must have disjoint headers—that is, they must not have a common attribute name.
In addition, the Cartesian product is defined differently from the one in set theory in the sense that tuples are considered to be "shallow" for the purposes of the operation. That is, the Cartesian product of a set of n-tuples with a set of m-tuples yields a set of "flattened" (n + m)-tuples (whereas basic set theory would have prescribed a set of 2-tuples, each containing an n-tuple and an m-tuple). More formally, R × S is defined as follows:
The cardinality of the Cartesian product is the product of the cardinalities of its factors, that is, |R × S| = |R| × |S|.
A projection (Π) is a unary operation written as where is a set of attribute names. The result of such projection is defined as the set that is obtained when all tuples in R are restricted to the set .
Note: when implemented in SQL standard the "default projection" returns a multiset instead of a set, and the Π projection to eliminate duplicate data is obtained by the addition of the DISTINCT keyword.
To obtain a listing of all friends or business associates in an address book, the selection might be written as . The result would be a relation containing every attribute of every unique record where isFriend is true or where isBusinessContact is true.
A rename (ρ) is a unary operation written as where the result is identical to R except that the b attribute in all tuples is renamed to an a attribute. This is commonly used to rename the attribute of a relation for the purpose of a join.
To rename the "isFriend" attribute to "isBusinessContact" in a relation, might be used.
There is also the notation, where R is renamed to x and the attributes are renamed to .[2]
"Natural join" redirects here. For the SQL implementation, see Natural join (SQL).
"⋈" redirects here. For the band sometimes represented by this symbol, see The Armed.
Natural join (⨝) is a binary operator that is written as (R ⨝ S) where R and S are relations.[a] The result of the natural join is the set of all combinations of tuples in R and S that are equal on their common attribute names. For an example consider the tables Employee and Dept and their natural join:[citation needed]
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Sales
Mary
1257
Human Resources
Dept
DeptName
Manager
Finance
George
Sales
Harriet
Production
Charles
Employee ⨝ Dept
Name
EmpId
DeptName
Manager
Harry
3415
Finance
George
Sally
2241
Sales
Harriet
George
3401
Finance
George
Harriet
2202
Sales
Harriet
Note that neither the employee named Mary nor the Production department appear in the result. Mary does not appear in the result because Mary's Department, "Human Resources", is not listed in the Dept relation and the Production department does not appear in the result because there are no tuples in the Employee relation that have "Production" as their DeptName attribute.
This can also be used to define composition of relations. For example, the composition of Employee and Dept is their join as shown above, projected on all but the common attribute DeptName. In category theory, the join is precisely the fiber product.
The natural join is arguably one of the most important operators since it is the relational counterpart of the logical AND operator. Note that if the same variable appears in each of two predicates that are connected by AND, then that variable stands for the same thing and both appearances must always be substituted by the same value (this is a consequence of the idempotence of the logical AND). In particular, natural join allows the combination of relations that are associated by a foreign key. For example, in the above example a foreign key probably holds from Employee.DeptName to Dept.DeptName and then the natural join of Employee and Dept combines all employees with their departments. This works because the foreign key holds between attributes with the same name. If this is not the case such as in the foreign key from Dept.Manager to Employee.Name then these columns must be renamed before taking the natural join. Such a join is sometimes also referred to as an equijoin.
More formally the semantics of the natural join are defined as follows:
1
where Fun(t) is a predicate that is true for a relationt (in the mathematical sense) ifft is a function (that is, t does not map any attribute to multiple values). It is usually required that R and S must have at least one common attribute, but if this constraint is omitted, and R and S have no common attributes, then the natural join becomes exactly the Cartesian product.
The natural join can be simulated with Codd's primitives as follows. Assume that c1,...,cm are the attribute names common to R and S, r1,...,rn are the
attribute names unique to R and s1,...,sk are the
attribute names unique to S. Furthermore, assume that the attribute names x1,...,xm are neither in R nor in S. In a first step the common attribute names in S can be renamed:
2
Then we take the Cartesian product and select the tuples that are to be joined:
3
Finally we take a projection to get rid of the renamed attributes:
4
θ-join and equijoin
Consider tables Car and Boat which list models of cars and boats and their respective prices. Suppose a customer wants to buy a car and a boat, but she does not want to spend more money for the boat than for the car. The θ-join (⋈θ) on the predicate CarPrice ≥ BoatPrice produces the flattened pairs of rows which satisfy the predicate. When using a condition where the attributes are equal, for example Price, then the condition may be specified as Price=Price
or alternatively (Price) itself.
Car
CarModel
CarPrice
CarA
20,000
CarB
30,000
CarC
50,000
Boat
BoatModel
BoatPrice
Boat1
10,000
Boat2
40,000
Boat3
60,000
CarModel
CarPrice
BoatModel
BoatPrice
CarA
20,000
Boat1
10,000
CarB
30,000
Boat1
10,000
CarC
50,000
Boat1
10,000
CarC
50,000
Boat2
40,000
In order to combine tuples from two relations where the combination condition is not simply the equality of shared attributes it is convenient to have a more general form of join operator, which is the θ-join (or theta-join). The θ-join is a binary operator that is written as or where a and b are attribute names, θ is a binary relational operator in the set {<, ≤, =, ≠, >, ≥}, υ is a value constant, and R and S are relations. The result of this operation consists of all combinations of tuples in R and S that satisfy θ. The result of the θ-join is defined only if the headers of S and R are disjoint, that is, do not contain a common attribute.
The simulation of this operation in the fundamental operations is therefore as follows:
R ⋈θS = σθ(R × S)
In case the operator θ is the equality operator (=) then this join is also called an equijoin.
Note, however, that a computer language that supports the natural join and selection operators does not need θ-join as well, as this can be achieved by selection from the result of a natural join (which degenerates to Cartesian product when there are no shared attributes).
In SQL implementations, joining on a predicate is usually called an inner join, and the on keyword allows one to specify the predicate used to filter the rows. It is important to note: forming the flattened Cartesian product then filtering the rows is conceptually correct, but an implementation would use more sophisticated data structures to speed up the join query.
Semijoin
The left semijoin (⋉ and ⋊) is a joining similar to the natural join and written as where and are relations.[b] The result is the set of all tuples in for which there is a tuple in that is equal on their common attribute names. The difference from a natural join is that other columns of do not appear. For example, consider the tables Employee and Dept and their semijoin:[citation needed]
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Production
Dept
DeptName
Manager
Sales
Sally
Production
Harriet
Employee ⋉ Dept
Name
EmpId
DeptName
Sally
2241
Sales
Harriet
2202
Production
More formally the semantics of the semijoin can be defined as
follows:
where is as in the definition of natural join.
The semijoin can be simulated using the natural join as follows. If are the attribute names of , then
Since we can simulate the natural join with the basic operators it follows that this also holds for the semijoin.
In Codd's 1970 paper, semijoin is called restriction.[1]
Antijoin
The antijoin (▷), written as R ▷ S where R and S are relations,[c] is similar to the semijoin, but the result of an antijoin is only those tuples in R for which there is no tuple in S that is equal on their common attribute names.[citation needed]
For an example consider the tables Employee and Dept and their
antijoin:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Production
Dept
DeptName
Manager
Sales
Sally
Production
Harriet
Employee ▷ Dept
Name
EmpId
DeptName
Harry
3415
Finance
George
3401
Finance
The antijoin is formally defined as follows:
R ▷ S = { t : t ∈ R ∧ ¬∃s ∈ S(Fun (t ∪ s))}
or
R ▷ S = { t : t ∈ R, there is no tuple s of S that satisfies Fun (t ∪ s)}
where Fun (t ∪ s) is as in the definition of natural join.
The antijoin can also be defined as the complement of the semijoin, as follows:
R ▷ S = R − R ⋉ S
5
Given this, the antijoin is sometimes called the anti-semijoin, and the antijoin operator is sometimes written as semijoin symbol with a bar above it, instead of ▷.
In the case where the relations have the same attributes (union-compatible), antijoin is the same as minus.
Division
The division (÷) is a binary operation that is written as R ÷ S. Division is not implemented directly in SQL. The result consists of the restrictions of tuples in R to the attribute names unique to R, i.e., in the header of R but not in the header of S, for which it holds that all their combinations with tuples in S are present in R.
Example
Completed
Student
Task
Fred
Database1
Fred
Database2
Fred
Compiler1
Eugene
Database1
Eugene
Compiler1
Sarah
Database1
Sarah
Database2
DBProject
Task
Database1
Database2
Completed ÷ DBProject
Student
Fred
Sarah
If DBProject contains all the tasks of the Database project, then the result of the division above contains exactly the students who have completed both of the tasks in the Database project.
More formally the semantics of the division is defined as follows:
R ÷ S = { t[a1,...,an] : t ∈ R ∧ ∀s ∈ S ( (t[a1,...,an] ∪ s) ∈ R) }
6
where {a1,...,an} is the set of attribute names unique to R and t[a1,...,an] is the restriction of t to this set. It is usually required that the attribute names in the header of S are a subset of those of R because otherwise the result of the operation will always be empty.
The simulation of the division with the basic operations is as follows. We assume that a1,...,an are the attribute names unique to R and b1,...,bm are the attribute names of S. In the first step we project R on its unique attribute names and construct all combinations with tuples in S:
T := πa1,...,an(R) × S
In the prior example, T would represent a table such that every Student (because Student is the unique key / attribute of the Completed table) is combined with every given Task. So Eugene, for instance, would have two rows, Eugene → Database1 and Eugene → Database2 in T.
EG: First, let's pretend that "Completed" has a third attribute called "grade". It's unwanted baggage here, so we must project it off always. In fact in this step we can drop "Task" from R as well; the multiply puts it back on.
T := πStudent(R) × S // This gives us every possible desired combination, including those that don't actually exist in R, and excluding others (eg Fred | compiler1, which is not a desired combination)
In U we have the possible combinations that "could have" been in R, but weren't.
EG: Again with projections — T and R need to have identical attribute names/headers.
U := T − πStudent,Task(R) // This gives us a "what's missing" list.
T
Student
Task
Fred
Database1
Fred
Database2
Eugene
Database1
Eugene
Database2
Sarah
Database1
Sarah
Database2
R a.k.a. Completed
Student
Task
Fred
Database1
Fred
Database2
Fred
Compiler1
Eugene
Database1
Eugene
Compiler1
Sarah
Database1
Sarah
Database2
U
aka
T − R
aka
what's missing
Student
Task
Eugene
Database2
So if we now take the projection on the attribute names unique to R
then we have the restrictions of the tuples in R for which not
all combinations with tuples in S were present in R:
V := πa1,...,an(U)
EG: Project U down to just the attribute(s) in question (Student)
V := πStudent(U)
V
Student
Eugene
So what remains to be done is take the projection of R on its
unique attribute names and subtract those in V:
W := πa1,...,an(R) − V
EG: W := πStudent(R) − V.
πStudent(R)
Student
Fred
Eugene
Sarah
V
Student
Eugene
W
aka
(πStudent(R) − V)
aka
desired result
Student
Fred
Sarah
Common extensions
In practice the classical relational algebra described above is extended with various operations such as outer joins, aggregate functions and even transitive closure.[3]
Whereas the result of a join (or inner join) consists of tuples formed by combining matching tuples in the two operands, an outer join contains those tuples and additionally some tuples formed by extending an unmatched tuple in one of the operands by "fill" values for each of the attributes of the other operand. Outer joins are not considered part of the classical relational algebra discussed so far.[4]
The operators defined in this section assume the existence of a null value, ω, which we do not define, to be used for the fill values; in practice this corresponds to the NULL in SQL. In order to make subsequent selection operations on the resulting table meaningful, a semantic meaning needs to be assigned to nulls; in Codd's approach the propositional logic used by the selection is extended to a three-valued logic, although we elide those details in this article.
Three outer join operators are defined: left outer join, right outer join, and full outer join. (The word "outer" is sometimes omitted.)
Left outer join
The left outer join (⟕) is written as R ⟕ S where R and S are relations.[d] The result of the left outer join is the set of all combinations of tuples in R and S that are equal on their common attribute names, in addition (loosely speaking) to tuples in R that have no matching tuples in S.[citation needed]
For an example consider the tables Employee and Dept and their left outer join:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Sales
Tim
1123
Executive
Dept
DeptName
Manager
Sales
Harriet
Production
Charles
Employee ⟕ Dept
Name
EmpId
DeptName
Manager
Harry
3415
Finance
ω
Sally
2241
Sales
Harriet
George
3401
Finance
ω
Harriet
2202
Sales
Harriet
Tim
1123
Executive
ω
In the resulting relation, tuples in S which have no common values in common attribute names with tuples in R take a null value, ω.
Since there are no tuples in Dept with a DeptName of Finance or Executive, ωs occur in the resulting relation where tuples in Employee have a DeptName of Finance or Executive.
Let r1, r2, ..., rn be the attributes of the relation R and let {(ω, ..., ω)} be the singleton
relation on the attributes that are unique to the relation S (those that are not attributes of R). Then the left outer join can be described in terms of the natural join (and hence using basic operators) as follows:
Right outer join
The right outer join (⟖) behaves almost identically to the left outer join, but the roles of the tables are switched.
The right outer join of relationsR and S is written as R ⟖ S.[e] The result of the right outer join is the set of all combinations of tuples in R and S that are equal on their common attribute names, in addition to tuples in S that have no matching tuples in R.[citation needed]
For example, consider the tables Employee and Dept and their right outer join:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Sales
Tim
1123
Executive
Dept
DeptName
Manager
Sales
Harriet
Production
Charles
Employee ⟖ Dept
Name
EmpId
DeptName
Manager
Sally
2241
Sales
Harriet
Harriet
2202
Sales
Harriet
ω
ω
Production
Charles
In the resulting relation, tuples in R which have no common values in common attribute names with tuples in S take a null value, ω.
Since there are no tuples in Employee with a DeptName of Production, ωs occur in the Name and EmpId attributes of the resulting relation where tuples in Dept had DeptName of Production.
Let s1, s2, ..., sn be the attributes of the relation S and let {(ω, ..., ω)} be the singleton
relation on the attributes that are unique to the relation R (those that are not attributes of S). Then, as with the left outer join, the right outer join can be simulated using the natural join as follows:
Full outer join
The outer join (⟗) or full outer join in effect combines the results of the left and right outer joins.
The full outer join is written as R ⟗ S where R and S are relations.[f] The result of the full outer join is the set of all combinations of tuples in R and S that are equal on their common attribute names, in addition to tuples in S that have no matching tuples in R and tuples in R that have no matching tuples in S in their common attribute names.[citation needed]
For an example consider the tables Employee and Dept and their full outer join:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Sales
Tim
1123
Executive
Dept
DeptName
Manager
Sales
Harriet
Production
Charles
Employee ⟗ Dept
Name
EmpId
DeptName
Manager
Harry
3415
Finance
ω
Sally
2241
Sales
Harriet
George
3401
Finance
ω
Harriet
2202
Sales
Harriet
Tim
1123
Executive
ω
ω
ω
Production
Charles
In the resulting relation, tuples in R which have no common values in common attribute names with tuples in S take a null value, ω. Tuples in S which have no common values in common attribute names with tuples in R also take a null value, ω.
The full outer join can be simulated using the left and right outer joins (and hence the natural join and set union) as follows:
R ⟗ S = (R ⟕ S) ∪ (R ⟖ S)
Operations for domain computations
There is nothing in relational algebra introduced so far that would allow computations on the data domains (other than evaluation of propositional expressions involving equality). For example, it is not possible using only the algebra introduced so far to write an expression that would multiply the numbers from two columns, e.g. a unit price with a quantity to obtain a total price. Practical query languages have such facilities, e.g. the SQL SELECT allows arithmetic operations to define new columns in the result SELECTunit_price*quantityAStotal_priceFROMt, and a similar facility is provided more explicitly by Tutorial D's EXTEND keyword.[5] In database theory, this is called extended projection.[6]: 213
Aggregation
Furthermore, computing various functions on a column, like the summing up of its elements, is also not possible using the relational algebra introduced so far. There are five aggregate functions that are included with most relational database systems. These operations are Sum, Count, Average, Maximum and Minimum. In relational algebra the aggregation operation over a schema (A1, A2, ... An) is written as follows:
where each Aj', 1 ≤ j ≤ k, is one of the original attributes Ai, 1 ≤ i ≤ n.
The attributes preceding the g are grouping attributes, which function like a "group by" clause in SQL. Then there are an arbitrary number of aggregation functions applied to individual attributes. The operation is applied to an arbitrary relation r. The grouping attributes are optional, and if they are not supplied, the aggregation functions are applied across the entire relation to which the operation is applied.
Let's assume that we have a table named Account with three columns, namely Account_Number, Branch_Name and Balance. We wish to find the maximum balance of each branch. This is accomplished by Branch_NameGMax(Balance)(Account). To find the highest balance of all accounts regardless of branch, we could simply write GMax(Balance)(Account).
Grouping is often written as Branch_NameɣMax(Balance)(Account) instead.[6]
Transitive closure
Although relational algebra seems powerful enough for most practical purposes, there are some simple and natural operators on relations that cannot be expressed by relational algebra. One of them is the transitive closure of a binary relation. Given a domain D, let binary relation R be a subset of D×D. The transitive closure R+ of R is the smallest subset of D×D that contains R and satisfies the following condition:
It can be proved using the fact that there is no relational algebra expression E(R) taking R as a variable argument that produces R+.[7]
SQL however officially supports such fixpoint queries since 1999, and it had vendor-specific extensions in this direction well before that.
Implementations
The first query language to be based on Codd's algebra was Alpha, developed by Dr. Codd himself. Subsequently, ISBL was created, and this pioneering work has been acclaimed by many authorities[8] as having shown the way to make Codd's idea into a useful language. Business System 12 was a short-lived industry-strength relational DBMS that followed the ISBL example.
In 1998 Chris Date and Hugh Darwen proposed a language called Tutorial D intended for use in teaching relational database theory, and its query language also draws on ISBL's ideas.[9] Rel is an implementation of Tutorial D. Bmg is an implementation of relational algebra in Ruby which closely follows the principles of Tutorial D and The Third Manifesto.[10]
Even the query language of SQL is loosely based on a relational algebra, though the operands in SQL (tables) are not exactly relations and several useful theorems about the relational algebra do not hold in the SQL counterpart (arguably to the detriment of optimisers and/or users). The SQL table model is a bag (multiset), rather than a set. For example, the expression is a theorem for relational algebra on sets, but not for relational algebra on bags.[6]
^Silberschatz, Abraham; Henry F. Korth; S. Sudarshan (2020). Database system concepts (Seventh ed.). New York. p. 56. ISBN978-0-07-802215-9. OCLC1080554130.{{cite book}}: CS1 maint: location missing publisher (link)
Query Optimization This paper is an introduction into the use of the relational algebra in optimizing queries, and includes numerous citations for more in-depth study.
Danny Jozal (lahir di Surabaya, Jawa Timur 12 Februari 1947) merupakan Deputi President Director BASF Indonesia sejak tahun 1986 dengan perjalanan karier yang terbilang unik. Danny mulai bekerja pada tahun 1972 menjadi seorang canvasser yang bertugas mengantarkan soft drink ke toko-toko saat masih duduk di bangku kuliah. Pekerjaan sampingan lain yang pernah dikerjakannya adalah menjadi salesman di sebuah perusahaan rokok. Dia memiliki sifat yang tidak bisa diam, Dia bersama dua rekannya mempr...
Quarantine in Malaysia This article's lead section may be too short to adequately summarize the key points. Please consider expanding the lead to provide an accessible overview of all important aspects of the article. (June 2021) Malaysia Movement Control OrderPart of the COVID-19 pandemic in MalaysiaPolice checkpoint in Shah Alam, 22 March 2020Date18 March 2020 (2020-03-18) – 1 November 2021 (2021-11-01) (1 year, 7 months and 2 weeks)LocationMal...
Spanish cardinal In this Spanish name, the first or paternal surname is Blásquez and the second or maternal family name is Pérez. His EminenceRicardo BlázquezCardinal, Archbishop Emeritus of ValladolidChurchCatholic ChurchArchdioceseValladolidAppointed13 March 2010Installed17 April 2010Term ended17 June 2022PredecessorBraulio Rodríguez PlazaSuccessorLuis Javier Argüello GarcíaOther post(s)President of the Spanish Episcopal Conference (2014–2020)Cardinal Priest of Santa Maria i...
Alfred NewtonLahir(1829-06-11)11 Juni 1829GenevaMeninggal7 Juni 1907(1907-06-07) (umur 77)Cambridge Alfred Newton FRS (Genewa, 11 Juni 1829 – Cambridge, 7 Juni 1907) adalah seorang ahli zoologi dan ahli ornitologi asal Inggris. Newton adalah Profesor Anatomi Komperatif di Universitas Cambridge dari 1866 sampai 1907. Referensi Birkhead, Tim R.; Gallivan, Peter T. (2012). Alfred Newton's contribution to ornithology: a conservative quest for facts rather than grand theories. Ibis. 154: 8...
Finnish politician This biography of a living person needs additional citations for verification. The reason given is: newly added info needs sources in some places. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Mauri Pekkarinen – news · newspapers · books · scholar · JS...
جزء من سلسلة مقالات حولالتطور مواضيع رئيسيةمدخل إلى التطور نظرية التطور سلف مشترك أدلة السلف المشترك عمليات ونتائجوراثيات سكانية · تنوع جيني طفرة · تكيف · اصطفاء طبيعي انحراف وراثي · انسياب المورثات انتواع · تشعب تطوري · تشعب تكيفي تعاون · تطور مشتر...
My Dad My Hero atau Kahraman Babam adalah sebuah seri drama televisi Turki tahun 2021 yang disutradarai oleh Osman Kaya. Seri tersebut dibintangi oleh Görkem Sevindik, Nilay Deniz, dan Ebrar Alya Demirbilek sebagai pemeran utama.[1] Sinopsis Uğur (Görkem Sevindik) merupakan seorang petugas pemadam kebakaran yang kehilangan istrinya dalam peristiwa kebakaran. Saat ini, ia hanya memiliki satu-satunya anak tercinta, Ömrüm (Ebrar Alya Demirbilek) yang kini ingin direnggut darinya. U�...
Grand Theft Auto: Liberty City Stories Publikasi 25 October 2005 PlayStation PortableNA: 25 October 2005PAL: 4 November 2005PlayStation 2NA: 6 June 2006EU: 22 June 2006PlayStation 3NA: 2 April 2013EU: 3 April 2013iOSWW: 17 December 2015AndroidWW: 11 February 2016Fire OSWW: 10 March 2016 GenreAksi-petualanganKarakterAvery Carrington, Phil Cassidy, Salvatore Leone, Toni Cipriani, Donald Love, Ma Cipriani dan Maria Latore Latar tempatGrand Theft Auto 3D universe Bahasa Daftar Inggris 60 Karakter...
Official state car used by Franklin D Roosevelt FDR's 1939 Lincoln K series Presidential Limousine The Sunshine Special is a modified 1939 Lincoln Model K limousine that was used as the official state car by United States presidents Franklin D. Roosevelt and Harry Truman. Said to have been the First Presidential car to acquire its own personality, and most closely associated with FDR,[1] the V12 powered four-door convertible was specifically modified for the president by coachbuilder ...
Suntar-Khayata RangeСунтар-ХаятаView of the range in JuneHighest pointPeakMus-KhayaElevation2,959 m (9,708 ft)GeographySuntar-Khayata RangeLocation in the Far Eastern Federal District, Russia CountryRussiaRegionSakha/Khabarovsk KraiRange coordinates62°36′00″N 140°53′00″E / 62.60000°N 140.88333°E / 62.60000; 140.88333Parent rangeEast Siberian SystemGeologyOrogenyAlpine orogenyAge of rockLate JurassicType of rockVolcanic rocks, grani...
Deutsches Afrikakorps Gruppe CrüwellBefehlshaber der deutschen Truppen in LybienStemma Descrizione generaleAttiva12 febbraio 1941[1][2] – 13 maggio 1943 Nazione Germania ServizioHeer TipoCorpo d'armataCorpo di spedizione Guarnigione/QGTripoli, Libia SoprannomeDAK Battaglie/guerreSeconda guerra mondiale Campagna del Nordafrica Operazione Sonnenblume Battaglia di Ain el-Gazala Operazione Battleaxe Seconda battaglia di El Alamein Campagna di Tunisia Parte dimar. 1941: Obe...
Pour les articles homonymes, voir Winwood. Steve WinwoodBiographieNaissance 12 mai 1948 (75 ans)BirminghamNom dans la langue maternelle Stevie WinwoodNom de naissance Stephen Lawrence WinwoodNationalité britanniqueDomiciles Lower Dean Manor (d), NashvilleActivités Guitariste, artiste d'enregistrement, auteur-compositeur, chanteur, musicienPériode d'activité depuis 1963Père Lawrence Winwood (d)Mère Lilian Saunders (d)Fratrie Muff WinwoodConjoint Eugenia Winwood (d) (depuis 1987)Enf...
British ocean liner that was sunk in 1915 This article is about the British ship. For her sinking, see Sinking of the RMS Lusitania. For other ships with the same name, see List of ships named Lusitania. Lusitania arriving in New York City in 1907 History United Kingdom NameLusitania NamesakeLusitania Owner Cunard Line Port of registryLiverpool RouteLiverpool – Queenstown – New York BuilderJohn Brown & Co, Clydebank Yard number367 Laid down17 August 1904 Launched7 June 1906[1]...
2022 UK local government election Map of the results The 2022 Rugby Borough Council election took place on 5 May 2022 to elect members of Rugby Borough Council in England. This was on the same day as other local elections.[1] Results summary 2022 Rugby Borough Council election[2][3] Party This election Full council This election Seats Net Seats % Other Total Total % Votes Votes % +/− Conservative 6 2 42.9 17 23 54.8 9,970 37.9 -10.7 Labou...
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Dallas (1978 TV series) season 13 – news · newspapers · books · scholar · JSTOR (October 2012) (Learn how and when to remove this message) Season of television series DallasSeason 13DVD coverNo. of episodes27ReleaseOriginal networkCBSOriginal releaseSeptember ...
1864 battle of the American Civil War Not to be confused with Battle of New Market Heights. Battle of New MarketPart of the American Civil WarCadets at New MarketDateMay 15, 1864 (1864-05-15)LocationShenandoah County, Virginia38°39′43″N 78°40′14″W / 38.66194°N 78.67056°W / 38.66194; -78.67056Result Confederate victoryBelligerents United States Confederate StatesCommanders and leaders Franz Sigel John C. BreckinridgeStrength 6,275[1] 4...
Map of Area A, Palestinian localities in Area B and Palestinian neighborhoods in East Jerusalem. The following is a list of cities administered by the Palestinian National Authority. After the 1995 Interim Agreements, the Palestinian National Authority took control of civil affairs in the West Bank Palestinian enclaves, designated Areas A and B, where most Palestinian population centers are located (and excluding those within the municipal borders of East Jerusalem). Israel Defense Forces ar...
New Zealand opera singer Dame Kiri Te KanawaONZ CH DBE ACTe Kanawa in 2013BornClaire Mary Teresa Rawstron (1944-03-06) 6 March 1944 (age 80)Gisborne, New ZealandOccupationOpera singer (soprano)Years active1968–2017Spouse Desmond Park (m. 1967; div. 1997)Children2 Dame Kiri Jeanette Claire Te Kanawa,[1] ONZ, CH, DBE, AC (/ˈkɪri təˈkɑːnəwə/;[2] born Claire Mary Teresa Rawstron, 6 Marc...