18 – Databases: Structured Query Language
Session Aims & Objectives To introduce the fundamental ideas involved in using Structured Query Language (SQL) Objectives, by end of this week’s sessions, you should be able to: Use SQL in your programs to create more complex record-sets
Example: People Database Person PersonID Surname Forenames Gender Phone eMail 1 Dixon Mark Yes 01752 232556 mark.dixon@plymouth.ac.uk 2 Smith John 01752 111111 john.smith@john.smith.ac.uk 3 Jones Sally No 01752 888888 sally.jones@sally.jones.com 4 Bloggs Fred 01752 123123 fred.bloggs@aaaaaa.com 5 Anderson Genny 01752 987987 genny@bbbb.cccc.com 6 Bob 01752 898898 bob.smith@bob-smith.com
Example: People v1 Display Surname of all people: <% Const cs = "…" <html> <head> <title></title> </head> <body> <% Const cs = "…" Dim rs rs = CreateObject("ADODB.Recordset") rs.Open("Person", cs) Do Until rs.EOF() Response.Write(rs.Fields("Surname").Value & "<br>") rs.MoveNext() Loop rs.Close() rs = Nothing %> </body> </html>
Example: People v2 Display Surname of Male people: <% <html> <head> <title></title> </head> <body> <% Const cs = "…" Dim rs rs = CreateObject("ADODB.Recordset") rs.Open("Person", cs) Do Until rs.EOF() If rs.Fields("Gender").Value = True Then Response.Write(rs.Fields("Surname").Value & "<br>") End If rs.MoveNext() Loop rs.Close() rs = Nothing %> </body> </html> Display Surname of Male people:
Example: People v3 Display Surname of Male people: SQL statement <% <html> <head> <title></title> </head> <body> <% Const cs = "…" Dim rs rs = CreateObject("ADODB.Recordset") rs.Open("SELECT * FROM Person WHERE Gender = True", cs) Do Until rs.EOF() Response.Write(rs.Fields("Surname").Value & "<br>") rs.MoveNext() Loop rs.Close() rs = Nothing %> </body> </html> SQL statement
SQL: Queries main purpose of databases: Structured Query Language get information back out: searching Structured Query Language dedicated to interacting with databases 3rd Generation Language (such as VB, C++) code describes how to do task 4th Generation Language (such as SQL) code describes what to do (not how to do it)
SQL: SELECT statement SELECT statement used to get data can be embedded in VB, via rs.Open: rs.Open("Person", cs) rs.Open("SELECT * FROM [Person]", cs) all fields
SQL: WHERE & ORDER BY WHERE clause ORDER BY clause used to restrict data SELECT * FROM [People] WHERE [age]>=18; ORDER BY clause used to change order of data SELECT * FROM [People] ORDER BY [Surname];
SQL: strings (text data) Possible confusion: SELECT * FROM Person WHERE Surname = Smith this will look for field called Smith - gives error need single (SQL) quotes to signify literal text SELECT * FROM Person WHERE Surname = 'Smith'
SQL & MS access queries MS Access Queries: select data from database really SQL select statements can use queries to test SQL code MS Access: People.mdb
Example: Music Track Track Title Artist Name Country Paranoid Black Sabbath UK Falling in Love Aerosmith US Pink Love in an Elevator Smooth Criminal Alien Ant Farm Meaning of Life Disturbed The Game Voices Down with the Sickness
Questions: SQL Track Create an SQL statement to extract Track Title of records by Aerosmith Track Title Artist Name Country Paranoid Black Sabbath UK Falling in Love Aerosmith US Pink Love in an Elevator Smooth Criminal Alien Ant Farm Meaning of Life Disturbed The Game Voices Down with the Sickness SELECT [Track Title] FROM Track WHERE [Artist Name] = 'Aerosmith'; MS Access: Music.mdb
Questions: SQL Track Create an SQL statement to extract all fields of songs by Disturbed, ordered by track name Track Title Artist Name Country Paranoid Black Sabbath UK Falling in Love Aerosmith US Pink Love in an Elevator Smooth Criminal Alien Ant Farm Meaning of Life Disturbed The Game Voices Down with the Sickness SELECT * FROM Track WHERE [Artist Name] = 'Disturbed' ORDER BY [Track Title]; MS Access: Music.mdb
Example: People v4 User controls what is displayed:
SQL: DISTINCT records SELECT [Artist Name] FROM [Track]; Black Sabbath Aerosmith Alien Ant Farm Disturbed SELECT [Artist Name] FROM [Track]; SELECT DISTINCT [Artist Name] FROM [Track]; Artist Name Black Sabbath Aerosmith Alien Ant Farm Disturbed
Tutorial Exercise: People Task 1: Get the People (versions 1, 2, & 3) example (from the lecture) working. Use the database you created last week. Task 2: Modify your code to include the phone number and email address. Task 3: Get the People version 4 working. You will need to: Add a form to the page, and 3 submit buttons In your asp code, detect when a button has been pressed (have a look at previous weeks) Task 4: Modify your code so that the user can order the data by surname, or email address. You may want to use a Query String
Tutorial Exercise: Music Task 1: Create a web page to display the music database details. Task 2: Modify your code so that the user is presented with a list of artists, each of which is a link. When the user clicks an artist a list of tracks by that artist is displayed. (the list of artists must be generated dynamically from the database)