SQL Basic: SQL Introduction SQL Select SQL Where SQL Insert Into SQL Update SQL Delete
SQL Basic: SQL Introduction SQL Select SQL Where SQL Insert Into SQL Update SQL Delete
SQL Introduction Describes what SQL is, and how it can be used. SQL SELECT How to use the SELECT statement to select data from a table in SQL. SQL WHERE How to use the WHERE clause to specify a criterion for the selection. SQL INSERT INTO How to use the INSERT INTO statement to insert new rows into a table. SQL UPDATE How to use the UPDATE statement to update or change rows in a table. SQL DELETE How to use the DELETE statement to delete rows in a table.
SQL Demo
SQL Try It Test your SQL skills!
SQL Advanced
SQL ORDER BY How to use the ORDER BY keywords to return rows in a defined order. SQL AND & OR How to use AND and OR to join two or more conditions in a WHERE clause. SQL IN How to use the IN operator. SQL BETWEEN...AND How to use BETWEEN....AND to find data in a range. SQL Aliases How to use aliases for column names and table names. SQL JOIN How to select information from multiple tables. SQL UNION How to select information from two tables with the UNION and UNION ALL commands. SQL CREATE How to create databases, tables, and indices. SQL DROP How to delete databases, tables, and indices. SQL ALTER TABLE How to use the ALTER TABLE statement to add or drop columns in an existing table. SQL Functions How to use the built-in functions in SQL. SQL GROUP BY How to use the built-in GROUP BY function in SQL. SQL SELECT INTO How to use the SELECT INTO statement to create backup copies of tables.
What is SQL?
SQL stands for Structured Query Language SQL allows you to access a database SQL is an ANSI standard computer language SQL can execute queries against a database SQL can retrieve data from a database SQL can insert new records in a database SQL can delete records from a database SQL can update records in a database SQL is easy to learn
SQL Queries
With SQL, we can query a database and have a result set returned. A query like this: SELECT LastName FROM Persons Gives a result set like this: LastName Hansen Svendson Pettersen Note: Some database systems require a semicolon at the end of the SQL statement. We don't use the semicolon in our tutorials.
Syntax
SELECT column_name(s) FROM table_name
City
Syntax
SELECT DISTINCT column_name(s) FROM table_name
Company Sega W3Schools Trio Now "W3Schools" is listed only once in the result-set.
Syntax
SELECT column FROM table WHERE column operator value 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 Note: In some versions of SQL the <> operator may be written as !=
Using Quotes
Note that we have used single quotes around the conditional values in the examples. SQL uses single quotes around text values (most database systems will also accept double quotes). Numeric values should not be enclosed in quotes. For text values: This is correct:
SELECT * FROM Persons This is wrong: SELECT * FROM Persons For numeric values: This is correct: SELECT * FROM Persons This is wrong: SELECT * FROM Persons
Syntax
SELECT column FROM table WHERE column LIKE pattern A "%" sign can be used to define wildcards (missing letters in the pattern) both before and after the pattern.
Using LIKE
The following SQL statement will return persons with first names that start with an 'O': SELECT * FROM Persons WHERE FirstName LIKE 'O%' The following SQL statement will return persons with first names that end with an 'a': SELECT * FROM Persons WHERE FirstName LIKE '%a' The following SQL statement will return persons with first names that contain the pattern 'la': SELECT * FROM Persons WHERE FirstName LIKE '%la%'
Syntax
INSERT INTO table_name VALUES (value1, value2,....) You can also specify the columns for which you want to insert data: INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)
City
Pettersen Hetland
Kari Camilla
Storgt 20 Hagabakka 24
Stavanger Sandnes
Syntax
UPDATE table_name SET column_name = new_value WHERE column_name = some_value Person: LastName Nilsen Rasmussen Fred FirstName Kirkegt 56 Storgt 67 Address Stavanger City
City Stavanger
City
Nilsen Rasmussen
Fred Nina
Kirkegt 56 Stien 12
Stavanger Stavanger
Syntax
DELETE FROM table_name WHERE column_name = some_value Person: LastName Nilsen Rasmussen FirstName Fred Nina Kirkegt 56 Stien 12 Address Stavanger Stavanger City
Delete a Row
"Nina Rasmussen" is going to be deleted: DELETE FROM Person WHERE LastName = 'Rasmussen' Result LastName FirstName Address Nilsen Fred Kirkegt 56
City Stavanger
Address Obere Str. 57 Mataderos 2312 Berguvsvgen 8 Kirchgasse 6 South House 300 Queensbridge Gran Va, 1 Vinbltet 34 89 Jefferson Way Suite 2 ul. Filtrowa 68
City Berlin Mxico D.F. Lule Graz London Madrid Kbenhavn Portland Warszawa
Try it Yourself
To see how SQL works, you can copy the SQL statements below and paste them into the textarea, or you can make your own SQL statements. SELECT * FROM customers SELECT CompanyName, ContactName FROM customers SELECT * FROM customers WHERE companyname LIKE 'a%' SELECT CompanyName, ContactName FROM customers WHERE CompanyName > 'g' AND ContactName > 'g'
SELECT * FROM customers
Example
To display the companies in alphabetical order: SELECT Company, OrderNumber FROM Orders ORDER BY Company Result: Company OrderNumber ABC Shop 5678 Sega 3412 W3Schools 6798 W3Schools 2312
Example
To display the companies in alphabetical order AND the ordernumbers in numerical order: SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber Result: Company OrderNumber ABC Shop 5678 Sega 3412 W3Schools 2312 W3Schools 6798
Example
To display the companies in reverse alphabetical order: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC Result: Company OrderNumber W3Schools 6798 W3Schools 2312 Sega 3412 ABC Shop 5678
Example
To display the companies in reverse alphabetical order AND the ordernumbers in numerical order: SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC Result: Company OrderNumber W3Schools 2312 W3Schools 6798 Sega 3412 ABC Shop 5678
AND & OR
AND and OR join two or more conditions in a WHERE clause. The AND operator displays a row if ALL conditions listed are true. The OR operator displays a row if ANY of the conditions listed are true.
Example
Use AND to display each person with the first name equal to "Tove", and the last name equal to "Svendson":
SELECT * FROM Persons WHERE FirstName='Tove' AND LastName='Svendson' Result: LastName Svendson Tove
FirstName Borgvn 23
Address Sandnes
City
Example
Use OR to display each person with the first name equal to "Tove", or the last name equal to "Svendson": SELECT * FROM Persons WHERE firstname='Tove' OR lastname='Svendson' Result: LastName FirstName Address City Svendson Tove Borgvn 23 Sandnes Svendson Stephen Kaivn 18 Sandnes
Example
You can also combine AND and OR (use parentheses to form complex expressions): SELECT * FROM Persons WHERE (FirstName='Tove' OR FirstName='Stephen') AND LastName='Svendson' Result: LastName FirstName Address Svendson Tove Borgvn 23 Svendson Stephen Kaivn 18
IN
The IN operator may be used if you know the exact value you want to return for at least one of the columns. SELECT column_name FROM table_name WHERE column_name IN (value1,value2,..)
Example 1
To display the persons with LastName equal to "Hansen" or "Pettersen", use the following SQL: SELECT * FROM Persons WHERE LastName IN ('Hansen','Pettersen') Result: LastName FirstName Address Hansen Ola Timoteivn 10 Sandnes
City
Pettersen
Kari
Storgt 20
Stavanger
Example 1
To display the persons alphabetically between (and including) "Hansen" and exclusive "Pettersen", use the following SQL: SELECT * FROM Persons WHERE LastName BETWEEN 'Hansen' AND 'Pettersen' Result: LastName FirstName Address City Hansen Ola Timoteivn 10 Sandnes Nordmann Anna Neset 18 Sandnes IMPORTANT! The BETWEEN...AND operator is treated differently in different databases. With some databases a person with the LastName of "Hansen" or "Pettersen" will not be listed (BETWEEN..AND only selects fields that are between and excluding the test values). With some databases a person with the last name of "Hansen" or "Pettersen" will be listed (BETWEEN..AND selects fields that are between and including the test values). With other databases a person with the last name of "Hansen" will be listed, but "Pettersen" will not be listed (BETWEEN..AND 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....AND operator!
Example 2
To display the persons outside the range used in the previous example, use the NOT operator: SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Hansen' AND 'Pettersen' Result: LastName FirstName Address City Pettersen Kari Storgt 20 Stavanger Svendson Tove Borgvn 23 Sandnes With SQL, aliases can be used for column names and table names.
The "Employee_ID" column in the "Orders" table is used to refer to the persons in the "Employees" table without using their names
Employees: Employee_ID 01 Hansen, Ola 02 Svendson, Tove 03 Svendson, Stephen 04 Pettersen, Kari Orders: Prod_ID Product 234 Printer 657 Table 865 Chair
Name
Employee_ID 01 03 03
Example
Who has ordered a product, and what did they order? SELECT Employees.Name, Orders.Product FROM Employees, Orders WHERE Employees.Employee_ID=Orders.Employee_ID Result Name Product Hansen, Ola Printer Svendson, Stephen Table Svendson, Stephen Chair
Example
Who ordered a printer? SELECT Employees.Name FROM Employees, Orders WHERE Employees.Employee_ID=Orders.Employee_ID AND Orders.Product='Printer' Result Name Hansen, Ola
Using Joins
OR we can select data from two tables with the JOIN keyword, like this:
SELECT Employees.Name, Orders.Product FROM Employees INNER JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID The INNER JOIN returns all rows from both tables where there is a match. If there are rows in Employees that do not have matches in Orders, those rows will not be listed. Result Name Product Hansen, Ola Printer Svendson, Stephen Table Svendson, Stephen Chair
Svendson, Stephen
Chair
Example
Who ordered a printer? SELECT Employees.Name FROM Employees INNER JOIN Orders ON Employees.Employee_ID=Orders.Employee_ID WHERE Orders.Product = 'Printer' Result Name Hansen, Ola
UNION
The UNION command is used to select related information from two tables, much like the JOIN command. However, when using the UNION command all selected columns need to be of the same data type. Note: With UNION, only distinct values are selected. SQL Statement 1 UNION SQL Statement 2 Employees_Norway: Employee_ID E_Name 01 Hansen, Ola 02 Svendson, Tove 03 Svendson, Stephen 04 Pettersen, Kari Employees_USA: Employee_ID E_Name 01 Turner, Sally 02 Kent, Clark 03 Svendson, Stephen 04 Scott, Stephen
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 is listed. The UNION command only selects distinct values.
UNION ALL
The UNION ALL command is equal to the UNION command, except that UNION ALL selects all values. SQL Statement 1 UNION ALL SQL Statement 2
Create a Database
To create a database: CREATE DATABASE database_name
Create a Table
To create a table in a database: CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ....... )
Example
This example demonstrates how you can create a table named "Person", with four columns. The column names will be "LastName", "FirstName", "Address", and "Age": CREATE TABLE Person (
LastName varchar, FirstName varchar, Address varchar, Age int ) This example demonstrates how you can specify a maximum length for some columns: CREATE TABLE Person ( LastName varchar(30), FirstName varchar, Address varchar, Age int(3) ) The data type specifies what type of data the column can hold. The table below contains the most common data types in SQL: Data Type Description integer(size) Hold integers only. The maximum number of digits are specified in parenthesis. int(size) smallint(size) tinyint(size) decimal(size,d) Hold numbers with fractions. The maximum number of digits are specified in numeric(size,d) "size". The maximum number of digits to the right of the decimal is specified in "d". char(size) Holds a fixed length string (can contain letters, numbers, and special characters). The fixed size is specified in parenthesis. varchar(size) Holds a variable length string (can contain letters, numbers, and special characters). The maximum size is specified in parenthesis. date(yyyymmdd) Holds a date
Create Index
Indices are created in an existing table to locate rows more quickly and efficiently. It is possible to create an index on one or more columns of a table, and each index is given a name. The users cannot see the indexes, they are just used to speed up queries. Note: Updating a table containing indexes takes more time than updating a table without, this is because the indexes also need an update. So, it is a good idea to create indexes only on columns that are often used for a search. A Unique Index Creates a unique index on a table. A unique index means that two rows cannot have the same index value. CREATE UNIQUE INDEX index_name ON table_name (column_name) The "column_name" specifies the column you want indexed. A Simple Index Creates a simple index on a table. When the UNIQUE keyword is omitted, duplicate values are allowed. CREATE INDEX index_name ON table_name (column_name) The "column_name" specifies the column you want indexed.
Example
This example creates a simple index, named "PersonIndex", on the LastName field of the Person table: CREATE INDEX PersonIndex ON Person (LastName)
If you want to index the values in a column in descending order, you can add the reserved word DESC after the column name: CREATE INDEX PersonIndex ON Person (LastName DESC) If you want to index more than one column you can list the column names within the parentheses, separated by commas: CREATE INDEX PersonIndex ON Person (LastName, FirstName)
Drop Index
You can delete an existing index in a table with the DROP statement. DROP INDEX table_name.index_name
Truncate a Table
What if we only want to get rid of the data inside a table, and not the table itself? Use the TRUNCATE TABLE command (deletes only the data inside the table): TRUNCATE TABLE table_name
ALTER TABLE
The ALTER TABLE statement is used to add or drop columns in an existing table. ALTER TABLE table_name ADD column_name datatype ALTER TABLE table_name DROP COLUMN column_name Note: Some database systems don't allow the dropping of a column in a database table (DROP COLUMN column_name). Person: LastName Pettersen Kari FirstName Storgt 20 Address
Example
To add a column named "City" in the "Person" table: ALTER TABLE Person ADD City varchar(30) Result: LastName FirstName Pettersen Kari
Address Storgt 20
City
Example
To drop the "Address" column in the "Person" table: ALTER TABLE Person DROP COLUMN Address Result: LastName FirstName Pettersen Kari
City
Function Syntax
The syntax for built-in SQL functions is: SELECT function(column) FROM table
Types of Functions
There are several basic types and categories of functions in SQL. The basic types of functions are: Aggregate Functions Scalar functions
Aggregate functions
Aggregate functions operate against a collection of values, but return a single value. Note: If used among many other expressions in the item list of a SELECT statement, the SELECT must have a GROUP BY clause!!
Returns the number of rows (without a NULL value) of a column Returns the number of selected rows Returns the number of distinct results Returns the value of the first record in the specified field Returns the value of the last record in the specified field Returns the highest value of a column Returns the lowest value of a column
Scalar functions
Scalar functions operate against a single value, and return a single value based on the input value.
GROUP BY...
GROUP BY... was added to SQL because aggregate functions (like SUM) return the aggregate of all column values every time they are called, and without the GROUP BY function it was impossible to find the sum for each individual group of column values. The syntax for the GROUP BY function is: SELECT column,SUM(column) FROM table GROUP BY column
GROUP BY Example
This "Sales" Table: Company Amount W3Schools 5500 IBM 4500 W3Schools 7100 And This SQL: SELECT Company, SUM(Amount) FROM Sales Returns this result: Company SUM(Amount) W3Schools 17100 IBM 17100 W3Schools 17100 The above code is invalid because the column returned is not part of an aggregate. A GROUP BY clause will solve this problem: SELECT Company,SUM(Amount) FROM Sales GROUP BY Company Returns this result: Company SUM(Amount) W3Schools 12600 IBM 4500
HAVING...
HAVING... was added to SQL because the WHERE keyword could not be used against aggregate functions (like SUM), and without HAVING... it would be impossible to test for result conditions. The syntax for the HAVING function is: SELECT column,SUM(column) FROM table GROUP BY column HAVING SUM(column) condition value This "Sales" Table: Company Amount W3Schools 5500 IBM 4500 W3Schools 7100 This SQL: SELECT Company,SUM(Amount) FROM Sales GROUP BY Company HAVING SUM(Amount)>10000 Returns this result Company SUM(Amount) W3Schools 12600
Syntax
SELECT column_name(s) INTO newtable [IN externaldatabase]
FROM source