Unit 3 Introduction To SQL
Unit 3 Introduction To SQL
RV College of
Engineering
Original Content:
Ramez Elmasri and Shamkant B. Navathe
Dr. Shobha G
Professor, Department of CSE
RV College of Engineering, Bengaluru - 59
1
RV College of
Go, change the world
Engineering
1981 – SQL/DS (Data System) first available RDBMS system on DOS/VSE, Others followed: INGRES (1981),
IDM (Intelligent Database machine)(1982), DG/SQL (1984), Sybase (1986)
Overview of SQL
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
CREATE SCHEMA
• Specifies a new database schema by giving it a name
• Authorization identifier – user or account who owns the schema and the
descriptors for each element (tables, constraints, domains and other
constraints) in the schema
CREATE TABLE
• Specifies a new base relation by giving it a name, and specifying each of its
attributes and their data types (INTEGER, FLOAT, DECIMAL(i,j), CHAR(n),
VARCHAR(n))
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear
from requirements
CREATE TABLE
• In SQL2, can use the CREATE TABLE command for specifying the primary key
attributes, secondary keys, and referential integrity constraints (foreign keys).
• Key attributes can be specified via the PRIMARY KEY and UNIQUE phrases
10
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
RV College of
Go, change the world
Engineering
DROP TABLE
• Used to remove a relation (base table) and its definition
• The relation can no longer be used in queries, updates, or any other commands
since its description no longer exists
• Example:
DROP TABLE DEPENDENT;
MGRSSN CHAR(9),
MGRSTARTDATE CHAR(9),
UNIQUE (DNAME),
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements 13
RV College of
Go, change the world
Engineering
CREATE TABLE
14
RV College of
Go, change the world
Engineering
ESSN CHAR(9),
BDATE DATE,
SUPERSSN CHAR(9),
FOREIGN KEY (DNO) REFERENCES DEPT(DNUMBER) ON DELETE SET DEFAULT ON UPDATE CASCADE,
FOREIGN KEY (SUPERSSN) REFERENCES EMP(ESSN) ON DELETE SET NULL ON UPDATE CASCADE);
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
15
• are the relationship types observed
RV College of
Go, change the world
Engineering
16
RV College of
Go, change the world
Engineering
Structure of a Database
• A database system may contain many databases.
• Each database is composed of schema and tables.
sql> SHOW databases;
+--------------+ sql> USE bank;
| Database | sql> SHOW tables;
+--------------+ +----------------+
| mysql | | Tables_in_bank |
| test | +----------------+
| accounts |
| bank |
| clients |
| world | +----------------+
+--------------+
Structure of a Table
Every field has:
• a name
• a data type and length
To view the structure of a table use:
DESCRIBE tablename;
19
RV College of
Go, change the world
Engineering
ALTER TABLE
• Used to add an attribute to one of the base relations
• The new attribute will have NULLs in all the tuples of the relation right after the command
is executed; hence, the NOT NULL constraint is not allowed for such an attribute
• Example:
•
ALTER TABLE EMPLOYEE ADD JOB VARCHAR(12);
• The database users must still enter a value for the new attribute JOB for each EMPLOYEE
tuple.
• This can be done using the UPDATE command.
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
20
RV College of
Go, change the world
Engineering
ALTER TABLE
• The basic syntax of an ALTER TABLE command to add a New
Column in an existing table is as follows.
21
RV College of
Go, change the world
Engineering
ALTER TABLE
• To add a NOT NULL constraint to a column in a table is as follows.
ALTER TABLE
•to DROP CONSTRAINT from a table is as follows.
• ALTER TABLE table_name DROP CONSTRAINT MyUniqueConstraint;
ALTER TABLE
• The basic syntax of an ALTER TABLE command to ADD CHECK
CONSTRAINT to a table is as follows.
• ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);
24
RV College of
Go, change the world
Engineering
ALTER TABLE
• The basic syntax of an ALTER TABLE command to ADD and DROP
DEFAULT CONSTRAINT to a table is as follows.
• ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
• ALTER TABLE Persons ALTER City DROP DEFAULT;
25
RV College of
Go, change the world
Engineering
INSERT statement
•The INSERT statement allows you to insert one
or more rows into a table. The following
illustrates the syntax of the INSERT statement
INSERT INTO tablename (c1,c2,...)
VALUES (v1,v2,...);
INSERT statement
• To insert multiple rows into a table using a single INSERT statement, you use the following syntax:
• UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
27
RV College of
Go, change the world
Engineering
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear
from requirements
28
RV College of
Go, change the world
Engineering
• SQL allows a table (relation) to have two or more tuples that are identical in
all their attribute values
29
RV College of
Go, change the world
Engineering
• Example:
• {A, B, A} = {B, A, A} as bags
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
Populated Database
• PROJECT
• JOIN
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
34
RV College of
Go, change the world
Engineering
35
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
RV College of
Go, change the world
Engineering
36
RV College of
Go, change the world
Engineering
• A query that refers to two or more attributes with the same name must qualify the attribute name
with the relation name by prefixing the relation name to the attribute name
• Example:
• EMPLOYEE.LNAME, DEPARTMENT.DNAME
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
ALIASES
• Some queries need to refer to the same relation twice
• In this case, aliases are given to the relation name
• Query 8: For each employee, retrieve the employee's name, and the name of his or
her immediate supervisor.
• In Q8, the alternate relation names E and S are called aliases or tuple variables for
the EMPLOYEE relation
• We can think of E and S as two different copies of EMPLOYEE; E represents
employees in role of supervisees and S represents employees in role of supervisors
39
RV College of
Go, change the world
Engineering
ALIASES (contd.)
• Aliasing can also be used in any SQL query for convenience
• Can also use the AS keyword to specify aliases
Q8: SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE AS E, EMPLOYEE AS S
WHERE E.SUPERSSN=S.SSN
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear
from requirements
UNSPECIFIED WHERE-clause
• A missing WHERE-clause indicates no condition; hence, all tuples of the relations
in the FROM-clause are selected
• This is equivalent to the condition WHERE TRUE
• Query 9: Retrieve the SSN values for all employees.
• If more than one relation is specified in the FROM-clause and there is no join
condition, then the CARTESIAN PRODUCT of tuples is selected
41
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
RV College of
Go, change the world
Engineering
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
USE OF *
• To retrieve all the attribute values of the selected tuples, a * is used, which stands for all the attributes
Examples:
Q1C: SELECT *
FROM EMPLOYEE
WHERE DNO=5;
Q1D: SELECT *
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
43
RV College of
Go, change the world
Engineering
USE OF DISTINCT
• SQL does not treat a relation as a set; duplicate tuples can appear
• To eliminate duplicate tuples in a query result, the keyword DISTINCT is used
• For example, the result of Q11 may have duplicate SALARY values whereas
Q11A does not have any duplicate values
Q11: SELECT SALARY
FROM EMPLOYEE
SET OPERATIONS
• SQL has directly incorporated some set operations
• There is a union operation (UNION), and in some versions of SQL there are set difference (MINUS) and
intersection (INTERSECT) operations
• The resulting relations of these set operations are sets of tuples; duplicate tuples are eliminated from the
result
• The set operations apply only to union compatible relations; the two relations must have the same
attributes and the attributes must appear in the same order
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
UNION
(SELECT PNAME
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
46
• are the relationship types observed
RV College of
Go, change the world
Engineering
NESTING OF QUERIES
• A complete SELECT query, called a nested query, can be specified within the WHERE-clause of
another query, called the outer query
• Many of the previous queries can be specified in an alternative form using nesting
• Query 1: Retrieve the name and address of all employees who work for the 'Research' department.
Q1: SELECT FNAME, LNAME, ADDRESS
FROM EMPLOYEE
WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME='Research' )
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
47
RV College of
Go, change the world
Engineering
• The outer query select an EMPLOYEE tuple if its DNO value is in the result of
either nested query
• The comparison operator IN compares a value v with a set (or multi-set) of values
V, and evaluates to TRUE if v is one of the elements in V
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
• The result of a correlated nested query is different for each tuple (or
combination of tuples) of the relation(s) the outer query
• Query 12: Retrieve the name of each employee who has a dependent with the
same first name as the employee.
Q12: SELECT E.FNAME, E.LNAME
FROM EMPLOYEE AS E
WHERE E.SSN IN
(SELECT ESSN
FROM DEPENDENT
WHERE ESSN=E.SSN AND
E.FNAME=DEPENDENT_NAME)
49
RV College of
Go, change the world
Engineering
E.FNAME=D.DEPENDENT_NAME
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements
• This operator was dropped from the language, possibly because of the difficulty in implementing it
efficiently
• The CONTAINS operator compares two sets of values, and returns TRUE if one set contains all values in
the other set
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department
participation is not clear from requirements
FROM EMPLOYEE
FROMWORKS_ON
WHERE SSN=ESSN)
CONTAINS
(SELECT PNUMBER
FROMPROJECT
WHERE DNUM=5) )
controlled by department 5
•
•are The
the relationship types observed
first nested query, which is correlated, retrieves the project numbers on which the employee works, which is different
for each employee tuple because of the correlation
52
RV College of
Go, change the world
Engineering
• Query 12: Retrieve the name of each employee who has a dependent with the same first name as
the employee.
Q12B: SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE SSN=ESSN
AND FNAME=DEPENDENT_NAME)
• are the relationship types observed
Manages : 1:1 relationship type between EMPLOYEE and DEPARTMENT. Employee participation is partial. Department participation is not clear from requirements 53
RV College of
Go, change the world
Engineering
54
RV College of
Go, change the world
Engineering
EXPLICIT SETS
• It is also possible to use an explicit (enumerated) set of values in the
WHERE-clause rather than a nested query
• Query 13: Retrieve the social security numbers of all employees who work on
project number 1, 2, or 3.
• Note: If a join condition is specified, tuples with NULL values for the join
attributes are not included in the result
56
SUBQUERIES AND COMPARISON
OPERATORS
SELECT emp_salary
FROM employee
WHERE emp_salary > 40000;
EMP_SALARY
-------------------
55000
43000
43000
SELECT emp_ssn
FROM employee
WHERE emp_salary >
(SELECT emp_salary
FROM employee
WHERE emp_salary > 40000);
ERROR at line 4:
ORA-01427: single-row subquery returns more than one row
RV College of
Go, change the world
Engineering
• Subqueries that use these keywords may also include GROUP BY and
HAVING clauses.
Example
SELECT emp_last_name "Last Name",
emp_first_name "First Name",
emp_salary "Salary"
FROM employee
WHERE emp_salary > ANY
(SELECT emp_salary
FROM employee
WHERE emp_salary > 30000);
• Allows the user to specify different types of joins (regular "theta" JOIN,
NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS
JOIN, etc)
AGGREGATE FUNCTIONS
• Include COUNT, SUM, MAX, MIN, and AVG
• Query 15: Find the maximum salary, the minimum salary, and the average salary
among all employees.
GROUPING
• In many cases, we want to apply the aggregate functions to subgroups of tuples in
a relation
• Each subgroup of tuples consists of the set of tuples that have the same value for
the grouping attribute(s)
• SQL has a GROUP BY-clause for specifying the grouping attributes, which must
also appear in the SELECT-clause
74
Manages : 1:1 relationship type between EMPLOYEE and
RV College of
Go, change the world
Engineering
GROUPING (contd.)
• Query 20: For each department, retrieve the department number, the number of
employees in the department, and their average salary.
GROUPING (contd.)
• Query 21: For each project, retrieve the project number, project name, and the
number of employees who work on that project.
• In this case, the grouping and functions are applied after the joining of the two
relations
THE HAVING-CLAUSE
• Sometimes we want to retrieve the values of these functions for only those groups
that satisfy certain conditions
• The HAVING-clause is used for specifying a selection condition on groups
(rather than on individual tuples)
Manages : 1:1 relationship type between EMPLOYEE and
DEPARTMENT. Employee participation is partial. Department participation
is not clear from requirements
77
RV College of
Go, change the world
Engineering
78
RV College of
Go, change the world
Engineering
SUBSTRING COMPARISON
• The LIKE comparison operator is used to compare partial strings
• Two reserved characters are used: '%' (or '*' in some implementations) replaces an
arbitrary number of characters, and '_' replaces a single arbitrary character
Manages : 1:1 relationship type between EMPLOYEE and
DEPARTMENT. Employee participation is partial. Department participation
is not clear from requirements
79
RV College of
Go, change the world
Engineering
• The LIKE operator allows us to get around the fact that each value is considered
atomic and indivisible
• Hence, in SQL, character string attribute values are not atomic
Manages : 1:1 relationship type between EMPLOYEE and
DEPARTMENT. Employee participation is partial. Department participation
81
is not clear from requirements
RV College of
Go, change the world
Engineering
ARITHMETIC OPERATIONS
The standard arithmetic operators '+', '-'. '*', and '/' (for addition, subtraction,
multiplication, and division, respectively) can be applied to numeric values in an
SQL query result
• Query 27: Show the effect of giving all employees who work on the 'ProductX'
project a 10% raise.
ORDER BY
• The ORDER BY clause is used to sort the tuples in a query result based on the
values of some attribute(s)
• Query 28: Retrieve a list of employees and the projects each works in, ordered by
the employee's department, and within each department ordered alphabetically by
employee last name.
ORDER BY (contd.)
• The default order is in ascending order of values
• We can specify the keyword DESC if we want a descending order; the keyword
ASC can be used to explicitly specify ascending order, even though it is the
default
TMENT. Employee participation is partial. Department participation is not
clear from requirements
84
RV College of
Go, change the world
Engineering
and UPDATE
87
RV College of
Go, change the world
Engineering
INSERT
• In its simplest form, it is used to add one or more tuples to a relation
• Attribute values should be listed in the same order as the attributes were specified
in the CREATE TABLE command
88
RV College of
Go, change the world
Engineering
INSERT (contd.)
• Example:
INSERT (contd.)
• Important Note: Only the constraints specified in the DDL commands are
automatically enforced by the DBMS when updates are applied to the database
• Another variation of INSERT allows insertion of multiple tuples resulting
from a query into a relation
90
RV College of
Go, change the world
Engineering
INSERT (contd.)
• Example: Suppose we want to create a temporary table that has the name, number
of employees, and total salaries for each department.
• A table DEPTS_INFO is created by U3A, and is loaded with the summary
information retrieved from the database by the query in U3B.
U3A: CREATE TABLE DEPTS_INFO
(DEPT_NAME VARCHAR(10),
NO_OF_EMPS INTEGER,
TOTAL_SALINTEGER);
91
RV College of
Go, change the world
Engineering
DELETE
• Removes tuples from a relation
• Includes a WHERE-clause to select the tuples to be deleted
• Referential integrity should be enforced
• Tuples are deleted from only one table at a time (unless CASCADE is
specified on a referential integrity constraint)
• A missing WHERE-clause specifies that all tuples in the relation are to be
deleted; the table then becomes an empty table
• The number of tuples deleted depends on the number of tuples in the relation
that satisfy the WHERE-clause
92
RV College of
Go, change the world
Engineering
DELETE (contd.)
• Examples:
U4A: DELETE FROM EMPLOYEE
WHERE LNAME='Brown’
93
RV College of
Go, change the world
Engineering
UPDATE
• Used to modify attribute values of one or more selected tuples
• A WHERE-clause selects the tuples to be modified
• An additional SET-clause specifies the attributes to be modified and their new
values
• Each command modifies tuples in the same relation
• Referential integrity should be enforced
94
RV College of
Go, change the world
Engineering
UPDATE (contd.)
• Example: Change the location and controlling department number of project
number 10 to 'Bellaire' and 5, respectively.
95
RV College of
Go, change the world
Engineering
UPDATE (contd.)
• Example: Give all employees in the 'Research' department a 10% raise in salary.
• In this request, the modified SALARY value depends on the original SALARY
value in each tuple
• The reference to the SALARY attribute on the right of = refers to the old
SALARY value before modification
• The reference to the SALARY attribute on the left of = refers to the new
SALARY value after modification
96
RV College of
Go, change the world
Engineering
97
RV College of
Go, change the world
Engineering
Thank YOU
98