Download Introduction to Structured Query Language

Document related concepts

Database wikipedia , lookup

Functional Database Model wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Relational algebra wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Entity–attribute–value model wikipedia , lookup

Ingres (database) wikipedia , lookup

Clusterpoint wikipedia , lookup

SQL wikipedia , lookup

PL/SQL wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Join (SQL) wikipedia , lookup

Relational model wikipedia , lookup

Database model wikipedia , lookup

Transcript
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Contents
Introduction to Structured Query Language ............................................................ 3
What is SQL? ........................................................................................................... 3
History for SQL (not within the curricula) ........................................................... 3
Data Definition Language and Data Manipulation Language ............................ 5
An Illustrative Example – A Library System ........................................................ 7
Commonly Used Data Types in SQL ..................................................................... 9
SQL Statements ...................................................................................................... 11
Creating Database Objects.................................................................................. 11
Create a database ........................................................................................... 11
Create a table in a database .......................................................................... 11
Creating Table with Integrity Rule..................................................................... 13
Create table with primary key ...................................................................... 13
Create table with foreign key ........................................................................ 14
Modifying Table Structure.................................................................................. 15
Add column..................................................................................................... 15
Drop column ................................................................................................... 15
Change columns’ data type ........................................................................... 16
Change column(s) to NOT NULL ................................................................ 17
Add a primary key to an existing table ........................................................ 18
Deleting Database Objects .................................................................................. 19
Delete a table .................................................................................................. 19
Delete a database ............................................................................................ 19
Adding Data to Tables......................................................................................... 20
Insert new row ................................................................................................ 20
Insert new record with only specified column field(s) ................................ 21
Retrieving Data from Database Table(s)............................................................ 22
Retrieve all fields from a table ...................................................................... 22
Retrieve value(s) from particular column(s) of a table .............................. 23
Retrieve value(s) from particular column(s) of a table without duplication
.......................................................................................................................... 23
Retrieve data with specified selection criteria ............................................. 25
Creating and Deleting Data View ....................................................................... 26
Create a data view .......................................................................................... 26
Delete a data view........................................................................................... 27
Update the value in a column ........................................................................ 28
Update values in a number of columns ........................................................ 29
Delete record(s) from the table ..................................................................... 30
Result Presentation ............................................................................................. 31
The ORDER BY clause ................................................................................. 31
The GROUP BY … HAVING clause ........................................................... 33
Operators Used with WHERE ............................................................................ 35
The LIKE operator ........................................................................................ 35
The IN operator.............................................................................................. 37
The BETWEEN Operator ............................................................................. 38
The AND Operator ........................................................................................ 39
The OR operator ............................................................................................ 39
Add alias to a column .................................................................................... 41
1
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Joining Tables ..................................................................................................... 42
Equijoin........................................................................................................... 42
The NATURAL JOIN operator .................................................................... 44
The INNER JOIN operator........................................................................... 45
The LEFT (OUTER) JOIN operator ........................................................... 46
The RIGHT (OUTER) JOIN operator ........................................................ 47
The FULL (OUTER) JOIN operator ........................................................... 48
Combining Query Results ................................................................................... 49
The UNION operator ..................................................................................... 49
The INTERSECT operator ........................................................................... 50
The EXCEPT/MINUS operator ................................................................... 51
Using nested SELECT statement ................................................................. 52
Arithmetic Operators/Functions ........................................................................ 54
String Functions ................................................................................................. 54
Aggregate Functions ........................................................................................... 56
The AVG function .......................................................................................... 56
The COUNT function .................................................................................... 57
The MAX function ......................................................................................... 58
The MIN function .......................................................................................... 59
The SUM Function ......................................................................................... 60
Create/Drop Table Index .............................................................................. 61
Exporting Data from MS Access ........................................................................ 63
Export Data from an MS Access Database to Another Access Database . 63
Export Data from an MS Access Database in other file formats .............. 65
2
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Introduction to Structured Query Language
What is SQL?
Structural Query Language (SQL) is a standard language for manipulating and
querying database objects (e.g., table structures and contents) in the relational
database management system.
For simplicity, we refer relational database
management system to as database from now on. SQL allows you to access a
database. SQL can be used to define database table structure and to store, select and
manage data from the database including data insertion, update and deletion. SQL is
widely used in databases like MySQL, DB2, Oracle, PostgreSQL, Sybase, Microsoft
SQL Server, MS Access, etc.
History for SQL (not within the curricula)
In early 1970s, a seminal paper related to the relational database model authored by
E.F. Codd received in a considerable notice from the database community. The
relational database model provided a perfectly theoretical framework for the
development of a well-formed querying language that the model could support. By
1974, IBM had defined a language called the ‘Structured English Query Language’ or
SEQUEL. The name was later shortened as Structured Query Language (SQL).
In 1986, a standard for Structured Query Language (SQL) was defined by the
American National Standards Institute (ANSI), and this became an international
standard recognized by the International Standards Organization (ISO) in 1987. In
1989, a revised standard known commonly as SQL89 or SQL1, was published. The
ANSI committee released the SQL92 standard in 1992 (also called SQL2). This
standard addressed several weaknesses in SQL89 and set forth conceptual SQL
features which at that time exceeded the capabilities of any existing RDBMS
implementation. The SQL92 standard was approximately six times the length of its
predecessor. Because of this disparity, the authors defined three levels of SQL92
compliance: Entry-level conformance, Intermediate-level conformance, and Full
conformance. Some information about the difference among various levels of SQL92
compliance can be found here.
In 1999, the ANSI/ISO released the SQL99 standard (also called SQL3). This
standard addresses some of the more advanced areas of modern SQL systems, such as
object-relational database concepts, call level interfaces, and integrity management.
SQL99 replaces the SQL92 levels of compliance with its own degrees of conformance:
Core SQL99 and Enhanced SQL99. A short article that highlights some important
changes in SQL99 can be found here.
Although various databases may implement their SQL slightly differently, they
support the same major functions (such as SELECT, UPDATE, DELETE, INSERT,
WHERE, etc.) in a similar way in order to fulfill the ANSI standard. This SQL
statements introduced in this note are largely based on the Entry-level conformance of
SQL92.
3
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Teaching remarks
 Apparently, the SQL statements that the A/AS level curricula cover are so basic
that even the entry-level of SQL92 supports them.
 Most of the SQL statements included in this note have been tested on Microsoft
Access 2003. It supports SQL92 but this requires some reconfiguration. The
default database format is Access 2000 which is not compatible with SQL92. To
change the default database format, start Access 2003. Click Tools, then Options.
Click the Advanced tab and change the Default File Format to “MS
Access2002-2003” (see Figure 1). To change the SQL syntax to SQL92, click
Tools and then Options. Click the Tables/Queries tab and check both boxes
(This database and Default for new databases) under SQL Server Compatible
Syntax (ANSI 92) (see Figure 2).
 It appears that the SQL92 supported by Access 2003 conforms to the entry-level
only. For example, it does not support for some join features such as NATURAL
JOIN and FULL OUTER JOIN. Other non-support features include EXCEPT and
INTERSECT, etc.
 A subset of the SQL92 standard that is both usable and commonly supported can
be found at http://www.firstsql.com/tutor.htm.
Figure 1. Setting Access 2003’s default database format to
“Access 2002 – 2003” to support SQL92.
4
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Figure 2. Setting Access 2003’s default SQL syntax to conform to SQL92.
Data Definition Language and Data Manipulation Language
SQL supports functions such as building and manipulating database objects,
populating database tables with data, updating existing data in tables, deleting data,
performing database queries, controlling database access and overall database
administration. Such functions can be classified into a number of categories and the
most well known two categories are Data Definition Language (DLL) and Data
Manipulation Language (DML).
DDL allows user to create and restructure database objects, such as creating and
deleting database tables. Besides, DDL can be used to define table indexes as well as
foreign keys between tables. Some of the commonly used DDL commands are:








CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
ALTER INDEX
DROP INDEX
CREATE VIEW
DROP VIEW
5
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
DML allows users to manipulate data within the objects of a database. Some of the
commonly used DML commands are:




SELECT
INSERT INTO
UPDATE
DELETE
In a nutshell, DDL allows database users to define database objects whereas DML
allows database users to retrieve, insert, delete and update data in a database.
6
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
An Illustrative Example – A Library System
In order to help readers understand the SQL statements that we are going to introduce,
those statements will be illustrated in a hypothetical library database as far as
possible. The tables used in the simple library database are the Student, Book and
LoanRecord tables and their details are given below. Readers are reminded that the
tables and fields kept in the proposed database are far less than what a real library
system requires. We keep the example database simple and yet adequate for the
illustration purposes.
The Student table is used to store basic student information like student ID, name, the
class that the student belongs, and phone number. The data fields of the Student table
are as follows:
StdID
Name
Class
OverduePay PhoneNo
0002011
0002012
0002013
0002014
0002015
0002016
Chan Ming Wai
Wong Wai Ming
Cheung Ka Fai
Chang Wai Yee
Lee Oi Lam
Sze Yuk Ki
2C
2B
2C
4A
5C
7B
12.5
30.5
0
20.5
3
1.5
21238782
21234456
23212321
23213123
25214123
26434534
Table 1. Data in the Student table.
Table 2 describes the characteristics of the data fields in the Student table.
Field Name
StdID
Name
Class
PhoneNo
OverduePay
Description
 Unique Student number
 Text string – 7 digits
 Not null (i.e., the field is mandatory and a value is to be
inserted)
 Student Name
 Text string – 30 characters
 Not null
 The class student study
 Text string – 2 characters
 Not null
 Phone Number
 Text string – 8 digits
 Overdue Payment
 A number with two decimal places (<= 999.99)
Table 2. Characteristics of the data fields in the Student table.
7
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Teaching remark
 Some people may opt to define numeric data like StdID and PhoneNo as integers
instead of text string. The reason why we prefer to represent the fields as text
strings is that as the “numbers” are not used for computation.
 Two different data types can be used to define text strings (see next section) and it
is important for teachers to clarify to their student of the key difference between
the data types.
The Book table contains the key information about the books in the library. Details of
the Book table are shown in Table 3.
BookID
Title
00000001
00000002
00000003
Apple Tree
Bible
Star Wing
Type
Table 3. Data in the Book table.
Table 4 describes the characteristics of the data fields in the Book table.
Field Name
BookID
Title
Type
Description
 Unique book ID
 Text string – 8 digits
 Not null
 Book Title
 Text string – 100 characters
 Not null
 Book category
 Text string – 3 digits
Table 4. Characteristics of the data fields in the Book table.
The LoanRecord table contains information of the library items on loan (or once on
loan). Details of the Book table are as follows:
LoanRecID StdID
BookID
DateOfBorrow
Status
1
2
3
4
5
00000001
00000002
00000003
00000002
00000002
20051001
20020112
20031211
20031001
20051018
1
2
2
2
1
0002012
0002011
0002012
0002013
0002011
Table 5. Data in the LoanRecord table.
8
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Table 6 describes the characteristics of the data fields in the LoanRecord table.
Field Name
LoanRecID
Description
 Unique loan record ID
 Text string – 8 digits
 Not null
StdID
 Student number
 Text string – 7 digits
 Not null
BookID
 Book ID
 Text string – 8 digits
 Not null
DateOfBorrow  Date of the book being borrowed
 Date data type
 Not null
Status
 Loan status (1 – on loan; 2 – returned; 3 – on hold)
 Text string – 1 digit
 Not null
Table 6. Characteristics of the data fields in the LoanRecord table.
Commonly Used Data Types in SQL
The data type of a data item restricts the values that the data item can take and the
operations which one can perform on that data item. Table 7 gives some of the
commonly used data types in SQL.
Data Type
INTEGER or INT
SMALLINT
TINYINT
DECIMAL(size, decimal)
NUMERIC(size, decimal)
CHAR(size)
VARCHAR(size)
DATE
Description
Hold integers only. The three types differ in the
minimum and maximum value that they can represent.
Hold numbers with fractions. The maximum number of
digits is specified by size. The maximum number of
decimal places is specified by decimal.
Hold a fixed length text string. The maximum size of
fixed length string is specified by size. Unused space
is packed with space characters.
Hold a variable length string. The maximum size of
fixed length string is specified by size. Unused space is
not packed with any characters.
Date format may be different in various databases but
they all contain calendar date with year, month and day.
Table 7. Some basic data types used in SQL.
Note that the Boolean data type, which accepts TRUE or FALSE as its value, is not
defined in SQL92, but in SQL99. However databases support the data type even
though they are not conforming to SQL99.
9
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Teaching remarks
 A character string stored in a CHAR column is left-justified and padded with
trailing blanks to the length of the column. All the strings stored in a CHAR
column have the same length. These trailing blanks are preserved in query results.
 A character string stored in a VARCHAR column has exactly the same length as
the source string or the expression that generated the string (including trailing
blanks). Character strings stored in a VARCHAR column can vary in length.
 A character string stored in a VARCHAR column incurs a 2-byte overhead. Do
not use this data type for columns less than 6 bytes long or for columns that store
strings of the same length. Use the CHAR data type instead.
10
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
SQL Statements
Creating Database Objects
Create a database
The CREATE DATABASE statement can be used to create a database with a
specified name.
Syntax
CREATE DATABASE database_name
Example
A database named “library_system” is created with the following statement.
CREATE DATABASE library_system
Teaching remark
 Some databases like Microsoft Access may require users to create a database by
using their own user interface instead of within a SQL environment.
Create a table in a database
The CREATE TABLE statement can be used to create a table with a specified name.
Syntax
CREATE TABLE TableName
(
Column1 DataType1,
Column2 DataType2,
.......
)
Full Syntax
Example 1
Create a table called “Teacher” with two columns named “Name” and “Age”
respectively.
CREATE TABLE Teacher
(
Name varchar(30),
Age
int
)
Sample Query - Q1_1_CreateTableTeacher
Want to Try?
11
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Result
An empty Teacher table with two fields – Name and Age – is created.
Teaching remark
 The Teacher table is not required in the library system example. It is created to
demonstrate another SQL statement which removes database tables.
Example 2
Create a table called “Book” that contains fields named “BookID”, “Title” and
“Type” such that a value for “BookID” must be entered for each row and its value is
unique within the table.
CREATE TABLE Book
(
BookID char(8) NOT NULL UNIQUE,
Title varchar(100),
Type int
)
Sample Query Q1_2_CreateTableBook
Want to Try?
Result
An empty Book table with three fields – BookID, Title and Type – is created. The
BookID field is mandatory (indicated by “NOT NULL”) and unique (indicated by
“UNIQUE”) within the Book table.
12
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Creating Table with Integrity Rule
Create table with primary key
For each table, it is necessary to have a field or a combination of selected fields such
that their values can be used to identify each table row uniquely. Such an identifier is
known as a candidate key. The concept of candidate key is essential to good database
design. The most commonly used candidate key of a table is typically selected to be
the primary key of the table.
The PRIMARY KEY keyword is used to specify the fields in a table that compose the
table’s primary key.
Syntax
CREATE TABLE TableName
(
Column1 DataType, NOT NULL
Column2 DataType, NOT NULL
.......
PRIMARY KEY (Column1, Column2, …)
)
Full Syntax
Teaching remark
 Technically, all fields in a primary key should be defined to be UNIQUE and
NOT NULL. Although some databases like Microsoft Access 2003 may take all
primary key fields as UNIQUE and NOT NULL even though they are not
specified, it is a good practice to specify them explicitly.
Example
To create a table called “Student” with the primary key “StdID”, we can use the
following statement:
CREATE TABLE Student
(
StdID
char(7) NOT NULL UNIQUE,
Name
varchar(30),
Class
char(10),
Age
smallint,
OverduePay
decimal(5,2),
PRIMARY KEY (StdID)
)
Sample Query Q2_1_createStudent_PriKey
Want to Try?
Teaching remark
 The length of the Class field is set to 10 characters long intentionally. We will
alter it to 2 characters long using another SQL statement later.
13
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Create table with foreign key
A foreign key (which may be composite) to another table ensures that the value of the
foreign key field(s) can be found in the primary key of the foreign table. The
following example shows how to create a table in a database with foreign key.
Syntax
CREATE TABLE TableName1
(
Column1 DataType1,
Column2 DataType2,
.......
FOREIGN KEY (ColumnX, ColumnY) REFERENCES TableName2
)
Full Syntax
Example
In this example, we would like to create a table “LoanRecord” with a primary key
“LoanRecID” and two foreign keys “StdID” and “BookID” that references tables
“Student” and “Book” respectively by using the following statement.
CREATE TABLE
(
LoanRecID
StdID
BookID
Dateofborrow
Status
PRIMARY KEY
FOREIGN KEY
FOREIGN KEY
)
LoanRecord
char(8) NOT NULL,
char(7) NOT NULL,
char(8) NOT NULL,
date,
char(1),
(LoanRecID),
(StdID) REFERENCES Student,
(BOOKID) REFERENCES Book
Sample Query Q2_2_CreateLoanRecord
Want to Try?
The SQL script given above for creating LoanRecord table cannot run successfully
because a primary key has not been defined for the Book table created earlier. It is
important to rectify the problem by altering the structure of the Book table before
running the above SQL script again.
Important remark
 A special view on one or more tables in the database in form of a kind of “virtual”
table can be created with the use of the CREATE VIEW statement. The data
stored in the virtual table is extracted by the SELECT statement. Both the
CREATE VIEW and SELECT statements will be covered later.
14
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Modifying Table Structure
If required, a table structure can be altered with the use of various forms of the
ALTER TABLE statement.
Add column
To add column(s) in a table, use ADD within the ALTER TABLE statement.
Syntax
ALTER TABLE TableName ADD ColumnName DataType
Full Syntax
Example
To add a column named “PhoneNo” in the “Student” table, we can use the following
statement.
ALTER TABLE Student ADD PhoneNo char(8)
Sample Query Q3_1_AlterStudenttable
Want to Try?
Result
Drop column
To drop column(s) in a table, use DROP within the ALTER TABLE statement.
Syntax
ALTER TABLE TableName DROP ColumnName
Full Syntax
Example
To drop a column ‘Age’ in the “Student” table, we can use the following statement.
ALTER TABLE Student DROP Age
Sample Query Q3_2_Alterstudent_Drop
Want to Try?
Result
15
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Change columns’ data type
Apart from adding or dropping an existing column(s) in a table, we can also edit the
structure or change the data type as well as characteristics for the existing column(s)
by using ALTER TABLE … ALTER COLUMN statement.
Syntax
ALTER TABLE TableName ALTER COLUMN Column1 NewDataType
Full Syntax
Teaching remark
 If a new data type is set for an existing column, the values that already exist in the
column must be compatible with the new data type. Otherwise, the query will not
be running successfully.
Example
To change the data type ‘Class’ to char(2) in the “Student” table, we can use the
following statement:
ALTER TABLE Student ALTER COLUMN Class char(2)
Sample Query Q3_3_Changedatatype
Want to Try?
Result
16
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Change column(s) to NOT NULL
Syntax
ALTER TABLE TableName ALTER COLUMN Column1 DataType NOT NULL
Full Syntax
Example
To change the data type ‘Name’ to NOT NULL in the “Student” table, we can use the
following statement:
ALTER TABLE Student ALTER COLUMN Name varchar(30) NOT NULL
Sample Query Q3_4_changefieldNotNull
Want to Try?
Result
Teaching remark
 In the above MS Access 2003 interface, the item “Required” means a mandatory
entry. In other words, the value for the field cannot be NULL, i.e., NOT NULL.
17
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Add a primary key to an existing table
Apart from creating the primary key when creating table, we can also create a primary
key to an existing table by changing the table’s column property.
Syntax
ALTER TABLE TableName ADD PRIMARY KEY (ColumnName)
Full Syntax
Example
ALTER TABLE Book ADD PRIMARY KEY (BookID)
Sample Query Q3_5_AddPriKey
Want to Try?
Result
Teaching remark
 As the Book table has a primary key now, the SQL script for creating the
LoanRecord table that references the Book table can now be running successfully.
18
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Deleting Database Objects
If required, a database table or even the whole database can be deleted.
Delete a table
To delete a table, use the DROP TABLE statement.
Syntax
DROP TABLE TableName
Full Syntax
Example
DROP TABLE teacher
Sample Query Q3_6_Droptable
Want to Try?
Delete a database
We can delete the entire database with the use of the DROP DATABASE statement.
Syntax
DROP DATABASE DatabaseName
Example
DROP DATABASE my_database
Teaching remarks
 The DROP DATABASE statement should be used very rarely.
 You will not be able to run the DROP DATABASE statement within the graphical
user environment of MS ACCESS 2003.
19
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Adding Data to Tables
To insert data into a table, we can use INSERT INTO statement. We can insert a new
row or insert a specified field into a table.
Insert new row
Syntax
INSERT INTO TableName VALUES
(
Value1,
Value2,
.......
)
Full syntax
Value1 is the value of the first field of the TableName table when the table is created.
Similarly Value2 is the value of the second field of the table.
Example
The following query inserts data into the Student table.
INSERT INTO Student
'21238782');
INSERT INTO Student
'21234456');
INSERT INTO Student
'23212321');
INSERT INTO Student
'23123123');
INSERT INTO Student
'25214123');
INSERT INTO Student
'26434534');
VALUES ('0002011', 'Chan Edward', '1C', 12.5,
VALUES ('0002012', 'Wong Wai Ming', '2B', 30.5,
VALUES ('0002013', 'Cheung Ka Fai', '1C', 0,
VALUES ('0002014', 'Chang Wai Yee', '4A', 20.5,
VALUES ('0002015', 'Lee Oi Lam', '5C', 3,
VALUES ('0002016', 'Sze Yuk Ki', '7B', 1.5,
Sample Query Q4_1_InsertData – Q4_6_InsertData
Result
20
Want to Try?
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Insert new record with only specified column field(s)
The following statement shows how to insert a new record with specified column
field(s).
Syntax
INSERT INTO TableName (Column1, Column2..) VALUES
(
Value1,
Value2,
.......
)
Full syntax
Example
We insert the Book ID and titles of three books into the Book table. The book
category information (stored in the Type field) is empty for the three books.
INSERT INTO Book (BookID, Title) VALUES ('00000001', 'Apple Tree');
INSERT INTO Book (BookID, Title) VALUES ('00000002', 'Bible');
INSERT INTO Book (BookID, Title) VALUES ('00000003', 'Star Wing');
Sample Query Q4_7_InsertSpecialField - Q4_9_InsertSpecialField
Result
21
Want to Try?
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Retrieving Data from Database Table(s)
To select specific data from one or more tables, we can use the SELECT statement.
The SELECT statement can be used in conjunction with other SQL statement to build
sophisticated database queries.
Retrieve all fields from a table
In SQL statement, the symbol “*” is used to represent the “all of them”. The
statement can be used to retrieve data from multiple tables but we defer the discussion
to a later stage. We can use the following statement to select all fields from a
database table.
Syntax
SELECT * FROM TableName
Full Syntax
Example
The following SQL statement retrieves (and displays) all records in the Student table.
SELECT * FROM Student
Sample Query Q5_1_select
Want toTry?
Result
22
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Retrieve value(s) from particular column(s) of a table
To select data from particular column of a table, we can use the SELECT statement
too.
Syntax
SELECT Column1, Column2…
FROM TableName
Full Syntax
Example
To select the ‘Name’ and ‘Class’ columns from the Student table, we can use the
statement as below.
SELECT Name, Class FROM Student
Sample Query Q5_2_SelectSpecificField
Want to Try?
Result
Teaching remark
 If the values of the selected columns from different rows of the table are the same,
multiple occurrences of the same values will result. To avoid the duplication, the
SELECT DISTINCT statement is required.
Retrieve value(s) from particular column(s) of a table without duplication
The SELECT DISTINCT statement is used to select the value(s) of those specified
column field(s) with no duplication. The syntax of this statement is as follows.
Syntax
SELECT DISTINCT column1, coloumn2 …
FROM TableName
Full Syntax
23
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Example
In this example, we would like to identify all students who have used the library
service at least once. If we use the SELECT statement without the DISTINCT
keyword, multiple occurrences of the same students may appear if those students use
the library services more than once. To avoid the duplication, we retrieve all distinct
value(s) of the ‘StdID’ field from the LoanRecord table (see Table 5 for its content)
with the use of the SELECT DISTINCT statement.
SELECT DISTINCT StdID FROM LoanRecord
Sample Query Q5_3_SelectDistinct
Want to Try?
Result
24
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Retrieve data with specified selection criteria
A WHERE clause can be appended to the basic SELECT statement to specify the
condition(s) that the retrieved data need to fulfill. Rows that do not meet the specified
condition(s) will not be retrieved. When more than one condition is specified,
AND/OR may be used to join the conditions.
Syntax
SELECT Column1, Column2… FROM TableName
WHERE Condition(s)
Full Syntax
Common operators used in the WHERE clause are tabulated below.
Operator
Description
=
<>
>
<
>=
<=
BETWEEN
LIKE
Equal to
Not Equal to
Greater/ Larger than
Less/ Smaller than
Greater or equal to
Less or equal to
Within the range
Match the pattern
Example
In this example, we would like to retrieve records of those students in the class “1C”.
SELECT * FROM Student WHERE class = '1C'
Sample Query Q6_1_SelectwithCriteria
Teaching remark
 Except for numeric values, the operand(s) of the operator must be enclosed by a
pair of single quotation marks ‘’.
Result
25
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Creating and Deleting Data View
Create a data view
With the use of the CREATE VIEW statement, users may create a special view on
one or more tables (or views) in the database in form of a new “virtual” table. The
data view is created with the use of an associated SELECT statement. Most SQL
statements that apply to a database table can also be applied to a data view.
Syntax
CREATE VIEW ViewName (Column1, Column2…)
AS Select-Statement;
Full Syntax
Example
In this example, we would like to create a data view to store the Book ID of those
library books that are currently on loan and their corresponding borrowers (Student ID
and Name).
CREATE VIEW BookOnLoan_n_Borrower_View (StdID, Name, BookID)
AS SELECT Student.StdID, Name, BookID
FROM Student, LoanRecord
WHERE Student.StdID = LoanRecord.StdID AND status='1';
Sample Query Q29_Create_View
Want to Try?
Result
A data view known as BookOnLoan_n_Borrower_View is created.
The data view has the following content.
26
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Delete a data view
A data view can be deleted with the use of the DROP VIEW statement.
Syntax
DROP VIEW ViewName;
Full syntax
Example
The BookOnLoan_n_Borrower_View data view created earlier can be removed with
the following SQL statement.
DROP VIEW BookOnLoan_n_Borrower_View;
Sample Query Q29_Drop_View
Want to Try?
Result
The BookOnLoan_n_Borrower_View data view is removed.
27
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Updating Data in a Table
Apart from retrieving data from a table, we can also modify selected data in a table by
using the UPDATE statement and delete selected row(s) from a table.
Update the value in a column
To modify values in a selected column of one or more rows, we can use the UPDATE
… SET statement.
Syntax
UPDATE TableName
SET Column = NewValue
WHERE Condition(s)
The WHERE clause is optional.
Full syntax
If the WHERE clause is not used, the value in the specified column of each row will
be changed to the new value.
Example
Suppose we had wrongly put ‘1C’ as the value of the ‘Class’ field for students in
Class 2C (and no records for students from Class 1C have been entered), the problem
can be rectified by the following SQL statement.
UPDATE Student SET class = '2C'
WHERE class='1C';
Sample Query Q7_1_updatetable
Want to Try?
Result
Teaching remark
 Except for numeric values, the operand(s) of the operator must be enclosed by a
pair of single quotation marks ‘’.
28
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Update values in a number of columns
To modify values in a number of columns, we can use the following statement.
Syntax
UPDATE TableName
SET Column1 = NewValue1, Column2 = NewValue2
WHERE Condition(s)
The WHERE clause is optional.
Full syntax
If the WHERE clause is not used, the values in the specified column(s) of each row
will be changed to the new values.
Example
Suppose we have wrongly entered the name and phone number of a student with
student ID equal to ‘0002011’ in the Student table earlier on, we can use the UPDATE
statement to fix the problem. The name and phone number of the student should be
“Chan Ming Wai” and ‘21111182’ respectively.
UPDATE Student SET Name = 'Chan Ming Wai', PhoneNo = '21111182'
WHERE StdID='0002011';
Sample Query Q7_2_Updateseveralcolumn
Want to Try?
Result
29
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Delete record(s) from the table
To delete record(s) from a table, the DELETE Statement can be used.
Syntax
DELETE FROM TableName
WHERE Condition(s)
The WHERE clause is optional.
Full syntax
Example 1
In this example, we would like to delete all records with the book ID “00000003”
from a table “Book”.
DELETE *
FROM Book
WHERE BookID='00000003';
Sample Query Q8_1_Deletefield
Want to Try?
Teaching remarks

As the BookID field serves as a foreign key in the LoadRecord table to the Book
table and there is a corresponding record with the BookID equal to ‘00000003’ in
the LoadRecord table, the above DELETE statement cannot be executed
successfully. The corresponding rows in the LoadRecord table need to be
removed in order to enable the query to run successfully.
Example 2
To delete all records in the table, we can simply use the DELETE statement without
setting any condition. After running the following SQL statement successfully, the
Book table will become empty.
DELETE FROM Book
Sample Query Q8_2_Deleteall
Want to Try?
Teaching remark

Due to the same reason as indicated in the last “Teaching remark”, the above
DELETE statement cannot be executed successfully unless no corresponding rows
in the LoadRecord table are found.
30
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Result Presentation
For various reasons, users may want to organize the result of a query in ascending or
descending order of some selected fields in some occasions. In other occasions, they
may be interested in the value of some aggregated attribute of the retrieved data, e.g.,
the total number of books that a student has ever borrowed. The former can be
achieved with the use of the ORDER BY clause whereas the latter can be done with
the use of the GROUP BY clause, both in a SELECT statement.
The ORDER BY clause
A query result can be sorted in ascending or descending lexicographical order of one
or more selected sort fields. A lexicographical ordering refers to how characters are
ordered in the corresponding encoding table.
Syntax
SELECT Column(s) FROM TableName
ORDER BY Column1 [ASC|DESC], Column2 [ASC|DESC], ...
Full syntax
Optional parts are put inside square brackets. A vertical bar stands for disjunction.
Thus [ASC|DESC] means that a user may use none of the keywords, or either one.
Teaching remarks
 The sort fields may or may not be selected for retrieval purposes.
 The default sorting order is in lexicographical order.
Example 1
Suppose we would like to sort all rows in the Student table in ascending order of the
student name.
SELECT * FROM Student
ORDER BY Name
Sample Query Q9_1_sort
Result
31
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Example 2
In the following example, we retrieve all rows in the Student table in ascending order
of the Class field.
SELECT * FROM Student
ORDER BY Class ASC
Sample Query Q9_2_SortASC
Result
Example 3
In this example, we would like to sort all records in the Student table in two levels:
first in descending order of the Class field, then in ascending order of the Name field.
SELECT * FROM Student
ORDER BY Class DESC, Name ASC
Sample Query Q9_2_SortASC2
Result
32
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The GROUP BY … HAVING clause
To facilitate the users to do data analysis, grouping the result in a suitable way is
sometimes required. This can be achieved with the use of the GROUP BY clause.
Syntax
SELECT Column(s) FROM TableName
GROUP BY Column1, Column2, ...
HAVING Condition(s)
The HAVINIG clause is optional.
Full syntax
Example 1
To count the number of students who have borrowed books in each class, we can use
the GROUP BY clause (without the HAVING part) as below:
SELECT Class, count(*) AS Num
FROM Student
GROUP BY Class
ORDER BY Class DESC;
Sample Query Q10_Group
The AS keyword enables a user to assign a new label to a selected object. In the
above example, the output of the aggregate function COUNT(*) which counts the
number of output rows in each group (as specified by the GROUP BY clause) is
labeled as ‘Num’.
Result
A clause which can only be used after the GROUP BY clause is HAVING. It comes
after GROUP BY (and before ORDER BY if the clause is needed as well).
The
purpose of HAVING is to set selection criteria based on some aggregate values. The
following SQL query counts the number of students in each of the classes such that its
students owe the library more than 20 dollars overdue fine in aggregate.
33
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Example 2
SELECT Class, Count(*) AS Num
FROM Student
GROUP BY Class
HAVING SUM(OverduePay) > 20
ORDER BY Class DESC;
Sample Query Q10_Group_By-Having
The result of the query is as follows:
Teaching remarks

The WHERE clause sets selection criteria for the SELECT statement based on
non-aggregate value(s) only. Any selection based on aggregate value must be
done with the HAVING clause. A common student mistake is to use some
aggregate function(s) in a WHERE clause. Aggregate functions do not work
in a WHERE clause because it is given no information as to how records (i.e.,
table rows) are to be grouped. Such grouping information is provided to the
HAVING clause by the GROUP BY clause.

The SELECT statement can reference values generated by the aggregate functions
or columns specified in the GROUP BY clause only.
SELECT Class, Count(*) AS Num
FROM Student
GROUP BY Class
HAVING SUM(OverduePay) > 20 AND Class > "3"
ORDER BY Class DESC;

The HAVING clause can reference values generated by the aggregate functions or
columns specified in the GROUP BY clause only.

As shown in the above example, the parameter (which is a column) specified in an
aggregate function referred to by the HAVING clause is not needed to be included
as a column referred to by the SELECT statement.
34
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Operators Used with WHERE
A number of operators can be used in conjunction with the WHERE clause to specify
the condition(s) for data retrieval.
The LIKE operator
Earlier on, we learnt to use the SELECT and WHERE statement to select data from
one or more table that meet specified condition(s). Most of those conditions require
an exact match. Sometimes, we may interest to retrieve data based on a partial match.
This is supported in SQL by the LIKE operator. Wildcard characters (‘_’ and ‘%’)
are used for specifying a retrieving pattern. The ‘_’ stands for any character while the
‘%’ means all character combinations (including NULL) are allowed.
Teaching remarks
 LIKE can only be used with CHAR and VARCHAR field types.
 Unless the SQL-92 syntax is selected in Microsoft Access, the database uses ‘?’
and ‘*’ for ‘_’ and ‘%’ respectively.
Syntax
SELECT Column(s) FROM TableName
WHERE Column LIKE pattern
Full Syntax
Example 1
In the following example, all students records with the name started with ‘Ch’ are
retrieved.
SELECT *
FROM Student
WHERE Name LIKE 'Ch%';
Sample Query Q11_like1
Want to Try?
Result
35
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Example 2
In this example, we would like to select all students records with the student name’s
second letter being ‘h’ and last letter being ‘i’.
SELECT *
FROM Student
WHERE Name LIKE '_h%i';
Sample Query Q11_like2
Want to Try?
Result
Example 3
The following query selects all students records with at least one ‘u’ character in.the
student name.
SELECT *
FROM Student
WHERE Name LIKE '%u%'
Sample Query Q11_like3
Want to Try?
Result
36
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The IN operator
When using the WHERE clause, it is possible to use IN to specify a list of values for a
selected column that the SELECT statement requires the retrieved rows to have.
Syntax
SELECT Column(s) FROM TableName
WHERE Column IN (value1,value2,...)
Full Syntax
The value list (which is an operand) of the IN operator can be list explicitly as shown
in the above syntax or generated by another SELECT statement. The latter is known
as nested SELECT statement which will be covered later.
Example
We use the IN operator to select records of student(s) whose name is ‘Cheung Ka Fai’
or ‘Wong Wai Ming’.
SELECT *
FROM Student
WHERE Name IN ('Cheung Ka Fai','Wong Wai Ming');
Sample Query Q12_in
Want to Try?
Result
37
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The BETWEEN Operator
We can specify a range of values for a selected column using the BETWEEN operator
within a SELECT statement in order to require the corresponding field values of the
retrieved rows to be within the specified value range in an inclusive manner.
Syntax
SELECT Column(s) FROM TableName
WHERE Column
BETWEEN value1 AND value2
Full Syntax
Example
We use the BEWTEEN operator to select students with their student ID between
0002013 and 0002015.
SELECT *
FROM Student
WHERE StdID Between '0002013' AND '0002015';
Sample Query Q13_between
Result
Teaching remark

The result of the above query may be different in various databases as some may
contain the boundary records while some may not. However, according to the
SQL-92 and SQL-99 standards, boundary records are to be included.
38
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The AND Operator
By using the AND operator, we can require retrieval row(s) of data to meet a number
of filtering conditions simultaneously.
Syntax
SELECT Column FROM TableName
WHERE Condition1 AND Condition2
Full Syntax
Example
The following query retrieve student record(s) such that the student is in class 2C and
has overdue fine to settle.
SELECT * FROM Student
WHERE Class = '2C' AND OverduePay > 0
Sample Query Q14_AND
Result
The OR operator
By using the OR operator, we can select data rows such that at least one of its
operands (which is a condition) is fulfilled.
Syntax
SELECT Column FROM TableName
WHERE Condition1 OR Condition2
Full Syntax
Example
The following query retrieves the student records from Student table such that the
student is either a member of Class 2C or his/her name being “Chang Wai Yee”.
SELECT *
FROM Student
WHERE Class='2C' OR Name='Chang Wai Yee';
Sample Query Q15_OR
39
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Result
Example - using both AND and OR Operators in a query
Retrieve the student record of a Class 2C student whose name is “Chan Ming Wai”
and the record of another student whose name is “Chang Wai Yee”
SELECT *
FROM Student
WHERE (Class='2C' AND Name='Chan Ming Wai') OR Name='Chang Wai Yee';
Sample Query Q16_ANDOR
Result
40
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Add alias to a column
Sometimes, the column name of the resultant table may not be expressive enough for
display purpose. In this case, we can assign alias to the column of resultant table using
the AS operator.
Syntax
SELECT Column1 AS ColumnAlias1, Column2 AS ColumnAlias2,...
FROM TableName
Full Syntax
Example
The following query assigns more meaningful labels to the fields retrieved from the
Student table.
SELECT StdID AS Student_ID, Name AS Student_Name, PhoneNo AS
Phone_Number
FROM Student;
Sample Query Q17_aliases
Result
41
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Joining Tables
Sometimes, we may need to retrieve data from two or more tables. In this case, we
can join tables with the use of the relevant field(s) of the tables. In most cases, tables
are joined according to search conditions that find only the rows with matching
values; this type of join is known as an inner equijoin. Occasionally, non-equijoins,
for example, that express a greater-than or less-than relationship, may be used. In
some other occasions, decision-support analysis may require outer joins, which
retrieve both matching and non-matching rows. The three types of outer joins are left
outer join, right outer join, and full outer join.
Equijoin
We can retrieve data from tables by setting up retrieval condition that requires the
column values of the “joined” tables being equal. In brief, equijoin is a join in which
rows from two tables are combined and added to the result set when there are equal
values in the joined columns.
Syntax
SELECT TableName1.Column11, TableName1.Column12,...
TableName2.Column21,TableName2.Column22,...
FROM TableName1, TableName2
WHERE equality_condition(s)
Full Syntax
Example 1 (equijoin with repeated column)
In this example, we find details of students and the library service that they have
accessed (i.e., borrow/return/reserve a book). Output will not include any student
details who did not use any library service before. In order to do so, we retrieve all
details from the LoanRecord table and the Student table where the value of column
“StdID” in both tables are equal.
SELECT *
FROM LoanRecord, Student
WHERE LoanRecord.StdID=Student.StdID;
Sample Query Q18_EJoin
Result
In the above example, the “StdID” field occurs twice in the equijoin output as it can
be found in both the LoanRecord and Student tables.
42
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Obviously there is no point in repeating the same piece of information. One of the two
identical columns can be eliminated by changing the SELECT list. The result is called
a natural join. More exactly, the natural join operation produces a Cartesian product
of its two argument tables, performs a selection that enforces equality on attributes
that appears in both tables, and removes duplicate attributes at the end.
Example 2 (natural join)
Suppose we not only want to find the list of students who have accessed library
services, but also the title of books the student borrowed/returned/reserved. To do
this, we join all the three tables with the following query.
SELECT LoanRecord.LoanRecID, Student.Name, Book.Title
FROM LoanRecord, Student, Book
WHERE LoanRecord.StdID=Student.StdID AND
LoanRecord.BookID=Book.BookID;
Sample Query Q19_EJoin2
By selecting the fields of interest only, the repeated occurrences of the same piece of
information shown in the previous example disappear, i.e. a natural join. In that sense,
the natural join is a subtype of the equijoin.
Result
Teaching remark
 In SQL, all join conditions are to be specified explicitly. The fact that two tables
have the same attribute name, (e.g. StdID in the LoadRecord and Student tables),
does not mean that a join will be done between them automatically. Omitting the
join conditions when joining tables will result in an output that corresponds to the
Cartesian product of the rows in the selected tables.
43
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The NATURAL JOIN operator
A NATURAL JOIN operation uses the column in both tables that has the same name
(and type) to perform an equijoin. However it relies on the SELECT statement to
avoid the retrieval of same pieces information for implementing the natural join
operation.
Syntax
SELECT TableName1.Column11, TableName1.Column12,...
FROM TableName1
NATURAL INNER JOIN TableName2
Full Syntax
Example
In this example, we search the list of students who have at least made use of the
library service once, just like the example showed in the second equijoin example.
However, this time we do the same query with natural join.
SELECT DISTINCT Student.Name
FROM Student
NATURAL INNER JOIN LoanRecord
Result
Name
Chan Ming Wai
Cheung Ka Fai
Wong Wai Ming
Note that the multiple occurrences of output records are eliminated with the use of
DISTINCT.
Teaching remark
 NATURAL JOIN is not supported by Access 2003. However it is easy to model
the NATURAL JOIN operation with the INNER JOIN operation as shown in the
next section.
44
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The INNER JOIN operator
Rows of two tables can be joined together by using the INNER JOIN operator when
the selected rows meet some specified condition(s). Rows that fail to meet the
conditions will not be selected. As the prevailing condition type used is the test of
equality, INNER JOIN is often used to implement the concept of equijoin.
Syntax
SELECT Column1, Column2,…
FROM TableName1
INNER JOIN TableName2
ON Condition(s)
Full Syntax
Example
This query below models the NATURAL JOIN example given in the last section.
SELECT distinct Student.Name
FROM Student
INNER JOIN LoanRecord on (Student.stdid = LoanRecord.stdid)
Sample Query Q19_InnerJoin
Resultant Table:
45
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The LEFT (OUTER) JOIN operator
The result of a LEFT JOIN operation contains every row from the first table and all
matching rows in the second table. Rows found only in the second table are not
displayed. If the rows in the first table have no match in the second table, fields
corresponding to the second tables in the output rows will be filled with null.
Syntax
SELECT Column1, Column2,...
FROM TableName1
LEFT JOIN TableName2
ON Condition(s)
Full Syntax
Example
To view all library services that the students have accessed as well as those students
who have not made use of the library services at all, we can use the following query.
SELECT Student.StdID, Student.Name, LoanRecord.LoanRecID
FROM Student
LEFT JOIN LoanRecord
ON LoanRecord.StdID=Student.StdID;
Sample Query Q19_LeftJoin
Result
46
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The RIGHT (OUTER) JOIN operator
The RIGHT JOIN will
return all the rows contained in the second table and all matching
rows in the first table. If there is no match in the first table, the fields corresponding
to the first tables in the output rows will be given a null.
Syntax
SELECT Column1, Column2,...
FROM TableName1
RIGHT JOIN TableName2
ON Condition(s)
Full Syntax
Example
To view the student ID, student name, and the types of library services that the
student had made use of, we may use the following query.
SELECT Student.StdID, Student.Name, LoanRecord.LoanRecID
FROM Student
RIGHT JOIN LoanRecord
ON LoanRecord.StdID=Student.StdID;
Sample Query Q19_RightJoin
Result
47
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The FULL (OUTER) JOIN operator
Unlike LEFT JOIN and RIGHT JOIN which do not include all non-matching rows
into the output table, the result of the FULL (OUTER) JOIN contains those rows that
are unique to each table, as well as those rows that are common to both tables. The
fields corresponding to any non-matching table rows will be given a null in the
relevant output rows.
Syntax
SELECT Column1, Column2,...
FROM TableName1
OUTER JOIN TableName2
ON Condition(s)
Full Syntax
Example
We modify the RIGHT JOIN example by replacing the RIGHT JOIN by a FULL
JOIN.
SELECT Student.StdID, Student.Name, LoanRecord.LoanRecID
FROM Student
FULL JOIN LoanRecord
ON LoanRecord.StdID = Student.StdID
Want to Try?
Result
StdID
Name
LoanRecID
0002011
0002011
0002014
0002013
0002015
0002016
0002012
0002012
Chan Ming Wai
Chan Ming Wai
Chang Wai Yee
Cheung Ka Fai
Lee Oi Lam
Sze Yuk Ki
Wong Wai Ming
Wong Wai Ming
2
5
4
1
3
Teaching remark
 FULL (OUTER) JOIN is not supported by Access 2003. However it is easy to
model the FULL (OUTER) JOIN operation by “integrating” the results of the
LEFT JOIN operation and the RIGHT JOIN operation as shown in the next
section.
48
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Combining Query Results
Results of two queries can be merged to a single resultant table through UNION and
INTERSECT. The former put all component query results into the resultant table
whereas the latter keeps rows that appear in results of both component queries only.
Query results can be removed from another query results using MINUS. Another way
to combine query results together is known as nested query which is implemented
with the use of multiple SELECT statements. In a nested query, the result of a
SELECT statement is used as a part of another SELECT statement.
The UNION operator
It may be useful to merge the results of two queries together to form a single output
table. This can be done with the UNION operator. UNION only works if each query
in the statement has the same number of columns, and each pair of the corresponding
columns is of the same type. When using UNION, all duplicating output rows are
eliminated.
Syntax
SQL_Statement1
UNION
SQL_Statement2
Example
The following example implements the FULL OUTER JOIN example using LEFT
JOIN, RIGHT JOIN and UNION.
SELECT Student.StdID,Student.Name,LoanRecord.LoanRecID
FROM Student
LEFT JOIN LoanRecord
ON LoanRecord.StdID = Student.StdID
UNION
SELECT Student.StdID,Student.Name,LoanRecord.LoanRecID
FROM Student
RIGHT JOIN LoanRecord
ON LoanRecord.StdID = Student.StdID;
Sample Query Q20_Union
Want to Try?
Result
49
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The INTERSECT operator
The INTERSECT operator returns only those rows that are common to the results
returned by two or more query expressions. INTERSECT only works if each query in
the statement has the same number of columns, and each pair of the corresponding
columns is of the same type. When using INTERSECT, all duplicating output rows
are eliminated.
Syntax
SQL_Statement1
INTERSECT
SQL_Statement2
Example
The following query identifies those students whose names have the substrings “Wai”
and “Chan”.
SELECT Name
FROM Student
WHERE Name LIKE ‘%Wai%’
INTERSECT
SELECT Name
FROM Student
WHERE Name LIKE ‘%Chan%’
Want to Try?
Result
Name
Chan Ming Wai
Chang Wai Yee
Teaching remark
 INTERSECT is not supported by Access 2003.
50
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The EXCEPT/MINUS operator
The EXCEPT/MINUS operator returns only those rows that appear in the first query
results but not the second query results. When using EXCEPT/MINUS, all
duplicating output rows are eliminated. EXCEPT is defined in SQL92 whereas
MINUS is used by Oracle for the same purpose.
Syntax
SQL_Statement1
EXCEPT
SQL_Statement2
Example
The following query identifies those students whose names have the substring “Wai”
but not “Chan”.
SELECT Name
FROM Student
WHERE Name LIKE ‘%Wai%’
EXCEPT
SELECT Name
FROM Student
WHERE Name LIKE ‘%Chan%’
Want to Try?
Result
Name
Wong Wai Ming
Teaching remark

EXCEPT/MINUS is not supported by Access 2003.
51
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Using nested SELECT statement
Besides using UNION function, we can use the nested SELECT statement to combine
query results in a way that the result of a SELECT statement can be used as the values
of some input parameter for another SELECT statement. For simplicity, we give the
syntax of nested SELECT statements that use the =ANY operator or the IN operator
only. Some other commonly used operators in nested SELECT statement are >ALL,
<ALL, >=ALL, and <=ALL. The latter two are widely used to find the maximum and
minimum values from a list of selected values respectively (see Example2)
Syntax (=ANY)
SELECT (Column1, Column2, ...)
FROM TableName1,TableName2
WHERE Column =ANY SELECT (Column1, Column2, ...) FROM TableName3
Full Syntax
Note that the =ANY operator can be replaced by the IN operator in the above case.
Example1
In this example, we would like to find students in 2C class who had used some library
service(s) before.
SELECT name
FROM Student
WHERE (StdID =ANY (SELECT StdID FROM LoanRecord)) AND Class = '2C';
Sample Query Q21_NestSelect
Another way to implement the above query is as follows:
SELECT DISTINCT Name
FROM Student, LoanRecord
WHERE Student.StdID = LoanRecord.StdID AND Class = '2C';
To save the effort of referencing the LoanRecord table given earlier, its table content
is displayed again as below.
Table “LoanRecord”
LoanRecID
StdID
1
2
3
4
5
0002012
0002011
0002012
0002013
0002011
BookID
DateOfBorrow
Status
00000001
00000002
00000003
00000002
00000002
20051001
20020112
20031211
20031001
20051018
1
2
2
2
1
52
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Result
Example2
In this example, we would like to find the student who owes the large amount of
overdue fine to the library.
SELECT Name, OverduePay
FROM Student
WHERE OverduePay >=ALL (SELECT OverduePay from Student)
Sample Query Q21_NestSelect_2
Result
53
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Arithmetic Operators/Functions
The following arithmetic operators/functions can be used in relevant expressions
within a SQL statement.
Operator/Function Description
+
The arithmetic add operator or unary plus operator
The arithmetic subtract operator or unary minus
operator
*
The multiply operator (a shorthand for all columns
after the SELECT keyword)
/
The arithmetic divide operator
ABS(numericThe ABS() function turns the value of a numeric
expresssion)
expression into its absolute value.
Table 8. Some SQL arithmetic operators/functions.
For example, if the loan period for a library item is 28 days, we can use NOW()+28 to
compute the due date for return if the item is loaned to a library user now.
String Functions
Some SQL-92 string functions are included below.
Function Type
CHAR_LENGTH(stringexpression) or
CHARACTER_LENGTH(stringexpression)
for SQL92
Description
Returns the number of characters in a stringexpression.
LENGTH(string-expression)
for Oracle
SELECT CHAR_LENGTH('library')
Example
The following statement will return the value 7.
LEN(string-expression)
for Access
LOWER(string-expression)
for SQL92
LCASE(string-expression)
for Access
Converts all letters in a string to lower case.
Example
The following statement will return 'library'.
SELECT LOWER('Library')
UPPER(string-expression)
for SQL92
UCASE(string-expression)
Converts all letters in a string to upper case.
Example
The following statement will return 'LIBRARY'.
54
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
for Access
SELECT UPPER('Library')
TRIM(string-expression)
for both SQL92 and Access
Removes leading and trailing blanks from a
string.
Example
The following statement will return the value 9.
SELECT CHAR_LENGTH(TRIM(' chocolate
' )
SUBSTRING/SUBSTR(stringexpression, start, length)
for SQL92
MID(string-expression,
length)
for Access
Returns a substring of a string.
Example
The following statement will return “library”.
start,
SELECT SUBSTRING('library system', 1,
7)
Table 9. Some SQL string functions.
Teaching remark
 It appears that many databases introduce their own built-in functions although
many of those functions in fact offer the same functionality as the corresponding
SQL-92 built-in functions. It is important to check carefully before teaching the
topic.
55
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Aggregate Functions
Aggregation functions enable the user to perform tasks on more than just one record.
They can be used to perform data calculations, such as maximum, minimum, or
average.
Function
AVG(expression)
COUNT(expression)
COUNT(*)
MIN(expression)
MAX(expression)
SUM(expression)
Usage
Computes the average value of a column by the expression
Counts the rows defined by the expression
Counts all rows in the specified table or view
Finds the minimum value in a column by the expression
Finds the maximum value in a column by the expression
Computes the sum of column values by the expression
Table 10. Some SQL aggregate functions.
The AVG function
The AVG function returns the average value of the selected column. Note that any
null values will not be included in the calculation.
Syntax
SELECT AVG(Column) FROM TableName
Example
We can calculate the average overdue payment per library user by using the AVG
SELECT AVG(OverduePay) AS Average_Overdue_Payment FROM Student
Sample Query Q22 AVG
Result
Note that the overdue payment of Cheung Ka Fai (student ID 0002013) is set to zero
and thus the computation of the average value has included the number. If the field is
set to null, the average overdue payment per user will be 13.6 instead.
56
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The COUNT function
COUNT function is useful when we would like to find the total number of records
retrieved subject to certain selection criteria. There are two kinds of COUNT
functions. They are COUNT(Expression) and COUNT (*). The first counts for the
non-null records returned by the evaluation of the Expression (which is typically a
column name). The second returns the total number of records based on the selection
criteria specified in the SELECT statement, no matter the records are NULL or not.
Syntax - COUNT (column)
SELECT COUNT(Column) FROM TableName
Example
The following query counts the number of inactive library users who have never made
use of any library service.
SELECT Count(*)-Count(LoanRecord.Status) AS Number_of_idle_users
FROM Student
LEFT JOIN LoanRecord
ON Student.StdID = LoanRecord.StdID;
Sample Query Q23_COUNT
Result
Syntax - COUNT(*)
SELECT COUNT(*) FROM TableName
Example
The following query counts the number of students whose names start with “Chan”.
SELECT Count(*) AS Number_of_students
FROM Student
WHERE (Student.Name) LIKE "Chan%";
Sample Query Q24_COUNT
Result
57
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The MAX function
The MAX function finds the maximum value in a selected table column.
Syntax
SELECT MAX(Column) FROM TableName
Example
The following query finds the student who owes to the library the largest amount of
overdue fine.
SELECT Name, OverduePay
FROM Student
WHERE OverduePay = (SELECT MAX(OverduePay) FROM Student)
Sample Query Q25_MAX
The following SQL script implements the same query without using the MAX
function.
SELECT Name, OverduePay
FROM Student
WHERE OverduePay >=ALL (SELECT OverduePay FROM Student)
Result
Teaching remark
 Many students may produce a SQL script similar to the one below for the above
query.
SELECT Name, MAX(OverduePay)
FROM Student
The above query violates the syntactic rules of SQL. The problems lies on the
fact that a number of student names can be retrieved from the Student table (which
correspond to several rows in the output table) but all aggregate functions like
MAX() returns exactly one row in the output table only.
58
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The MIN function
The MIN function finds the minimum value in a selected table column.
Syntax
SELECT MIN(Column) FROM TableName
Example
The following query finds the student who owes to the library the least amount of
overdue fine.
SELECT Name, OverduePay AS Overdue_Fine
FROM Student
WHERE OverduePay = (SELECT MIN(OverduePay) FROM Student)
Sample Query Q26_MIN
Teaching remark
 The following SQL script implements the same query without using the MIN
function.
SELECT Name, OverduePay
FROM Student
WHERE OverduePay <=ALL (SELECT OverduePay FROM Student)
Result
59
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
The SUM Function
The SUM function computes the sum of values from a selected column.
Syntax
SELECT SUM(Column) FROM TableName
Example
The query below gives the total amount of outstanding overdue fine for each class of
students.
SELECT Class, SUM(OverduePay) AS Overdue_Fine
FROM Student group by Class
Sample Query Q27_SUM
Result
60
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Miscellaneous SQL Features
Create/Drop Table Index
Indexing is commonly used to enhance the performance of a database system. With
the CREATE INDEX statement, we can create indexing structures (which is a preprocessed list) for database tables so as to provide an efficient access path to various
table rows. When running a query, database will examine any relevant index for a
more efficient data access instead of traversing the entire table. To delete an index,
the DROP INDEX statement can be used.
Syntax (CREATE INDEX)
CREATE INDEX IndexName
ON TableName(Column1,Column2,...)
Full Syntax
Syntax (DROP INDEX)
DROP INDEX IndexName
ON TableName
Example (CREATE INDEX)
In the following, we create an index for the class and student number combination in
the Student table as the two fields are often accessed by various queries.
CREATE INDEX ind_class_stdID
ON Student (class, StdID)
Sample Query Q28_CREATE_INDEX
Result
61
ASCA & ALCS Curriculum
Databases
Example (DROP INDEX)
The following delete the index that was created in the previous example.
DROP INDEX ind_class_stdID
ON Student
Sample Query Q28_DROP_INDEX
Result
62
V1.1 26/1/2006
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Exporting Data from MS Access
Most databases are equipped with some data export facility so that data within a
database can be “exported” for the use of other applications. Many of them also allow
not only export of data, but also export of table structures, queries and other database
objects. Those features enable user to migrate their data base from one database to
another database. In this section, we will briefly mention the data export facility in
Microsoft Access. Specifically it allows its users to export data as text, HTML or
Microsoft Excel format.
Export Data from an MS Access Database to Another Access Database
1.
Open the existing MS database and select the database object that you want to
export by clicking on it.
63
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
2.
Click File  Export from the menu bar
3.
Enter the file name of another Access database (.mdb) and click the Export
button
64
ASCA & ALCS Curriculum
Databases
V1.1 26/1/2006
Export Data from an MS Access Database in other file formats
1.
Open the existing MS database and select the database object that you want to
export by clicking on it.
2.
Click File  Export from the menu bar
65
ASCA & ALCS Curriculum
Databases
3.
Change the file format to “TEXT”,”HTML” or “EXCEL”
4.
Enter the file name and click the Export button
- END -
66
V1.1 26/1/2006