Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSE3180 Summer 2005. Lect 4 / 1 Lecture No. 4. CSE3180 Summer 2005. Lect 4 / 2 Lecture 4 Structured Query Language - SQL Commands Statements Queries Views.

Similar presentations


Presentation on theme: "CSE3180 Summer 2005. Lect 4 / 1 Lecture No. 4. CSE3180 Summer 2005. Lect 4 / 2 Lecture 4 Structured Query Language - SQL Commands Statements Queries Views."— Presentation transcript:

1 CSE3180 Summer 2005. Lect 4 / 1 Lecture No. 4

2 CSE3180 Summer 2005. Lect 4 / 2 Lecture 4 Structured Query Language - SQL Commands Statements Queries Views

3 CSE3180 Summer 2005. Lect 4 / 3 PowerPoint Overheads The Overheads and other materials are accessible via http://www.csse.monash.edu.au/courseware/cse3180s Files should be saved and copied to A:\ or D:\ (filename) Then you can browse these via PowerPoint97/2000 or you can display them on the terminal screen (in the labs this will be Office 2000 software).

4 CSE3180 Summer 2005. Lect 4 / 4 Doctor’s Diary 1. I examined your patient today who is still under our car for physical therapy 2. Discharge status : Alive, but without my permission

5 CSE3180 Summer 2005. Lect 4 / 5 Objectives This lecture we will be looking at some of the aspects and functions of SQL - Structured Query Language, which provides the means of accessing data in a Relational Data Base. Microsoft Access provides users with a Graphics User Interface which in turn is translated into (non standard) SQL When you have developed part of your assignment in Access, run a query, and then display the query in its SQL statement form. You should be easily able to recognise the table names and the functions you have set up.

6 CSE3180 Summer 2005. Lect 4 / 6 Objectives - cont’d The objectives of this lecture are 1. To introduce the Data Definition and Data Manipulation components of SQL (Structured Query Language) as expressed in Oracle 2. To proceed through some of the SQL commands such as Select, From, Where, Having, Group By, Order By 3. To introduce other components such as Logical Operators, Arithmetic Operators, Sub-queries and Views

7 CSE3180 Summer 2005. Lect 4 / 7 Objectives As we work through the material and the examples, I will point out the functions or facilities which Access provides, and there will be some SQLServer2000 references.

8 Summer Semester 2000. Lect 4 / 8 SQL - Data Manipulation SQL Structured Query Language Originally designed and implemented by IBM research as the interface to a relational database. ANSI Standard 1986. SQL99 Standard released. (SQL3) A declarative language. The DBMS performs retrieval. A choice of access routines is made to optimise the query. SQL specifies syntax features for definition of the database tables, retrieval, and update

9 CSE3180 Summer 2005. Lect 4 / 9 Firstly some plusses for SQL. 1. SQL is the one industry standard for querying databases 2. Other ‘tools’ such as front enders don’t allow the developer to use all of the features of a database 3. Tools provided invariably do not exploit the full functionality of the underlying language 4. An SQL query in a client-server environment can be run in any application language and the result will always be the same An Introduction to SQL

10 CSE3180 Summer 2005. Lect 4 / 10 SQL requires a different approach from that used in other programming languages C, Fortran, Basic, Cobol, Pascal, PL/1 are procedural languages. They are characterised by statements which tell the executing computer what to do, and in a structured step-by-step way (even when loops are used). SQL is a declarative language - the computer is told what the user wants to achieve and the computer ‘decides’ on how to achieve this requirement, and correctly. The user sees the results. Procedural and Non-Procedural Languages

11 CSE3180 Summer 2005. Lect 4 / 11 SQL acts as a bridge between –the user –the database management system (DBMS) –the data tables –the transactions which involve the previous 3 items SQL also allows the ‘system’ to be administered and managed by a database administrator using the same format : procedural commands and data in tables. SQL can be embedded into source code (C, Cobol, C++, Java) Some SQL Basics

12 CSE3180 Summer 2005. Lect 4 / 12 SQL Some Variations Microsoft Access SQL is mostly ANSI-89 Level 1 compliant. (watch SQLServer as a replacement) Some ANSI SQL features are not implemented in Access SQL MS Access SQL includes reserved words and features not supported in ANSI SQL Some differences –Matching character MS Access ANSI SQL Single character ? _ Zero or more chars * % MS Access does not support COMMIT, GRANT, LOCK DISTINCT aggregate functions (eg SUM(DISTINCT att)

13 CSE3180 Summer 2005. Lect 4 / 13 Some Aspects of SQL The language consists of commands which allow users (with appropriate privileges) to –create database and table structures –perform data manipulations –perform database administration –query a database to extract information All relational Database Management Systems support SQL Many software vendors have developed extensions to the basic SQL command set

14 CSE3180 Summer 2005. Lect 4 / 14 Some Aspects of SQL SQL is a non-procedural language The user specifies what is to be done, but not how (which invariably irritates and confuses ‘normal’ software language developers Complex activities required to perform a process are the function of SQL, not detailed user code software Some of the advanced features of SQL include –stored procedures and triggers –conditions and looping

15 CSE3180 Summer 2005. Lect 4 / 15 Some Aspects of SQL It is not meant to ‘stand alone’ in the applications area It is not intended to create menus, special report forms, overlays, pop-ups,.. These features are normally supplied as vendor- enhancements It is a data management and extraction tool

16 CSE3180 Summer 2005. Lect 4 / 16 SQL and its ANSI Support There is a National Committee for Information Technology Standards - NCITS. There is a H2 Technical Committee which reports to NCITS on matters of database - and in particular database processing capabilities. This was previously ANSI X3H2 Successful recommendations are then proposed to and invariably accepted by the American National Standards Institute Another ‘working group’ is the Object Management Group (OMJ) which also has a Technical Committee These 2 Committees are responsible for the framework for co-operation between SQL and Java, and SQL and XML

17 CSE3180 Summer 2005. Lect 4 / 17 DDL - Data Definition CREATE (1) TABLE - define table name, attributes, types (2) VIEW - define user view of data (3) INDEX - create index on nominated attributes DROP (1) TABLE - delete table, attributes and values (2) VIEW - delete user view(s) (3) INDEX - delete index, indexes NOTE : Ingres and Oracle support the 'owner' concept. Hence only 'owners' can DROP nnnn Oracle 8i has an ALTER command to vary attribute characteristics. Ingres V6.4 does not support this feature

18 CSE3180 Summer 2005. Lect 4 / 18 DML - Data Manipulation Language Group 1 - Data Modification INSERT - Add a single row (interactive) - Perform successive INSERTS as a 'transaction ‘set’ - interactive COPY - From an external file to a database table - From a table to an external file UPDATE - Amend attribute values in rows DELETE - Delete rows of data from a table WHEN IN DOUBT, USE HELP or DOCUMENTATION.

19 CSE3180 Summer 2005. Lect 4 / 19 DML - Data Manipulation Language Group 2 DATA CONTROL - User control of transaction processing COMMIT - Commit or enable changes to the database ROLLBACK - Rollback and reprocess (or some other action) transaction which could not be COMMITTed. Group 3 DATA SECURITY - Authority over users - generally only available to the DBA GRANT - Allow access privileges to users (e.g. read,write,update to nominated tables or attribute values in tables) REVOKE - Revoke or cancel access privileges

20 CSE3180 Summer 2005. Lect 4 / 20 CREATE The Oracle based SQL syntax is : create table ( columnname format {,columnname format}) e.g. create table wages(name varchar2(10), identity number(2,0), Department varchar2(3), date_comm date); The same table but with more constraints :- create table wages(name varchar2(10) not null, identity number(2,0) not null, Department varchar2(3) not null, date_comm date) not null;

21 CSE3180 Summer 2005. Lect 4 / 21 Optional CREATE create table highincome as select name, salary from wages where salary > 75000; (attribute properties are copied to the new table) This creates an ‘extract file’ of only those entries from the table ‘wages’ where the salary is in excess of 75,000 (what currency ?) It is NOT automatically updated unless there is either (a) cascade update set with the referential integrity constraint or (b) a trigger and constraint is developed for the 2 tables

22 CSE3180 Summer 2005. Lect 4 / 22 INSERT This command allows data to be inserted, one row at a time, into an existing table Syntax: Insert into (list of attributes) values (list of values) Note: The list of attributes can be ignored providing the order of attribute values, and completeness of attribute instances, is as per the table list. example: insert into emp(name, sal, byear) values(‘Jones, Bill’, 45000,1967); or(see note) insert into emp values(‘Jones, Bill’, 45000,1968);

23 CSE3180 Summer 2005. Lect 4 / 23 INSERT - an extension The Insert command can also use a feature similar to create, i.e. use data from an existing table to populate another table. insert into job(jid, jtitle, lowsal, highsal) select job_no, title, lowsal, highsal) from newjob where title = ‘system analyst’); The attributes of the table ‘newjob’ comprise at least job_no,title, lowsal, highsal

24 CSE3180 Summer 2005. Lect 4 / 24 Oracle - SQLLOAD Inserting is a slow process, and the sqlload command allows for data to be bulk loaded form an existing text file (upload) to a database table. The Loader requires a Control File which names the file from which data is to be directed into tables names the table into which the ‘external’ data is to be loaded sets the attribute name(s), order and datatype provides additional files for logging, ‘bad’, and ‘discard’ data into these particular files. Also requires a Unix account (on the Monash system)

25 CSE3180 Summer 2005. Lect 4 / 25 Oracle Loader Some features : skip - starting point of load load - default of all log - log of records bad - log of discards Control file : details of loader file, name of Oracle table to load into, column and field specifications

26 CSE3180 Summer 2005. Lect 4 / 26 Import and Export These commands are available to the DBA and the application developers The commands make quick and dependable copies of Oracle data EXPORT makes a copy of data and data structures in a operating system file (external directory e.g. Unix) IMPORT reads file created by Export and places data and data structures into Oracle database tables Their uses are: –backup and recovery –moving data between instances of Oracle –moving data between tablespaces

27 CSE3180 Summer 2005. Lect 4 / 27 Copy There are a number of forms associated with ‘COPY’ 1. Copying data from 1 database to another remote to local local to remote remote to remote 2.Copy data from one table to another (single database) Copy data to one table from another a sample: copy from rsimpson@cse2180 (to the current database) create empcopy2 using select * from user.dept

28 CSE3180 Summer 2005. Lect 4 / 28 Access Import MS-Access offers an Import function which directs data from others sources (e.g. other Access databases, Excel, and various other sources such as SQL server) to an Access database. These sources can be local or remote. This serves the same purpose which is to use (or reuse) existing data and bulk copy to a target. Error messages (mismatches, data missing, data type mismatch etc) are generated as a by product of the process. The target database table (or tables) must be compatible with the source ( or is that vice - versa ?)

29 CSE3180 Summer 2005. Lect 4 / 29 Database Queries The commands which you have just seen are not normally available to ‘users’ as in Administration staff, Analytical staff, Review and Audit staff members. They are invariably restricted to Designers, Software Application and Database Administration members. The most frequent use of a database is associated with querying and retrieving data - and in many organisations these activities are embedded in host programs with menu options for individual user interaction - and here also there are privileges or restrictions on who can do what.

30 CSE3180 Summer 2005. Lect 4 / 30 General Form of a Query SELECT as a function applies algebra in developing a result table from a base table, (or tables). The result table may have 0 to n rows... The SELECT COMMAND is used to query data in the database.. Its syntax is : SELECT (select-list - attributes or derived data FROM (table name or names) WHERE (sets up conditions) GROUP BY (attribute names) HAVING (search-conditions) ORDER BY (attribute name or names )

31 CSE3180 Summer 2005. Lect 4 / 31 General Form of a Query SELECT and FROM are compulsory. Other clauses are optional but occur in the order shown HAVING is normally associated with GROUP BY

32 CSE3180 Summer 2005. Lect 4 / 32 Select Examples SELECT * FROM PART; Selects all column values for all rows SELECT PARTID, PNAME FROM PART WHERE PRICE BETWEEN 0.2 AND 1.0; Selects rows where price >=.2 and <= 1.0 SELECT PARTID, PNAME FROM PART WHERE PNAME IN ('NUT','BOLT'); Selects rows where pname has a value in the following list PART PartID PnamePrice QOH P1 Nut 0.2 20 P2 Bolt 1 40 P3 Caravan 5000 3

33 CSE3180 Summer 2005. Lect 4 / 33 SELECT SELECT pname, price*qoh AS Pvalue FROM PART WHERE price > 0.20 AND price * qoh > 30.0 ORDER BY pname desc; Result Table ---> PART PartID PnamePrice QOH P1 Nut 0.2 20 P2 Bolt 1 40 P3 Caravan 5000 3 Pname Pvalue Caravan 15000 Bolt 40

34 CSE3180 Summer 2005. Lect 4 / 34 Format of a Query Script SELECT (attribute list ) FROM (tables list) WHERE (conditions for joins) GROUP BY (selected groupings HAVING (condition for grouping) ORDER BY (Attribute(s) order [ Asc or Desc]

35 CSE3180 Summer 2005. Lect 4 / 35 Expressions in Select Arithmetic operators are + - ** * / Comparison operators are = != <> ^= > = <= Logical operators are AND OR NOT Parentheses may be used to alter order of evaluation - unary, **, * /, + - Wildcard % = any string of zero or more character _ = any one character [ ] = any of the characters enclosed in brackets A range of numeric, string, date and other functions are available.

36 CSE3180 Summer 2005. Lect 4 / 36 SELECT Vocabulary ALLAND ANY BETWEEN BYDISTINCT EXISTS FROM GROUPHAVING IS IN LIKENOT NULL OR ORDERSELECT UNION WHERE Arithmetic Operators + - * / Relational Operators = != = Logical Operators AND OR NOT Parentheses ( ) Special Operators BETWEEN IN LIKE NULL Existential Operator EXISTS

37 CSE3180 Summer 2005. Lect 4 / 37 SQL - Sample Database Schema MARRIAGE PM_NAME SPOUSE_NAME MAR_YR PM_AGE NR_CHILDREN MINISTRY MIN_NR PM_NAME PARTY DAY_COMM MTH_COMM YR_COMM PM_NAME BIRTH_YR YRS_SERVED DEATH_AGE STATE_BORN STATE_REP PRIME _MINISTER

38 CSE3180 Summer 2005. Lect 4 / 38 Arithmetic Operators List the name, birth year and year of death of each prime minister who was born in New South Wales. List in order of birth year. SELECT PM_NAME, BIRTH_YR, BIRTH_YR + DEATH_AGE FROM PRIME_MINISTER WHERE STATE_BORN = ‘NSW’ ORDER BY BIRTH_YR; PM_NAME BIRTH_YR BIRTH_YR + DEATH_AGE Barton E 1849 1920 Page E C G 1880 1961 Chifley J 1885 1951 Holt H E 1908 1967 McMahon W 1908 ? Whitlam E G 1916 ?

39 CSE3180 Summer 2005. Lect 4 / 39 Logical Operators Which prime ministers were born in Victoria before the turn of the century? SELECT PM_NAME, BIRTH_YR, STATE_BORN FROM PRIME_MINISTER WHERE STATE_BORN=‘VIC’ AND BIRTH_YR < 1900; PM_NAME BIRTH_YR STATE_BORN Deakin A 1856 VIC Bruce S M 1883 VIC Scullin J H 1876 VIC Menzies R G 1894 VIC Curtin J 1885 VIC

40 CSE3180 Summer 2005. Lect 4 / 40 Combining Logical Operators Which prime ministers were born in NSW and then represented Victoria or have simply not served less than two years? SELECT PM_NAME, STATE_BORN, STATE_REP, YRS_SERVED FROM PRIME _MINISTER WHERE STATE_REP = ‘VIC’ AND STATE_BORN = ‘NSW’ OR NOT YRS_SERVED 1.99) PM_NAME STATE_BORN STATE_REP YRS_SERVED Holt H E NSW VIC 1.88 Gorton J G VIC VIC 3.17 Whitlam E G NSW NSW 2.92 Fraser J M VIC VIC 7.33

41 CSE3180 Summer 2005. Lect 4 / 41 Select Examples - ‘PART’ table SELECT PNAME FROM PART WHERE QOH IS NULL; Selects those rows where qoh has a null value (is this different from a 0 value ?) SELECT * FROM PART WHERE PNAME LIKE '_ _T' or PNAME LIKE '%LT'; Selects rows where pname has three letters the last of which is a T or PNAME ends in LT And the answer to the question above is ‘Definitely YES’

42 CSE3180 Summer 2005. Lect 4 / 42 Use of COUNT and Distinct operators How many Liberal prime ministers were commissioned between 1970 and 1980? SELECT ‘Liberal PMs’, COUNT(*), COUNT(DISTINCT PM_NAME) FROM MINISTRY WHERE PARTY = ‘Liberal’ AND YR_COMM BETWEEN 1970 AND 1980; COUNT(*) COUNT(DISTINCT PM_NAME) Liberal PMs 5 2

43 CSE3180 Summer 2005. Lect 4 / 43 UNION Operator Normally used with the SELECT command to form a single table from two or more tables. This can be a real or virtual table. The attributes used in a UNION must be identical - in data type and size. example: create table names as select name from master union select newnames from newmaster;

44 CSE3180 Summer 2005. Lect 4 / 44 Union Assume that the following ‘Names’ data is contained in 2 tables LongtimeProspectAdah Talbot Dick JonesDory Kenson Donald Rollo Elbert Talbot Elbert Talbot George Phepps George OscarJed HopkinsPat Lavay Peter LawsonTed Butcher Wilfred Lowell (8 names) (8 names)

45 CSE3180 Summer 2005. Lect 4 / 45 Union The statement select name from longtime union select name from prospect; would give this result Adah Talbot Dick Jones Donald Rollo Dory Kenson Elbert Talbot George Oscar George Phepps note that there are NO duplicates Jed Hopkins Pat Lavay Peter Lawson Ted Butcher Wilfred Lowell (12 names)

46 CSE3180 Summer 2005. Lect 4 / 46 UNION Operator - Special Case PART PartID Pname Price QOH P1 Nut 0.2 21 P2 Bolt 1 40 P3 Caravan 5000 3 SELECT pname, 'q1' AS Query FROM PART WHERE QOH < 22 UNION SELECT pname, 'q2' AS Query FROM PART WHERE QOH > 20; PnameQuery Nut q1 Caravan q1 Nut q2 Bolt q2

47 CSE3180 Summer 2005. Lect 4 / 47 DELETE DELETE FROM tablename [corr-name] [ WHERE search-condition ] Delete one or many rows in a table. In general search-condition and qualification may not involve a sub select on tablename. DELETE FROM PART WHERE qoh < 4.00;

48 CSE3180 Summer 2005. Lect 4 / 48 UPDATE UPDATE tablename [corr-name] [ FROM tablename [corr-name] {, tablename [corr- name]}] SET colname = expression {, colname = expression} [ WHERE search_condition ] Replaces values of the specified columns with expression values for all rows satisfying the search condition. Expressions in the set clause may be constants or column values from the UPDATE tablename or FROM tablename UPDATE PART SET price = price * 1.1 WHERE price < 20;

49 CSE3180 Summer 2005. Lect 4 / 49 SET Functions A SET Function is one which operates on an entire column of values, not just a single value The SET functions supported are: Name Format(Result) Description count integer Count of Occurrences sum integer,float,money Summation avg float,money Average (sum/count) maxsame as the argument Maximum value minsame as the argument Minimum value

50 CSE3180 Summer 2005. Lect 4 / 50 Use of SET functions Set functions supported: avg count max min sum Set functions may not be used directly in a search condition SELECT count(PartID) AS Part_count, avg(price) AS Av_price, count(distinct price) AS Price_count FROM part; PART PartID PnamePrice QOH P1 Nut1.00 20 P2 Bolt1.00 20 P3 Caravan 5000 3 Part_countAv_price Price_count 31667.33 2

51 CSE3180 Summer 2005. Lect 4 / 51 Use of GROUP BY List the number of prime ministers from each party. SELECT PARTY, COUNT(*) FROM MINISTRY GROUP BY PARTY; PARTY COUNT(*) Country 3 Free Trade 1 Labor 15 Liberal 17 National Labor 1 Nationalist 3 Protectionist 4 United Australia 5

52 CSE3180 Summer 2005. Lect 4 / 52 Grouping by More than One Attribute Group prime ministers by their state born and by the state they represented. Give the numbers of prime ministers and the total numbers of years served. SELECT STATE_BORN, STATE_REP, COUNT(*), SUM(YRS_SERVED) FROM PRIME_MINISTER GROUP BY STATE_BORN, STATE_REP; STATE_BORN STATE_REP COUNT(*) SUM(YRS_SERVED) ? NSW 4 9.67 ? QLD 1 4.81 NSW NSW 5 11.83 NSW VIC 1 1.88 QLD QLD 2 0.13 TAS TAS 1 7.25 VIC VIC 7 42.69 VIC WA 1 3.75

53 CSE3180 Summer 2005. Lect 4 / 53 Grouping with the WHERE Clause For prime ministers born after 1900, list the number of prime ministers born in each state and the total number of years served. STATE_BORN COUNT(*) SUM(YRS_SERVED) WA 1 ? VIC 2 10.50 NSW 3 6.52 SELECT STATE_BORN, COUNT(*), SUM(YRS_SERVED) FROM PRIME_MINISTER WHERE BIRTH_YR > 1900 GROUP BY STATE_BORN;

54 CSE3180 Summer 2005. Lect 4 / 54 Grouping with the HAVING Clause For each state where the total years served by prime ministers born in that state is less than 10 years, give the number of prime ministers born in that state and the total number of years served. SELECT STATE_BORN, COUNT(*), SUM(YRS_SERVED) FROM PRIME_MINISTER GROUP BY STATE_BORN HAVING SUM(YRS_SERVED) < 10; STATE_BORN COUNT(*) SUM(YRS_SERVED) TAS 1 7.25 QLD 2 0.13

55 CSE3180 Summer 2005. Lect 4 / 55 Grouping with the HAVING Clause SELECT PartID, Count(SuppID) AS Supp_count, Sum(qty_supp) Total_qty FROM part_supplier GROUP BY PartID HAVING count(SuppID) > 1; PART_SUPPLIER PartID SuppID Qty_Supp P1 S1 20 P2 S1 30 P1 S2 20 P3 S2 10 PartID Supp_count Qty_Supp P1 240

56 CSE3180 Summer 2005. Lect 4 / 56 SubQueries Provide the facility of a query supplying dynamic values to another query for use in the search conditions of the main query. Example: Give the name and age at which death occurred for each Prime Minister who died at an age less than the average. List in order of age at death. SELECT PM_NAME, DEATH_AGE FROM PRIME_MINISTER WHERE DEATH_AGE < ( SELECT AVG(DEATH_AGE) FROM PRIME_MINISTER); The subquery computes the average age at death. The main query then selects the appropriate names and ages based on the values supplied by the sub-query. (in this case where the age at death is less than the average)

57 CSE3180 Summer 2005. Lect 4 / 57 SubQueries Give the name and death age for each prime minister who died at an age less than the average death age of all prime ministers. List in ascending order of death age. SELECT PM_NAME, DEATH_AGE FROM PRIME_MINISTER WHERE DEATH_AGE < (SELECT AVG(DEATH_AGE) FROM PRIME_MINISTER); ORDER BY DEATH AGE PM_NAME DEATH_AGE Holt H E 59 Lyons J A 60 Curtin J 60 Deakin A 63

58 CSE3180 Summer 2005. Lect 4 / 58 SubQueries Which prime minister died the oldest? Give the name and that age. SELECT PM_NAME, DEATH_AGE FROM PRIME_MINISTER WHERE DEATH_AGE = (SELECT MAX(DEATH_AGE) FROM PRIME_MINISTER); PM_NAME DEATH_AGE Forde F M 93

59 CSE3180 Summer 2005. Lect 4 / 59 SubQuery with IN Operator SELECT DISTINCT DEPUTY_NAME, PARTY FROM DEPUTY_PM WHERE DEPUTY_NAME IN (SELECT PM_NAME FROM PRIME_MINISTER); DEPUTY_NAME PARTY Chifley J B Labor Cook J Free Trade Cook Nationalist Deakin A Protectionist List the name and party of each deputy prime minister who was also a Prime Minister.

60 CSE3180 Summer 2005. Lect 4 / 60 SubQuery with ANY Operator PART_SUPPLIER SELECT PartID, SuppID, qty_supp FROM Part_supplier WHERE qty_supp > ANY (SELECT avg(qty_supp) FROM Part-supplier); PartID SuppID Qty_Supp P1 S1 20 P2 S1 30 P1 S2 20 P3 S2 10 PartIDSuppIDQty_Supp P2S130 P1S225

61 CSE3180 Summer 2005. Lect 4 / 61 Multiple Nested SubQueries Give the name and birth year of each prime minister who was commissioned after Bob Hawke had turned 21. Order by birth year. SELECT PM_NAME, BIRTH_YR FROM PRIME_MINISTER WHERE PM_NAME = ANY (SELECT PM_NAME FROM MINISTRY WHERE YR_COMM > (SELECT BIRTH_YR + 21 FROM PRIME_MINISTER WHERE PM_NAME = ‘Hawke R J L’)) AND PM_NAME <> ‘Hawke R J L’ ORDER BY BIRTH_YR;

62 CSE3180 Summer 2005. Lect 4 / 62 Result of Previous Query Give the name and birth year of each prime minister who was commissioned after Bob Hawke had turned 21. Order by birth year. PM_NAME BIRTH_YR Menzies R G1894 McEwan J1900 Holt H E 1908 McMahon W1908 Gorton J G1911 Whitlam E G1916

63 CSE3180 Summer 2005. Lect 4 / 63 A Search and Join Condition For each prime minister born in or after 1900, give the name, birth year and party. SELECT P.PM_NAME, BIRTH_YR, PARTY FROM PRIME_MINISTER P, MINISTRY M WHERE P.PM_NAME = M.PM_NAME AND BIRTH_YR >= 1900; PM_NAME BIRTH_YR PARTY Holt H E 1908 Liberal McEwen J 1900 Country Gorton J G 1911 Liberal

64 CSE3180 Summer 2005. Lect 4 / 64 SubQueries SELECT PartID, SuppID, qty_supp FROM Part_supplier WHERE qty_supp > ANY (SELECT avg(qty_supp) FROM Part-supplier); Subqueries may be used in a number of SQL statements. select, update, insert, delete, create table, create view, create permit, create integrity ·Subqueries may be nested to several levels. ·Special comparison operators are used in additional to =, <>, >, <, etc to indicate comparison to a set of values: IN equals one of the values returned by the subquery ANY true if any value returned meets the condition ALL true if all values returned meet the condition

65 CSE3180 Summer 2005. Lect 4 / 65 Correlated SubQueries PART_SUPPLIER ( it’s been updated ) SELECT PartID, SuppID, qty_supp FROM Part_supplier PS1 WHERE qty_supp > ANY (SELECT avg(qty_supp) FROM Part-supplier PS2 WHERE PS2.SuppID = PS1.SuppID); PartIDSuppID Qty_Supp P1S120 P2S130 P1S220 P2S220 P3S210 PartIDSuppID Qty_Supp P1S225 P2S130

66 CSE3180 Summer 2005. Lect 4 / 66 Correlated SubQueries SELECT PartID, SuppID, qty_supp FROM Part_supplier PS1 WHERE qty_supp > ANY (SELECT avg(qty_supp) FROM Part-supplier PS2 WHERE PS2.PartID = PS1.PartID); ·Subqueries (inner queries) are generally executed once and return a set of values to the outer query. ·With a correlated subquery, the outer query passes values to the inner query which then evaluates and returns a set of values to the outer query. This process repeats until the outer query terminates. Which suppliers are supplying more than the average for a part and how much of that part do they supply?

67 CSE3180 Summer 2005. Lect 4 / 67 Joining Tables DEP SELECT e.empid AS Number, e.ename AS Name, d.dname AS Department FROM emp e, dep d WHERE e.deptid = d.deptid; DeptID Dname D1 Tax D2 Pay D3 Leave EMP EmpIDEnameMgrIDDeptID E1RedE1D1 E2BlueE1D1 E3BrownE1D2 Number NameDepartment E1RedTax E2BlueTax E3BrownPay

68 CSE3180 Summer 2005. Lect 4 / 68 A Search and Join Condition For each prime minister born in or after 1900, give the name, birth year and party. SELECT P.PM_NAME, BIRTH_YR, PARTY FROM PRIME_MINISTER P, MINISTRY M WHERE P.PM_NAME = M.PM_NAME AND BIRTH_YR >= 1900; PM_NAME BIRTH_YR PARTY Holt H E 1908 Liberal McEwen J 1900 Country Gorton J G 1911 Liberal

69 CSE3180 Summer 2005. Lect 4 / 69 A Search and Join Condition For each prime minister born in or after 1900, give the name, birth year and party. SELECT DISTINCT P.PM_NAME, BIRTH_YR, PARTY FROM PRIME_MINISTER P, MINISTRY M WHERE P.PM_NAME = M.PM_NAME AND BIRTH_YR >= 1900; PM_NAME BIRTH_YR PARTY Fraser J M 1930 Liberal Gorton J G 1911 Liberal Hawke R J L 1929 Labor Holt H E 1908 Liberal McEwan J 1900 Country McMahon W 1908 Liberal Whitlam E G 1916 Labor With ‘distinct’

70 CSE3180 Summer 2005. Lect 4 / 70 Multiple Joins SELECT DISTINCT P.PM_NAME, BIRTH_YR, MAR_YR, PARTY FROM PRIME_MINISTER P, PM_MARRIAGE W, MINISTRY M WHERE P.PM_NAME = W.PM_NAME AND P.PM_NAME = M.PM_NAME AND BIRTH_YR >= 1900; PM_NAME BIRTH_YR MAR_YR PARTY Fraser J M 1930 1956 Liberal Gorton J G 1911 1935 Liberal Hawke R J L 1929 1956 Labor Holt H E 1908 1946 Liberal Give the name, birth year, party and the year of marriage of prime ministers born in or after 1900.

71 CSE3180 Summer 2005. Lect 4 / 71 Anatomy of the Previous Query WHERE P.PM_NAME = W.PM_NAME AND P.PM_NAME = M.PM_NAME AND BIRTH_YEAR >= 1900 ; SELECT DISTINCT P.PM_NAME, BIRTH_YR, MAR-YR, PARTY FROM PRIME_MINISTER P, PM_MARRIAGE W, MINISTRY M

72 CSE3180 Summer 2005. Lect 4 / 72 Joining a Table to Itself SELECT X.empno AS Number, X.ename AS Name, Y.ename AS Manager FROM emp X, emp Y WHERE X.mgrno = Y.empno; EMP EmpIDEname MgrIDDeptID E1Red E1D1 E2Blue E1D1 E3Brown E1D2 Number NameManager E1RedRed E2BlueRed E3BrownRed

73 CSE3180 Summer 2005. Lect 4 / 73 The Existential Operator This is a test for Existence (or non-existence) It differs from the IN operator in that it does not match a column or columns used in a correlated sub-query A query such as this : select name from workerskill group by name having count (skill) > 1; would give a list of workers who had more than 1 skill from a table named workerskill.

74 CSE3180 Summer 2005. Lect 4 / 74 The Existential Operator However if we attempt to find both the Name and Skill, the query will fail as the count is on the Primary Key, in this example, skill. There is only one Primary Key per row, and therefore the COUNT > 1 cannot exceed 1, and the query must fail. In using the Existential operator, we use a subterfuge and that is to have the query think that the inspected table occurs twice. (by correlation).

75 CSE3180 Summer 2005. Lect 4 / 75 The Existential Operator How is this done ? Let’s look at this ‘solution’. Select name, skill from workerskill ws where exists (select * from workerskill where ws.name = name group by name having count(skill) > 1); as an exercise, you might like to try a solution with the subquery such as ‘where name IN…... and then use a similar construction to the above

76 CSE3180 Summer 2005. Lect 4 / 76 The EXISTS Operator List the name, birth year and state represented of prime ministers who werealso deputy prime ministers. SELECT PM_NAME, BIRTH_YR, STATE_REP FROM PRIME_MINISTER WHERE EXISTS (SELECT * FROM DEPUTY_PM WHERE DEPUTY_NAME = PM_NAME); PM_NAME BIRTH_YR STATE_REP Deakin A 1856 VIC Cook J 1860 NSW Hughes W M 1862 NSW

77 CSE3180 Summer 2005. Lect 4 / 77 The NOT EXISTS Operator SELECT PM_NAME, BIRTH_YR, DEATH_AGE FROM PRIME_MINISTER P WHERE NOT EXISTS (SELECT * FROM PM_RECREATION WHERE PM_NAME = P.PM_NAME); PM_NAME STATE_REP DEATH_AGE Reid G H NSW 73 Fisher A QLD 66 Cook J NSW 87 Give the name, state represented and death age of each prime minister who has no recreational interests.

78 CSE3180 Summer 2005. Lect 4 / 78 Create View CREATE VIEW view-name [ (colname {, colname} ) ] AS subselect [WITH CHECK OPTION]. Creates a virtual table by storing the view definition in the catalog. ·Updates, inserts and deletes are not permitted if the subselect accesses more than one base table; the view was created from a non-updatable view; any columns in the view are derived. Additionally inserts are not allowed if the view contains a where clause with the check option or if any not null not default column of the base table is not part of the view. ·The with check option will not allow update of columns that are part of the view's where clause. ·Provide logical data independence when base table structure changes. ·Same data may be seen in different ways by different users. ·Users perception may be simplified and views provide automatic security.

79 CSE3180 Summer 2005. Lect 4 / 79 Create View Emp (empid, empname, salary_pa, deptid) Dept (deptid, deptname) CREATE VIEW empdetails (empid, empname, deptname, salary_fn) AS SELECT e.empid, e.empname, d.deptname, e.salary_pa / 26 FROM emp e, deptname d WHERE e.deptid = d.deptid;

80 CSE3180 Summer 2005. Lect 4 / 80 To Run a VIEW Select * from (View Name); Other conditions may be applied at runtime which to supplement those already contained in the View construct e.g. Select * from empdetails where deptname = ‘Finance’ ; There is an ‘updatable view’ process which is possible, but with much constraint. There is a paper on this at the website.


Download ppt "CSE3180 Summer 2005. Lect 4 / 1 Lecture No. 4. CSE3180 Summer 2005. Lect 4 / 2 Lecture 4 Structured Query Language - SQL Commands Statements Queries Views."

Similar presentations


Ads by Google