320 likes | 341 Views
SQL. “Structured Query Language; standard language for relational data manipulation ” DB2, SQL/DS, Oracle, INGRES, SYBASE, SQL Server, dBase/Win, Paradox, Access, and others all rely upon SQL. Introduction to SQL. IBM in the mid-1970s as SEQUEL
E N D
SQL “Structured Query Language; standard language for relational data manipulation” DB2, SQL/DS, Oracle, INGRES, SYBASE, SQL Server, dBase/Win, Paradox, Access, and others all rely upon SQL
Introduction to SQL • IBM in the mid-1970s as SEQUEL • SQ92 = 1992 ANSI standard [a newer standard exists for SQL to extend it to object-oriented languages] • data access language that is embedded in application programs • result of an SQL statement is a relation
many vendors go beyond the ANSI standards for SQL because they want to better position their product in relation to their competitors consequently there are minor variations among vendors
stand-alone • SQL can be used by itself to retrieve and report information • embedded • SQL is frequently embedded in application programs • SQL is not a programming language
Sample Data ENROLLMENT Relation STUDENT Relation CLASS Relation
Simple Select SELECT SID, Name, Major FROM STUDENT STUDENT Relation
SELECT Major FROM STUDENT SELECTDISINCT Major FROM STUDENT as opposed to STUDENT Relation
Selection SELECT SID, Name, Major, GradeLevel, Age FROM STUDENT WHERE Major = ‘MATH’ STUDENT Relation
SELECT SID, Name, Major, GradeLevel, AgeFROM STUDENTWHERE Major = ‘MATH’
Selection SELECT SID, Name, Major, GradeLevel, Age FROM STUDENT WHERE Major = ‘MATH’ AND Age>21 STUDENT Relation
SELECT SID, Name, Major, GradeLevel, AgeFROM STUDENTWHERE Major = ‘MATH’ AND Age>21
Selection SELECT SID, Name, Major, GradeLevel, Age FROM STUDENT WHERE GradeLevel IN [‘FR’, ‘SO’] What about NOT IN ? STUDENT Relation
SELECT SID, Name, Major, GradeLevel, AgeFROM STUDENTWHERE GradeLevel IN [‘FR’, ‘SO’]
Selection % is a wildcard match, like * is a wildcard match _ (the underscore symbol) is for a character-by-character match SELECT Name FROM STUDENT WHERE Name LIKE ‘R%’ STUDENT Relation
Sorting SELECT Name, Major, Age FROM STUDENT WHERE Major = ‘ACCOUNTING’ ORDER BY Name STUDENT Relation
SELECT Name, Major, AgeFROM STUDENTWHERE Major = ‘ACCOUNTING’ORDER BY Name
Sorting SELECT Name, Major, Age FROM STUDENT WHERE Major = ‘ACCOUNTING’ ORDER BY Name DESC ASC is for ascending STUDENT Relation
SQL Built-In Functions • there are five • COUNT • SUM [only applies to numeric fields] • AVG [only applies to numeric fields] • MIN • MAX
SQL Built-In Functions SELECT COUNT(Major) FROM STUDENT SELECT COUNT(DISTINCT Major) FROM STUDENT yields 8 as the answer yields 3 as the answer
Grouping SELECT Major, COUNT(*) FROM STUDENT GROUP BY Major HAVING COUNT(*) > 1 FROM and WHERE go together and GROUP BY and HAVING go together
Querying Multiple Tables • Retrieval Using Subquery • Joining with SQL
what are the names of students in BD445? STUDENT Relation ENROLLMENT Relation CLASS Relation
Subquery (the second SELECT) so this SELECT yields Jones and Baker SELECT Name FROM STUDENT WHERE SID IN (SELECT StudentNumber FROM ENROLLMENT WHERE ClassName = ‘BD445’) this SELECT yields 100 and 200
Joining with SQL column names are unique within a table but it helps to ‘fully qualify’ a column name when more than one table is targeted by the FROM parameter SELECT STUDENT.SID, STUDENT.Name, ENROLLMENT.ClassName FROM STUDENT, ENROLLMENT WHERE STUDENT.SID = ENROLLMENT.StudentNumber in a JOIN always look to match the common column values students not in a class don’t get reported, why?
SELECT STUDENT.SID, STUDENT.Name, ENROLLMENT.ClassNameFROM STUDENT, ENROLLMENTWHERE STUDENT.SID = ENROLLMENT.StudentNumber
What Is The Answer To This Query? SELECT SID, Name FROM STUDENT WHERE SID NOT IN (SELECTDISTINCT StudentNumber FROM ENROLLMENT) why is DISTINCT used? what is this query really asking?
Inserting Data you must know both the field order and field type; text fields require surrounding apostrophes INSERTINTO ENROLLMENT VALUES (400, ‘BD445’, 44) to insert a STUDENT record where you don’t know the Major or GradeLevel INSERTINTO STUDENT notice the empty positions will place null values in the table VALUES (500, ‘Hamilton’, , , 45) key values must always be entered
Modifying Data UPDATE ENROLLMENT SET PositionNumber = 44 WHERE SID = 400 be careful of wildcard matches
Deleting Data DELETE STUDENT WHERE STUDENT.SID = 100 probably the most dangerous SQL statement