Presentation is loading. Please wait.

Presentation is loading. Please wait.

Relational Databases.  In week 1 we looked at the concept of a key, the primary key is a column/attribute that uniquely identifies the rest of the data.

Similar presentations


Presentation on theme: "Relational Databases.  In week 1 we looked at the concept of a key, the primary key is a column/attribute that uniquely identifies the rest of the data."— Presentation transcript:

1 Relational Databases

2  In week 1 we looked at the concept of a key, the primary key is a column/attribute that uniquely identifies the rest of the data in that given record.  No 2 rows can have the same PK value  Even if 2 students have the same name and date of birth, the unique studentid ensures that the database user can track the correct student.  A foreign key is a column /attribute in a table that relates specifically to the PK of another table, it is ‘imported’ from another source to provide a link.  In DBMS talk, this is known as referential integrity (a student cannot be given a mark in a subject that does not exist in the system  The FK enables all the related data to be accessed without having to hold the data in the foreign table.  A table does not have to have a FK and there is no limit on the number of FK’s it does have but they must correspond with a PK in a secondary table  The purpose of the keys are so that data can be related across tables without having to repeat it, this is the power of relational databases.

3 Select name, classtime, day From class, staffmember Where teacher = staffid;  The link between class and staffmember is on the teacher = staffid clause, the teacher is the FK to the staffmember table. Select distinct name, classtime, day From class, staffmember Where teacher = staffid;  The key word distinct will remove any duplicates from the list.

4 select sname, period, count(*) from subject natural join marks where mark >= 40 group by sname, period order by sname; The above code will list the name of a subject when it ran and the number of people who got more than 40% for that run. The data is pulled from 2 different tables (marks and subject) and there is a common column (subjectid) which will enable a natural join to take place

5  Not always possible to have a natural join  Staffmember and class do not have a natural join but have to be joined at the where clause level currently  Joins in the FROM clause are more effective to run but we cannot assume that there will always be a natural join possible  Move clause from WHERE clause to FROM clause via the explicit INNER join

6  The inner join places a combination of table A and table B into a temp table, then removes the unmatched records using the join predicate. (does a cartisian product join then filters the results)  Actual SQL implementations normally use other approaches where possible, since computing the Cartesian product is very inefficient.  SQL specifies two different ways to express joins  "explicit join notation", uses the keyword JOIN,  Equi join  Natural join  "implicit join notation". The implicit join notation lists the tables for joining in the FROM clause of a SELECT statement, using commas to separate them.

7 select sname, period, count(*) from subject join marks on (subject.subjectid = marks.subjectid) where mark >= 40 group by sname, period order by sname; Is the same as select sname, period, count(*) from subject natural join marks where mark >= 40 group by sname, period order by sname; Which is the same as select sname, period, count(*) From subject, marks Where mark > 40 And subject.subjectid = marks.subjectid group by sname, period order by sname; All 3 bits of SQL code perform the same query and will produce the same output, the nature of the join however is different in each statement

8  The join we have looked at so far is an inner join, this means that only matching records will be displayed, records on either side that have a null value will NOT be returned. The join SQL code we have used has not stipulated the type of join we are using but some syntax required you to explicitly state the type of join (inner) you are using select sname, period, count(*) from subject inner join marks using (subjectid) where mark >= 40 group by sname, period order by sname;  This code indicate the nature of the join and the shared attribute to join on

9 There are 3 members of staff who are in the staffmember table but do not have any classes associated with them, if staffmember and class are joined with an inner join the 3 staff will not be included in results because it is required that there is at least one matching record on each side of the join. SQL> select name, day, classtime 2 from staffmember join class on staffid = teacher ; Following records not included as the staff have no class records NAME STAFFID -------------------------------------------- Bertie Wooster 851 Glen Maxwell 811 Esme Lettitia 831

10  Efficiently joining tables in the SQL statement is something that challenges database-systems  Optimising effective execution  Inner joins operate commutatively and associative which in practice means that the user merely supplies a list of tables for joining and the join conditions and the DBMS has to determine the most effective way to perform the operation.  A query optimiser determines how to execute a query containing joins. A query optimizer has two basic freedoms:  Join order: The order in which the system joins tables does not change the final result-set of the query. However, join-order does have an enormous impact on the ‘cost’ of the join operation.  Join method: Given two tables and a join condition, multiple algorithms can be used, which algorithm runs most efficiently depends on the sizes of the input tables, the number of rows from each table that match the join condition, and the operations required by the rest of the query. These issues will be looked at again later in the module when we consider the database administration side of databases

11  The following code retrieves the details for Tim Rose, re-write the code joining in the FROM clause rather than the WHERE clause select name, classtime, room from class, staffmember where name = 'Tim Rose' and teacher = staffid; select name, day, classtime from staffmember join class on staffid = teacher Where name = ‘Tim Rose’

12 It is possible to join multiple tables using the join syntax, the tables need to be ‘chained’ to each other by the join clauses select classtime, room, sname from staffmember join class on staffid = teacher join subject on class.subjectid = subject.subjectid where name = 'Tim Rose'; CLASSTIME ROOM SNAME ---------- --------------- ------------------------------ 11am Elec Eng G25 Digital Systems Structures 11am Elec Eng G25 Concurrent Computing 11am Elec Eng G25 Digital Systems Structures 11am Elec Eng G25 Artificial Intelligence Staffmember joins to class which in turns joins to subject.

13 select stuname, sname, mark from student, marks, subject Where student.studentid = marks.studentid and marks.subjectid = subject.subjectid and mark < 40; Re-write the SQL query above using explicit join select stuname, sname, mark from student join marks on student.studentid = marks.studentid join subject on subject.subjectid = marks.subjectid where mark < 40;


Download ppt "Relational Databases.  In week 1 we looked at the concept of a key, the primary key is a column/attribute that uniquely identifies the rest of the data."

Similar presentations


Ads by Google