You are on page 1of 23

RDBMS RDBMS stands for Relational Database Management System.

RDBMS is the basis for SQL, and for all modern database systems like MS SQL Server, IBM DB2, Oracle, MySQL, and Microsoft Access. The data in RDBMS is stored in database objects called tables. A table is a collection of related data entries and it consists of columns and rows. SQL is a standard language for accessing and manipulating databases. Advantages of SQL: SQL can execute queries against a database SQL can retrieve data from a database SQL can insert records in a database SQL can update records in a database SQL can delete records from a database SQL can create new databases SQL can create new tables in a database SQL can create stored procedures in a database SQL can create views in a database SQL can set permissions on tables, procedures, and views Database Tables A database most often contains one or more tables. Each table is identified by a name (e.g. "Customers" or "Orders"). Tables contain records (rows) with data. Below is an example of a table called "Persons": P_Id 1 2 3 LastName Hansen Svendson Pettersen FirstName Ola Tove Kari Address City Timoteivn 10 Sandnes Borgvn 23 Sandnes Storgt 20 Stavanger

The table above contains three records (one for each person) and five columns (P_Id, LastName, FirstName, Address, and City). SQL Statements Most of the actions you need to perform on a database are done with SQL statements. The following SQL statement will select all the records in the "Persons" table: SELECT * FROM Persons In this tutorial we will teach you all about the different SQL statements. Keep in Mind That... SQL is not case sensitive Semicolon after SQL Statements? Some database systems require a semicolon at the end of each SQL statement. Semicolon is the standard way to separate each SQL statement in database systems that allow more than one SQL statement to be executed in the same call to the server. We are using MS Access and SQL Server 2000 and we do not have to put a semicolon after each SQL statement, but some database programs force you to use it. SQL DML and DDL SQL can be divided into two parts: The Data Manipulation Language (DML) and the Data Definition Language (DDL). The query and update commands form the DML part of SQL: SELECT UPDATE DELETE INSERT - extracts data from a database - updates data in a database - deletes data from a database INTO - inserts new data into a database

The DDL part of SQL permits database tables to be created or deleted. It also define indexes (keys), specify links between tables, and impose constraints between tables. The most important DDL statements in SQL are: CREATE DATABASE - creates a new database ALTER DATABASE - modifies a database

CREATE TABLE - creates a new table ALTER TABLE - modifies a table DROP TABLE - deletes a table CREATE INDEX - creates an index (search key) DROP INDEX - deletes an index The CREATE TABLE Statement The CREATE TABLE statement is used to create a table in a database. SQL CREATE TABLE Syntax CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type, .... ) The data type specifies what type of data the column can hold. For a complete reference of all the data types available in MS Access, MySQL, and SQL Server, go to our complete Data Types reference. CREATE TABLE Example Now we want to create a table called "Persons" that contains five columns: P_Id, LastName, FirstName, Address, and City. We use the following CREATE TABLE statement: CREATE TABLE Persons ( P_Id int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ) The P_Id column is of type int and will hold a number. The LastName, FirstName, Address, and City columns are of type varchar with a maximum length of 255 characters. The empty "Persons" table will now look like this: P_Id LastName FirstName Address City SQL Constraints Constraints are used to limit the type of data that can go into a table. Constraints can be specified when a table is created (with the CREATE TABLE statement) or after the table is created (with the ALTER TABLE statement). We will focus on the following constraints: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT SQL NOT NULL Constraint The NOT NULL constraint enforces a column to NOT accept NULL values. The NOT NULL constraint enforces a field to always contain a value. This means that you cannot insert a new record, or update a record without adding a value to this field. The following SQL enforces the "P_Id" column and the "LastName" column to not accept NULL values: CREATE TABLE Persons (P_Id int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)); SQL UNIQUE Constraint The UNIQUE constraint uniquely identifies each record in a database table. The UNIQUE and PRIMARY KEY constraints both provide a guarantee for uniqueness for a column or set of columns. A PRIMARY KEY constraint automatically has a UNIQUE constraint defined on it.

Note that you can have many UNIQUE constraints per table, but only one PRIMARY KEY constraint per table. CREATE TABLE Persons (P_Id int NOT NULL UNIQUE,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)); SQL PRIMARY KEY Constraint The PRIMARY KEY constraint uniquely identifies each record in a database table. Primary keys must contain unique values. A primary key column cannot contain NULL values. Each table should have a primary key, and each table can have only ONE primary key. CREATE TABLE Persons (P_Id int NOT NULL PRIMARY KEY,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)); SQL FOREIGN KEY Constraint A FOREIGN KEY in one table points to a PRIMARY KEY in another table. Let's illustrate the foreign key with an example. Look at the following two tables: The "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger The "Orders" table: O_Id OrderNo P_Id 1 77895 3 2 44678 3 3 22456 2 4 24562 1 Note that the "P_Id" column in the "Orders" table points to the "P_Id" column in the "Persons" table. The "P_Id" column in the "Persons" table is the PRIMARY KEY in the "Persons" table. The "P_Id" column in the "Orders" table is a FOREIGN KEY in the "Orders" table. The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables. The FOREIGN KEY constraint also prevents that invalid data form being inserted into the foreign key column, because it has to be one of the values contained in the table it points to. CREATE TABLE Orders (O_Id int NOT NULL PRIMARY KEY,OrderNo int NOT NULL,P_Id int FOREIGN KEY REFERENCES Persons(P_Id)); SQL CHECK Constraint The CHECK constraint is used to limit the value range that can be placed in a column. If you define a CHECK constraint on a single column it allows only certain values for this column. If you define a CHECK constraint on a table it can limit the values in certain columns based on values in other columns in the row. SQL CHECK Constraint on CREATE TABLE The following SQL creates a CHECK constraint on the "P_Id" column when the "Persons" table is created. The CHECK constraint specifies that the column "P_Id" must only include integers greater than 0. CREATE TABLE Persons (P_Id int NOT NULL CHECK (P_Id>0),LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255)); The ALTER TABLE Statement The ALTER TABLE statement is used to add, delete, or modify columns in an existing table. SQL ALTER TABLE Syntax

To add a column in a table, use the following syntax: ALTER TABLE table_name ADD column_name datatype To delete a column in a table, use the following syntax (notice that some database systems don't allow deleting a column): ALTER TABLE table_name DROP COLUMN column_name To change the data type of a column in a table, use the following syntax: ALTER TABLE table_name ALTER COLUMN column_name datatype SQL ALTER TABLE Example Look at the "Persons" table: P_Id LastName FirstName 1 Hansen 2 Svendson Tove 3 Pettersen Kari Address Ola Borgvn 23 Storgt 20 City Timoteivn 10 Sandnes Sandnes Stavanger

Now we want to add a column named "DateOfBirth" in the "Persons" table. We use the following SQL statement: ALTER TABLE Persons ADD DateOfBirth date Notice that the new column, "DateOfBirth", is of type date and is going to hold a date. The data type specifies what type of data the column can hold. For a complete reference of all the data types available in MS Access, MySQL, and SQL Server, go to our complete Data Types reference. The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen will now like this: FirstName Address City DateOfBirth Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger

Change Data Type Example Now we want to change the data type of the column named "DateOfBirth" in the "Persons" table. We use the following SQL statement: ALTER TABLE Persons ALTER COLUMN DateOfBirth year Notice that the "DateOfBirth" column is now of type year and is going to hold a year in a twodigit or four-digit format. DROP COLUMN Example Next, we want to delete the column named "DateOfBirth" in the "Persons" table. We use the following SQL statement: ALTER TABLE Persons DROP COLUMN DateOfBirth The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen will now like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger

The SQL SELECT Statement The SELECT statement is used to select data from a database. The result is stored in a result table, called the result-set. SQL SELECT Syntax SELECT column_name(s) FROM table_name and SELECT * FROM table_name Note Note: SQL is not case sensitive. SELECT is the same as select. An SQL SELECT Example

The "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger Now we want to select the content of the columns named "LastName" and "FirstName" from the table above. We use the following SELECT statement: SELECT LastName,FirstName FROM Persons The result-set will look like this: LastName FirstName Hansen Ola Svendson Tove Pettersen Kari SELECT * Example Now we want to select all the columns from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons Tip: The asterisk (*) is a quick way of selecting all columns! The result-set will P_Id LastName 1 Hansen 2 Svendson 3 Pettersen look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger

The SQL SELECT DISTINCT Statement In a table, some of the columns may contain duplicate values. This is not a problem, however, sometimes you will want to list only the different (distinct) values in a table. The DISTINCT keyword can be used to return only distinct (different) values. SQL SELECT DISTINCT Syntax SELECT DISTINCT column_name(s) FROM table_name SELECT DISTINCT Example The "Persons" table: P_Id LastName FirstName 1 Hansen Ola 2 Svendson Tove 3 Pettersen Kari Address City Timoteivn 10 Sandnes Borgvn 23 Sandnes Storgt 20 Stavanger

Now we want to select only the distinct values from the column named "City" from the table above. We use the following SELECT statement: SELECT DISTINCT City FROM Persons The result-set will look like this: City Sandnes Stavanger The WHERE Clause The WHERE clause is used to extract only those records that fulfill a specified criterion. SQL WHERE Syntax SELECT column_name(s) FROM table_name WHERE column_name operator value WHERE Clause Example The "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger

Now we want to select only the persons living in the city "Sandnes" from the table above. We use the following SELECT statement: SELECT * FROM Persons WHERE City='Sandnes' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes Quotes Around Text Fields SQL uses single quotes around text values (most database systems will also accept double quotes). Although, numeric values should not be enclosed in quotes. For text values: This is correct: SELECT * FROM Persons WHERE FirstName='Tove' This is wrong: SELECT * FROM Persons WHERE FirstName=Tove For numeric values: This is correct: SELECT * FROM Persons WHERE Year=1965 This is wrong: SELECT * FROM Persons WHERE Year='1965' Operators Allowed in the WHERE Clause With the WHERE clause, the following operators can be used: Operator Description = Equal <> Not equal > Greater than < Less than >= Greater than or equal <= Less than or equal BETWEEN Between an inclusive range LIKE Search for a pattern IN If you know the exact value you want to return for at least one of the columns Note: In some versions of SQL the <> operator may be written as != The AND & OR operators are used to filter records based on more than one condition. The AND & OR Operators The AND operator displays a record if both the first condition and the second condition is true. The OR operator displays a record if either the first condition or the second condition is true. AND Operator Example The "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger Now we want to select only the persons with the first name equal to "Tove" AND the last name equal to "Svendson": We use the following SELECT statement: SELECT * FROM Persons WHERE FirstName='Tove' AND LastName='Svendson' The result-set will look like this: P_Id LastName FirstName Address City 2 Svendson Tove Borgvn 23 Sandnes OR Operator Example

Now we want to select only the persons with the first name equal to "Tove" OR the first name equal to "Ola": We use the following SELECT statement: SELECT * FROM Persons WHERE FirstName='Tove' OR FirstName='Ola' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes Combining AND & OR You can also combine AND and OR (use parenthesis to form complex expressions). Now we want to select only the persons with the last name equal to "Svendson" AND the first name equal to "Tove" OR to "Ola": We use the following SELECT statement: SELECT * FROM Persons WHERE LastName='Svendson' AND (FirstName='Tove' OR FirstName='Ola') The result-set will look like this: P_Id LastName FirstName Address 2 Svendson Tove Borgvn 23 The ORDER BY Keyword The ORDER BY keyword is used to sort the result-set by a specified column. The ORDER BY keyword sort the records in ascending order by default. If you want to sort the records in a descending order, you can use the DESC keyword. SQL ORDER BY Syntax SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC ORDER BY Example The "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger 4 Nilsen Tom Vingvn 23 Stavanger Now we want to select all the persons from the table above, however, we want to sort the persons by their last name. We use the following SELECT statement: SELECT * FROM Persons ORDER BY LastName The result-set will P_Id LastName 1 Hansen 4 Nilsen 3 Pettersen 2 Svendson look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tom Vingvn 23 Stavanger Kari Storgt 20 Stavanger Tove Borgvn 23 Sandnes City Sandnes

ORDER BY DESC Example Now we want to select all the persons from the table above, however, we want to sort the persons descending by their last name. We use the following SELECT statement: SELECT * FROM Persons ORDER BY LastName DESC The result-set will P_Id LastName 2 Svendson 3 Pettersen 4 Nilsen look like this: FirstName Address City Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger Tom Vingvn 23 Stavanger

Hansen

Ola

Timoteivn 10 Sandnes

The INSERT INTO Statement The INSERT INTO statement is used to insert a new row in a table. SQL INSERT INTO Syntax It is possible to write the INSERT INTO statement in two forms. The first form doesn't specify the column names where the data will be inserted, only their values: INSERT INTO table_name VALUES (value1, value2, value3,...) The second form specifies both the column names and the values to be inserted: INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...) SQL INSERT INTO Example We have the following "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger Now we want to insert a new row in the "Persons" table. We use the following SQL statement: INSERT INTO Persons VALUES (4,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger') The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen 4 Nilsen will now look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger Johan Bakken 2 Stavanger

Insert Data Only in Specified Columns It is also possible to only add data in specific columns. The following SQL statement will add a new row, but only add data in the "P_Id", "LastName" and the "FirstName" columns: INSERT INTO Persons (P_Id, LastName, FirstName) VALUES (5, 'Tjessem', 'Jakob') The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen 4 Nilsen 5 Tjessem will now look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger Johan Bakken 2 Stavanger Jakob

The UPDATE Statement The UPDATE statement is used to update existing records in a table. SQL UPDATE Syntax UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value Note: Notice the WHERE clause in the UPDATE syntax. The WHERE clause specifies which record or records that should be updated. If you omit the WHERE clause, all records will be updated! SQL UPDATE Example The "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger 4 Nilsen Johan Bakken 2 Stavanger 5 Tjessem Jakob Now we want to update the person "Tjessem, Jakob" in the "Persons" table.

We use the following SQL statement: UPDATE Persons SET Address='Nissestien 67', City='Sandnes' WHERE LastName='Tjessem' AND FirstName='Jakob' The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen 4 Nilsen 5 Tjessem SQL UPDATE Warning Be careful when updating records. If we had omitted the WHERE clause in the example above, like this: UPDATE Persons SET Address='Nissestien 67', City='Sandnes' The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen 4 Nilsen 5 Tjessem would have looked like this: FirstName Address City Ola Nissestien 67 Sandnes Tove Nissestien 67 Sandnes Kari Nissestien 67 Sandnes Johan Nissestien 67 Sandnes Jakob Nissestien 67 Sandnes will now look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger Johan Bakken 2 Stavanger Jakob Nissestien 67 Sandnes

The DELETE Statement The DELETE statement is used to delete rows in a table. SQL DELETE Syntax DELETE FROM table_name WHERE some_column=some_value Note: Notice the WHERE clause in the DELETE syntax. The WHERE clause specifies which record or records that should be deleted. If you omit the WHERE clause, all records will be deleted! SQL DELETE Example The "Persons" table: P_Id LastName FirstName 1 Hansen Ola 2 Svendson Tove 3 Pettersen Kari 4 Nilsen Johan 5 Tjessem Jakob Address City Timoteivn 10 Sandnes Borgvn 23 Sandnes Storgt 20 Stavanger Bakken 2 Stavanger Nissestien 67 Sandnes

Now we want to delete the person "Tjessem, Jakob" in the "Persons" table. We use the following SQL statement: DELETE FROM Persons WHERE LastName='Tjessem' AND FirstName='Jakob' The "Persons" table P_Id LastName 1 Hansen 2 Svendson 3 Pettersen 4 Nilsen Delete All Rows It is possible to delete all rows in a table without deleting the table. This means that the table structure, attributes, and indexes will be intact: DELETE FROM table_name or DELETE * FROM table_name Note: Be very careful when deleting records. You cannot undo this statement! The LIKE Operator The LIKE operator is used to search for a specified pattern in a column. SQL LIKE Syntax SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern will now look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger Johan Bakken 2 Stavanger

LIKE Operator Example The "Persons" table: P_Id LastName FirstName 1 Hansen Ola 2 Svendson Tove 3 Pettersen Kari Address City Timoteivn 10 Sandnes Borgvn 23 Sandnes Storgt 20 Stavanger

Now we want to select the persons living in a city that starts with "s" from the table above. We use the following SELECT statement: SELECT * FROM Persons WHERE City LIKE 's%' The "%" sign can be used to define wildcards (missing letters in the pattern) both before and after the pattern. The result-set will P_Id LastName 1 Hansen 2 Svendson 3 Pettersen look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes Kari Storgt 20 Stavanger

Next, we want to select the persons living in a city that ends with an "s" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE City LIKE '%s' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes Next, we want to select the persons living in a city that contains the pattern "tav" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE City LIKE '%tav%' The result-set will look like this: P_Id LastName FirstName Address 3 Pettersen Kari Storgt 20 City Stavanger

It is also possible to select the persons living in a city that NOT contains the pattern "tav" from the "Persons" table, by using the NOT keyword. We use the following SELECT statement: SELECT * FROM Persons WHERE City NOT LIKE '%tav%' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes SQL Wildcards SQL wildcards can substitute for one or more characters when searching for data in a database. SQL wildcards must be used with the SQL LIKE operator. With SQL, the following wildcards can be used: Wildcard Description % A substitute for zero or more characters _ A substitute for exactly one character [charlist] Any single character in charlist [^charlist] or [!charlist] Any single character not in charlist SQL Wildcard Examples

We have the following "Persons" table: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger Using the % Wildcard Now we want to select the persons living in a city that starts with "sa" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE City LIKE 'sa%' The result-set will P_Id LastName 1 Hansen 2 Svendson look like this: FirstName Address City Ola Timoteivn 10 Sandnes Tove Borgvn 23 Sandnes

Next, we want to select the persons living in a city that contains the pattern "nes" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE City LIKE '%nes%' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes Using the _ Wildcard Now we want to select the persons with a first name that starts with any character, followed by "la" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE FirstName LIKE '_la' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes Next, we want to select the persons with a last name that starts with "S", followed by any character, followed by "end", followed by any character, followed by "on" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE LastName LIKE 'S_end_on' The result-set will look like this: P_Id LastName FirstName Address 2 Svendson Tove Borgvn 23 Using the [charlist] Wildcard Now we want to select the persons with a last name that starts with "b" or "s" or "p" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE LastName LIKE '[bsp]%' The result-set will P_Id LastName 2 Svendson 3 Pettersen look like this: FirstName Address Tove Borgvn 23 Kari Storgt 20 City Sandnes Stavanger City Sandnes

Next, we want to select the persons with a last name that do not start with "b" or "s" or "p" from the "Persons" table. We use the following SELECT statement: SELECT * FROM Persons WHERE LastName LIKE '[!bsp]%'

The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes The IN Operator The IN operator allows you to specify multiple values in a WHERE clause. SQL IN Syntax SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...) IN Operator Example The "Persons" table: P_Id LastName FirstName 1 Hansen Ola 2 Svendson Tove 3 Pettersen Kari Address City Timoteivn 10 Sandnes Borgvn 23 Sandnes Storgt 20 Stavanger

Now we want to select the persons with a last name equal to "Hansen" or "Pettersen" from the table above. We use the following SELECT statement: SELECT * FROM Persons WHERE LastName IN ('Hansen','Pettersen') The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 3 Pettersen Kari Storgt 20 Stavanger The BETWEEN Operator The BETWEEN operator selects a range of data between two values. The values can be numbers, text, or dates. SQL BETWEEN Syntax SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 BETWEEN Operator Example The "Persons" table: P_Id LastName FirstName 1 Hansen Ola 2 Svendson Tove 3 Pettersen Kari Address City Timoteivn 10 Sandnes Borgvn 23 Sandnes Storgt 20 Stavanger

Now we want to select the persons with a last name alphabetically between "Hansen" and "Pettersen" from the table above. We use the following SELECT statement: SELECT * FROM Persons WHERE LastName BETWEEN 'Hansen' AND 'Pettersen' The result-set will look like this: P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes Note: The BETWEEN operator is treated differently in different databases! In some databases, persons with the LastName of "Hansen" or "Pettersen" will not be listed, because the BETWEEN operator only selects fields that are between and excluding the test values. In other databases, persons with the LastName of "Hansen" or "Pettersen" will be listed, because the BETWEEN operator selects fields that are between and including the test values. And in other databases, persons with the LastName of "Hansen" will be listed, but "Pettersen" will not be listed (like the example above), because the BETWEEN operator selects fields between the test values, including the first test value and excluding the last test value. Therefore: Check how your database treats the BETWEEN operator. Example 2 To display the persons outside the range in the previous example, use NOT BETWEEN: SELECT * FROM Persons

WHERE LastName NOT BETWEEN 'Hansen' AND 'Pettersen' The result-set will P_Id LastName 2 Svendson 3 Pettersen SQL Alias You can give a table or a column another name by using an alias. This can be a good thing to do if you have very long or complex table names or column names. An alias name could be anything, but usually it is short. SQL Alias Syntax for Tables SELECT column_name(s) FROM table_name AS alias_name SQL Alias Syntax for Columns SELECT column_name AS alias_name FROM table_name Alias Example Assume we have a table called "Persons" and another table called "Product_Orders". We will give the table aliases of "p" and "po" respectively. Now we want to list all the orders that "Ola Hansen" is responsible for. We use the following SELECT statement: SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Hansen' AND p.FirstName='Ola' The same SELECT statement without aliases: SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Product_Orders WHERE Persons.LastName='Hansen' AND Persons.FirstName='Ola' As you'll see from the two SELECT statements above; aliases can make queries easier to both write and to read. SQL Set Operators: The SQL UNION Operator The UNION operator is used to combine the result-set of two or more SELECT statements. Notice that each SELECT statement within the UNION must have the same number of columns. The columns must also have similar data types. Also, the columns in each SELECT statement must be in the same order. SQL UNION Syntax SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 Note: The UNION operator selects only distinct values by default. To allow duplicate values, use UNION ALL. SQL UNION ALL Syntax SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 PS: The column names in the result-set of a UNION are always equal to the column names in the first SELECT statement in the UNION. SQL UNION Example Look at the following tables: "Employees_Norway": E_ID E_Name 01 Hansen, Ola 02 Svendson, Tove 03 Svendson, Stephen 04 Pettersen, Kari "Employees_USA": look like this: FirstName Address Tove Borgvn 23 Kari Storgt 20 City Sandnes Stavanger

E_ID 01 02 03 04

E_Name Turner, Sally Kent, Clark Svendson, Stephen Scott, Stephen

Now we want to list all the different employees in Norway and USA. We use the following SELECT statement: SELECT E_Name FROM Employees_Norway UNION SELECT E_Name FROM Employees_USA The result-set will look like this: E_Name Hansen, Ola Svendson, Tove Svendson, Stephen Pettersen, Kari Turner, Sally Kent, Clark Scott, Stephen Note: This command cannot be used to list all employees in Norway and USA. In the example above we have two employees with equal names, and only one of them will be listed. The UNION command selects only distinct values. SQL UNION ALL Example Now we want to list all employees in Norway and USA: SELECT E_Name FROM Employees_Norway UNION ALL SELECT E_Name FROM Employees_USA Result E_Name Hansen, Ola Svendson, Tove Svendson, Stephen Pettersen, Kari Turner, Sally Kent, Clark Svendson, Stephen Scott, Stephen SQL Functions: SQL Aggregate Functions SQL aggregate functions return a single value, calculated from values in a column. Useful aggregate functions: AVG() - Returns the average value COUNT() - Returns the number of rows FIRST() - Returns the first value LAST() - Returns the last value MAX() - Returns the largest value MIN() - Returns the smallest value SUM() - Returns the sum SUBQUERIES A query nested within a query is known as subquery. For example, you want to see all the employees whose salary is above average salary. For this you have to first compute the average salary using AVG function and then compare employees salaries with this computed salary. This is possible using subquery. Here the sub query will first compute the average salary and then main query will execute. Select * from emp where sal > (select avg(sal) from emp); Similarly we want to see the name and empno of that employee whose salary is maximum. Select * from emp where sal = (select max(sal) from emp); To see second maximum salary Select max(sal) from emp where

sal < (select max(sal) from emp); Similarly to see the Third highest salary. Select max(sal) from emp where sal < (select max(sal) from emp Where sal < (select max(sal) from emp)); We want to see how many employees are there whose salary is above average. Select count(*) from emp where sal > (select max(sal) from emp); We want to see those employees who are working in Hyderabad. Remember emp and dept are joined on deptno and city column is in the dept table. Assuming that wherever the department is located the employee is working in that city. Select * from emp where deptno in (select deptno from dept where city=HYD); You can also use subquery in FROM clause of SELECT statement. For example the following query returns the top 5 salaries from employees table. Select sal from (select sal from emp order sal desc) where rownum <= 5; To see the sum salary deptwise you can give the following query. Select sum(sal) from emp group by deptno; Now to see the average total salary deptwise you can give a sub query in FROM clause. select WITH avg(depttotal) from (select sum(sal) as depttotal from emp group by deptno);

The above average total salary department wise can also be achieved in 9i using WITH clause given below WITH DEPTOT AS (select sum(sal) as dsal from emp group by deptno) select avg(dsal) from deptot; GROUP BY QUERIES You can group query results on some column values. When you give a SELECT statement without group by clause then all the resultant rows are treated as a single group. For Example, we want to see the sum salary of all employees dept wise. Then the following query will achieved the result Select deptno,sum(sal) from emp group by deptno; Similarly we want to see the average salary dept wise Select deptno,avg(sal) from emp group by deptno; Similarly we want to see the maximum salary in each department. Select deptno,max(sal) from emp group by deptno; Similarly the minimum salary. Select deptno,min(sal) from emp group by deptno; Now we want to see the number of employees working in each department. Select deptno,count(*) from emp group by deptno;

Now we want to see total salary department wise where the dept wise total salary is above 5000. For this you have to use HAVING clause. Remember HAVING clause is used to filter groups and WHERE clause is used to filter rows. You cannot use WHERE clause to filter groups. select deptno,sum(sal) from emp group by deptno having sum(sal) >= 5000; We want to see those departments of employees is more than 2. and the number of employees working in them where the number

Select deptno, count(*) from emp group by deptno Having count(*) >=2; Instead of displaying deptno you can also display deptnames by using join conditions.

For example we want to see deptname and average salary of them. Select dname,avg(sal) from emp,dept where emp.deptno=dept.deptno group by dname; Similarly to see sum of sal. Select dname,sum(sal) from emp,dept where emp.deptno=dept.deptno group by dname; Now we want to see the cities name and the no of employees working in each city. Remember emp and dept are joined on deptno and city column is in the dept table. Assuming that wherever the department is located the employee is working in that city. Select dept.city,count(empno) from emp,dept where emp.deptno=dept.deptno Group by dept.city; ROLLUP The ROLLUP operation in the simple_grouping_clause groups the selected rows based on the values of the first n, n-1, n-2, ... 0 expressions in the GROUP BY specification, and returns a single row of summary for each group. You can use the ROLLUP operation to produce subtotal values by using it with the SUM function. When used with SUM, ROLLUP generates subtotals from the most detailed level to the grand total. Aggregate functions such as COUNT can be used to produce other kinds of superaggregates. For example, given three expressions (n=3) in the ROLLUP clause of the simple_grouping_clause, the operation results in n+1 = 3+1 = 4 groupings. Rows grouped on the values of the first 'n' expressions are called regular rows, and the others are called superaggregate rows. The following query uses rollup operation to show sales amount product wise and year wise. To see the structure of the sales table refer to appendices. Select prod,year,sum(amt) from sales group by rollup(prod,year); CUBE The CUBE operation in the simple_grouping_clause groups the selected rows based on the values of all possible combinations of expressions in the specification, and returns a single row of summary information for each group. You can use the CUBE operation to produce cross-tabulation values. For example, given three expressions (n=3) in the CUBE clause of the simple_grouping_clause, the operation results in 2n = 23 = 8 groupings. Rows grouped on the values of 'n' expressions are called regular rows, and the rest are called superaggregate rows. The following query uses CUBE operation to show sales amount product wise and year wise. To see the structure of the sales table refer to appendices. Select prod,year,sum(amt) from sales group by CUBE(prod,year);

CASE EXPRESSION CASE expressions let you use IF ... THEN ... ELSE logic in SQL statements without having to invoke procedures. For example the following query uses CASE expression to display Department Names based on deptno. Select empno,ename,sal,CASE deptno when 10 then Accounts When 20 then Sales When 30 then R&D Else Unknown end From emp; The following statement finds the average salary of the employees in the employees table using $2000 as the lowest salary possible: SELECT AVG(CASE WHEN e.sal > 2000 THEN e.sal ELSE 2000 END) "Average Salary" from emp e; A Join is the process of combining data from two or more tables. The DBMS takes all combinations of rows from the given tables. Cross Join: Join without filter conditions. A Cross Join is the Cartesian product or the result of all possible combinations of the rows from each of the tables involved in the join operation. This occurs when, no specific Join conditions (filters) are specified. For eg: there are 3 tables A,B and C with 10,20 and 30 number of rows respectively. So a cartesian production would happen in the below scenario, Select A.col1, B.col2, C.col3 from A, B, C --No where condition which returns 10x20x30=6000 records are result. Thus the number of rows in a Cartesian product of two tables is equal to the number of rows in the first table times the number of rows in the second table. Never use this kind of joins unless unavaidable as this takes huge amount of memory to sort and store Natural Join: These are ANSI Joins which are used for portability. You can use this in almost all Standard Databases like Oracle, Microsoft SQL Server etc.One thing to be aware of though is the NATURAL JOIN facility, which allows you to miss off the join condition completely if the tables concerned share common column names on which you want to join. SELECT DNAME, ENAME, MGR FROM DEPARTMENTS NATURAL JOIN EMPLOYEES;

PS: Both tables should have primary key-referential key relationship.

Self Join:

Sometimes there are scenarios where we might need to do Join operations within the same table. Such joins which refers to the same, single table are known as a Self Joins

For Eg: If you need to get all employees and their managers, then you could do a self join. SELECT FROM E1.ENAME||' reports to '||E2.ENAME EMP E1, EMP E2

WHERE

E1.MGR = E2.EMPNO;

PS: This is just to show an example for Self Join. The results may not be accurate. Inner Join or Simple Join or Equi Join: Inner joins returns only the rows from the cross product that meets the join condition/s. SELECT ENAME, JOB, DEPT.DEPTNO, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

Returns data only from those records which matches the condition EMP.DEPTNO = DEPT.DEPTNO, from both tables. Outer Join: They are of 2 types: a) Left Outer Join b) Right Outer Join

Suppose there are 2 tables A and B. Left Outer Join Returns all records from table A and only those matching with the join operation from Table B For eg: SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO (+);

Returns all records from EMP and only those records from DEPT which matches the condition EMP.DEPTNO = DEPT.DEPTNO Right Outer Join Returns all records from table B and only those matching with the join operation from Table A (just the reverse of left outer join) For eg: SELECT * FROM EMP, DEPT WHERE EMP.DEPTNO (+) = DEPT.DEPTNO ;

Returns all records from DEPT and only those records from EMP which matches the condition EMP.DEPTNO = DEPT.DEPTNO Set Operator UNION Returns all distinct rows selected by either query.

SELECT * FROM

(SELECT ENAME FROM EMP WHERE JOB = 'CLERK' UNION SELECT ENAME FROM EMP WHERE JOB = 'ANALYST'); UNION ALL Returns all rows selected by either query, including all duplicates. SELECT * FROM (SELECT SAL FROM EMP WHERE JOB = 'CLERK' UNION SELECT SAL FROM EMP WHERE JOB = 'ANALYST'); INTERSECT and INTERSECT ALL Returns all distinct rows selected by both queries. SELECT * FROM orders_list1 INTERSECT SELECT * FROM orders_list2 MINUS Returns all distinct rows selected by the first query but not the second. SELECT * FROM (SELECT SAL FROM EMP WHERE JOB = 'PRESIDENT' MINUS SELECT SAL FROM EMP WHERE JOB = 'MANAGER'); PL/SQL stands for Procedural Language extension of SQL. PL/SQL is a combination of SQL along with the procedural features of programming languages. It was developed by Oracle Corporation in the early 90s to enhance the capabilities of SQL. A Simple PL/SQL Block: Each PL/SQL program consists of SQL and PL/SQL statements which from a PL/SQL block.

A PL/SQL Block consists of three sections: The Declaration section (optional). The Execution section (mandatory). The Exception (or Error) Handling section (optional). Declaration Section: The Declaration section of a PL/SQL Block starts with the reserved keyword DECLARE. This section is optional and is used to declare any placeholders like variables, constants, records and cursors, which are used to manipulate data in the execution section. Placeholders may be any of Variables, Constants and Records, which stores data temporarily. Cursors are also declared in this section. Execution Section: The Execution section of a PL/SQL Block starts with the reserved keyword BEGIN and ends with END. This is a mandatory section and is the section where the program logic is written to perform any task. The programmatic constructs like loops, conditional statement and SQL statements form the part of execution section. Exception Section: The Exception section of a PL/SQL Block starts with the reserved keyword EXCEPTION. This section is optional. Any errors in the program can be handled in this section, so that the PL/SQL Blocks terminates gracefully. If the PL/SQL Block contains exceptions that cannot be handled, the Block terminates abruptly with errors. Every statement in the above three sections must end with a semicolon ; . PL/SQL blocks can be nested within other PL/SQL blocks. Comments can be used to document code. This is how a sample PL/SQL Block looks. DECLARE Variable declaration BEGIN Program Execution EXCEPTION Exception handling END; Advantages of PL/SQL These are the advantages of PL/SQL. Block Structures: PL SQL consists of blocks of code, which can be nested within each other. Each block forms a unit of a task or a logical module. PL/SQL Blocks can be stored in the database and reused. Procedural Language Capability: PL SQL consists of procedural language constructs such as conditional statements (if else statements) and loops like (FOR loops). Better Performance: PL SQL engine processes multiple SQL statements simultaneously as a single block, thereby reducing network traffic. Error Handling: PL/SQL handles errors or exceptions effectively during the execution of a PL/SQL program. Once an exception is caught, specific actions can be taken depending upon the type of the exception or it can be displayed to the user with a message. PL/SQL Placeholders Placeholders are temporary storage area. Placeholders can be any of Variables, Constants and Records. Oracle defines placeholders to store data temporarily, which are used to manipulate data during the execution of a PL SQL block. Depending on the kind of data you want to store, you can define placeholders with a name and a datatype. Few of the datatypes used to define placeholders are as given below. Number (n,m) , Char (n) , Varchar2 (n) , Date , Long , Long raw, Raw, Blob, Clob, Nclob, Bfile PL/SQL Variables These are placeholders that store the values that can change through the PL/SQL Block. The General Syntax to declare a variable is: variable_name datatype [NOT NULL := value ]; variable_name is the name of the variable. datatype is a valid PL/SQL datatype. NOT NULL is an optional specification on the variable.

value or DEFAULT valueis also an optional specification, where you can initialize a variable. Each variable declaration is a separate statement and must be terminated by a semicolon. For example, if you want to store the current salary of an employee, you can use a variable. DECLARE salary number (6);

* salary is a variable of datatype number and of length 6. When a variable is specified as NOT NULL, you must initialize the variable when it is declared. For example: The below example declares two variables, one of which is a not null. DECLARE salary number(4); dept varchar2(10) NOT NULL := HR Dept; The value of a variable can change in the execution or exception section of the PL/SQL Block. We can assign values to variables in the two ways given below. 1) We can directly assign values to variables. The General Syntax is: variable_name:= value;

2) We can assign values to variables directly from the database columns by using a SELECT.. INTO statement. The General Syntax is: SELECT column_name INTO variable_name FROM table_name [WHERE condition]; Example: The below program will get the salary of an employee with id '1116' and display it on the screen. DECLARE var_salary number(6); var_emp_id number(6) = 1116; BEGIN SELECT salary INTO var_salary FROM employee WHERE emp_id = var_emp_id; dbms_output.put_line(var_salary); dbms_output.put_line('The employee ' || var_emp_id || ' has END; / NOTE: The backward slash '/' in the above program indicates to execute the above PL/SQL Block. Scope of Variables PL/SQL allows the nesting of Blocks within Blocks i.e, the Execution section of an outer block can contain inner blocks. Therefore, a variable which is accessible to an outer Block is also accessible to all nested inner Blocks. The variables declared in the inner blocks are not accessible to outer blocks. Based on their declaration we can classify variables into two types. salary ' || var_salary);

Local variables - These are declared in a inner block and cannot be referenced by outside Blocks. Global variables - These are declared in a outer block and can be referenced by its itself and by its inner blocks. For Example: In the below example we are creating two variables in the outer block and assigning thier product to the third variable created in the inner block. The variable 'var_mult' is declared in the inner block, so cannot be accessed in the outer block i.e. it cannot be accessed after line 11. The variables 'var_num1' and 'var_num2' can be accessed anywhere in the block. DECLARE var_num1 number; var_num2 number; BEGIN var_num1 := 100; var_num2 := 200; DECLARE var_mult number; BEGIN var_mult := var_num1 * var_num2; END; END; / PL/SQL Constants As the name implies a constant is a value used in a PL/SQL Block that remains unchanged throughout the program. A constant is a user-defined literal value. You can declare a constant and use it instead of actual value. For example: If you want to write a program which will increase the salary of the employees by 25%, you can declare a constant and use it throughout the program. Next time when you want to increase the salary again you can change the value of the constant which will be easier than changing the actual value throughout the program. The General Syntax to declare a constant is: constant_name CONSTANT datatype := VALUE; constant_name is the name of the constant i.e. similar to a variable name. The word CONSTANT is a reserved word and ensures that the value does not change. VALUE - It is a value which must be assigned to a constant when it is declared. You cannot assign a value later. For example, to declare salary_increase, you can write code as follows: DECLARE salary_increase CONSTANT number (3) := 10; You must assign a value to a constant at the time you declare it. If you do not assign a value to a constant while declaring it and try to assign a value in the execution section, you will get a error. If you execute the below Pl/SQL block you will get error. DECLARE salary_increase CONSTANT number(3); BEGIN salary_increase := 100; dbms_output.put_line (salary_increase); END; Iterative or Loop Statements

An iterative control Statements are used when we want to repeat the execution of one or more statements for specified number of times. There are three types of loops in PL/SQL: Simple Loop While Loop For Loop 1) Simple Loop A Simple Loop is used when a set of statements is to be executed at least once before the loop terminates. An EXIT condition must be specified in the loop, otherwise the loop will get into an infinite number of iterations. When the EXIT condition is satisfied the process exits from the loop. Syntax: LOOP statements; EXIT; {or EXIT WHEN condition;} END LOOP; These are the important steps to be followed while using Simple Loop. 1) Initialise a variable before the loop body. 2) Increment the variable in the loop. 3) Use a EXIT WHEN statement to exit from the Loop. If you use a EXIT statement without WHEN condition, the statements in the loop is executed only once. Sample Program to display 1 to 10 numbers DECLARE num number; BEGIN num := 1; Loop dbms_output.put_line(num); num++; Exit when n > 10; End loop; End; 2) While Loop A WHILE LOOP is used when a set of statements has to be executed as long as a condition is true. The condition is evaluated at the beginning of each iteration. The iteration continues until the condition becomes false. Syntax: WHILE <condition> LOOP statements; END LOOP; Important steps to follow when executing a while loop: 1) Initialise a variable before the loop body. 2) Increment the variable in the loop. 3) EXIT WHEN statement and EXIT statements can be used in while loops but it's not done oftenly. sample Program to display even numbers below 20 DECLARE num number; BEGIN num := 2; while num <= 20 Loop dbms_output.put_line(num); num := num + 2;

End Loop; End; 3) FOR Loop A FOR LOOP is used to execute a set of statements for a predetermined number of times. Iteration occurs between the start and end integer values given. The counter is always incremented by 1. The loop exits when the counter reachs the value of the end integer. Syntax: FOR counter IN val1..val2 LOOP statements; END LOOP; val1 - Start integer value. val2 - End integer value. Important steps to follow when executing a for loop: 1) to 2) 3) The counter variable is implicitly declared in the declaration section, so it's not necessary declare it explicity. The counter variable is incremented by 1 and does not need to be incremented explicitly. EXIT WHEN statement and EXIT statements can be used in FOR loops but it's not done oftenly.

Smple Program to display factorial of the given number DECLARE num number; fact number; BEGIN num := &num; fact := 1; For a in 1..num Loop fact := fact * a; a := a + 1; End Loop; dbms_output.put_line('Factorial = ' || fact); End;

You might also like