410 likes | 528 Views
CSE 480: Database Systems. Lecture 10: SQL - DML. Reference: Read Chapter 4 of the textbook. Review. SQL. DML. DDL. UPDATE. RETRIEVAL. SELECT FROM WHERE GROUP BY HAVING ORDER BY. CREATE. DROP. ALTER. INSERT. DELETE. UPDATE. SQL DML (Updates).
E N D
CSE 480: Database Systems • Lecture 10: SQL - DML • Reference: • Read Chapter 4 of the textbook
Review SQL DML DDL UPDATE RETRIEVAL SELECTFROMWHEREGROUP BYHAVINGORDER BY CREATE DROP ALTER INSERT DELETE UPDATE
SQL DML (Updates) There are three SQL commands to update the database state INSERT DELETE UPDATE
INSERT Add one or more tuples to a relation Attribute values must be listed in the same order as the attributes specified in the CREATE TABLE command INSERT INTO EMPLOYEE VALUES ('Richard','K','Marini','653298653','30-DEC-52', '98 Oak Forest,Katy,TX','M',37000,'987654321',4)
INSERT An alternate form of INSERT specifies explicitly the attribute names that correspond to values in the new tuple Attributes with NULL values can be left out INSERT INTO EMPLOYEE (FNAME, LNAME, SSN) VALUES ('Richard', 'Marini', '653298653')
Disable Foreign Key in MySQL • Set foreign_key_checks = 0; • Useful to insert a tuple for subordinate before inserting the tuple for supervisor INSERT INTO EMPLOYEE (FNAME, LNAME, SSN, SUPER_SSN) VALUES ('Rob', ‘Stanley', '153298653', '431231123')
INSERT Insertion of multiple tuples resulting from a query into a relation Example: Suppose we want to create a temporary table that has the name, number of employees, and total salaries for each department. CREATE TABLE DEPTS_INFO (DEPT_NAME VARCHAR(10), NO_OF_EMPS INTEGER, TOTAL_SAL INTEGER); INSERT INTO DEPTS_INFO (DEPT_NAME, NO_OF_EMPS, TOTAL_SAL) SELECT DNAME, COUNT (*), SUM (SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO GROUP BY DNAME ;
DELETE Removes tuples from a relation Includes a WHERE-clause to select the tuples to be deleted Examples: DELETE FROM EMPLOYEE WHERE Lname='Brown’; DELETE FROM EMPLOYEE WHERE SSN='123456789’; DELETE FROM EMPLOYEE WHERE Dno IN (SELECT Dnumber FROM DEPARTMENT WHERE Dname='Research'); DELETE FROM EMPLOYEE;
UPDATE Used to modify attribute values of one or more selected tuples UPDATEtable_name SETset-clause WHEREwhere-clause WHERE-clause selects the tuples to be modified SET-clause specifies the attributes to be modified and their new values Each command modifies tuples in the same relation
UPDATE Example: Change the location and controlling department number of project number 10 to 'Bellaire' and 5, respectively UPDATE PROJECT SET PLOCATION = 'Bellaire', DNUM = 5 WHERE PNUMBER = 10
UPDATE Example: Give all employees in the 'Research' department a 10% raise in salary UPDATE EMPLOYEE SET SALARY = SALARY *1.1 WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME='Research')
Retrieval Queries in SQL • Basic form of the SQL retrieval queries: SELECT <attribute list> FROM <table list> WHERE <condition> • <attribute list> is a list of attribute names whose values are to be retrieved by the query • <table list> is a list of the relation names required to process the query • <condition> is a conditional (Boolean) expression that identifies the tuples to be retrieved by the query
Simple SQL Queries (from 1 Table) • Query: Retrieve the birthdate and address of the employee 'John B. Smith‘ • SELECT • FROM EMPLOYEE • WHERE
Simple SQL Queries (from 1 Table) Query: Retrieve the birthdate and address of the employee 'John B. Smith‘ • SELECT Bdate, Address • FROM EMPLOYEE • WHERE
Simple SQL Queries (from 1 Table) Query: Retrieve the birthdate and address of the employee 'John B. Smith‘ • SELECT Bdate, Address • FROM EMPLOYEE • WHERE Fname='John' AND Minit='B'AND Lname='Smith';
Simple SQL Queries (from 1 Table) • SELECT Bdate, Address • FROM EMPLOYEE • WHERE Fname='John' AND Minit='B'AND Lname='Smith'; Another way to interpret this: • For each row in Employee table • If row.Fname='John' AND row.Minit='B' AND row.Lname='Smith' then • print row.Bdate, row.Address
Simple SQL Queries (from 1 Table) Query: Retrieve the name and address of employees who work for department number 5 • SELECT Fname, Lname, AddressFROM EmployeeWHERE Dno = 5;
Simple SQL Queries (from 1 Table) Query: Retrieve all the rows and columns in the Employee table • SELECT *FROM Employee; Wildcard (*) in the SELECT clause means retrieve all columns No WHERE clause means all the rows will be retrieved
Simple SQL Queries (from 2 Tables) • Query: Retrieve the first name, last name and address of all employees who work for the 'Research' department
Join Operation • SQL uses JOIN operation to combine information from two or more tables S R Join on R. ID = S.ID
Join Operation S R Join on R. ID = S.ID SELECT * FROM R, S WHERE R.ID = S.ID In this case, a row in R is “merged” with a row in S if their IDs are the same
Simple SQL Queries (from 2 Tables) Query: Retrieve the first name, last name and address of all employees who work for the 'Research' department • SELECT FROM Employee, DepartmentWHERE
Simple SQL Queries (from 2 Tables) Query: Retrieve the first name, last name and address of all employees who work for the 'Research' department • SELECT Fname, Lname, AddressFROM Employee, DepartmentWHERE
Simple SQL Queries (from 2 Tables) Query: Retrieve the first name, last name and address of all employees who work for the 'Research' department • SELECT Fname, Lname, AddressFROM Employee, DepartmentWHERE Dname='Research'
Simple SQL Queries (from 2 Tables) Query: Retrieve the first name, last name and address of all employees who work for the 'Research' department • SELECT Fname, Lname, AddressFROM Employee, DepartmentWHERE Dname='Research' AND Dnumber=Dno;
Simple SQL Queries (from 2 Tables) Query: Retrieve the name of each project and the name of the department that controls it • SELECT • FROM Department, Project • WHERE
Simple SQL Queries (from 2 Tables) Query: Retrieve the name of each project and the name of the department that controls it • SELECT Pname, Dname • FROM Department, Project • WHERE
Simple SQL Queries (from 2 Tables) Query: Retrieve the name of each project and the name of the department that controls it • SELECT Pname, Dname • FROM Department, Project • WHERE Dnum=Dnumber;
Exercise List the names of all employees and their corresponding department names
Exercise List the names of managers for each department
Simple SQL Queries (from 3 Tables) • Query: For every project located in 'Stafford', list the project number, controlling department number, and the department manager's last name, address, and birthdate • SELECT • FROM PROJECT, DEPARTMENT, EMPLOYEE • WHERE
Simple SQL Queries (from 3 Tables) Query: For every project located in 'Stafford', list the project number, controlling department number, and the department manager's last name, address, and birthdate • SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS • FROM PROJECT, DEPARTMENT, EMPLOYEE • WHERE
Simple SQL Queries (from 3 Tables) Query: For every project located in 'Stafford', list the project number, controlling department number, and the department manager's last name, address, and birthdate • SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS • FROM PROJECT, DEPARTMENT, EMPLOYEE • WHERE PLOCATION='Stafford'
Simple SQL Queries (from 3 Tables) Query: For every project located in 'Stafford', list the project number, controlling department number, and the department manager's last name, address, and birthdate • SELECT PNUMBER, DNUM, LNAME, BDATE, ADDRESS • FROM PROJECT, DEPARTMENT, EMPLOYEE • WHERE PLOCATION='Stafford‘ AND DNUM=DNUMBER AND MGRSSN=SSN;
Aliases • If a query refers to two or more attributes with the same name but in different relations, we must qualify the attribute name with the relation name by prefixing the relation name to the attribute name S R SELECT * FROM R, S WHERE R.ID = S.ID What if we want to join the same table? Use tuple variables
Tuple Variables • Query: For each employee, retrieve the employee's name and the name of his or her immediate supervisor • SELECT FROM EMPLOYEE E, EMPLOYEE SWHERE • E and S are tuple variables
Tuple Variables Query: For each employee, retrieve the employee's name and the name of his or her immediate supervisor • SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAMEFROM EMPLOYEE E, EMPLOYEE SWHERE • E and S are tuple variables
Tuple Variables Query: For each employee, retrieve the employee's name and the name of his or her immediate supervisor • SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAMEFROM EMPLOYEE E, EMPLOYEE SWHERE E.SuperSSN = S.SSN • E and S are tuple variables
Exercise Query: Find the names of employees who earn more than their supervisors • SELECT E.FNAME, E.LNAMEFROM EMPLOYEE E, Employee SWHERE E.SUPERSSN=S.SSN AND E.SALARY > S.SALARY;
Find the names of the department where John Smith is currently working. SELECT DNAME FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER and FNAME=‘John’ and LNAME=‘Smith’ Find names of the managers earning more than 100K SELECT FNAME, LNAME FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER and MGRSSN=SSN and SALARY> 10000 Find names of employees worked on multiple (at least 2) projects. SELECT name FROM EMPLOYEE A, EMPLOEE B, DEPARTMENT C, DEPARTMENT D WHERE A.SSN = B.SSN AND C.DNUM not= D.DNUM OR SELECT FNAME, LNAME FROM EMPLOYEE WHERE (SELECT COUNT(*) FROM PROJECT WHERE DNO=DNUM) >= 2 A MORE GENERAL METHOD LATER