What Is SQL?: Select "Column1" (,"column2",etc) From "Tablename" (Where "Condition") Optional
What Is SQL?: Select "Column1" (,"column2",etc) From "Tablename" (Where "Condition") Optional
SQL (pronounced “ess-que-el”) stands for Structured Query Language. SQL is used to
communicate with a database. According to ANSI (American National Standards Institute), it is the
standard language for relational database management systems. SQL statements are used to
perform tasks such as update data on a database, or retrieve data from a database. Some common
relational database management systems that use SQL are: Oracle, Sybase, Microsoft SQL Server,
Access, Ingres, etc.
Although most database systems use SQL, most of them also have their own additional proprietary
extensions that are usually only used on their system. However, the standard SQL commands such
as “Select”, “Insert”, “Update”, “Delete”, “Create”, and “Drop” can be used to accomplish almost
everything that one needs to do with a database. This tutorial will provide you with the instruction
on the basics of each of these commands as well as allow you to put them to practice using the
SQL Interpreter.
TABLE BASICS
A relational database system contains one or more objects called tables. The data or information
for the database are stored in these tables. Tables are uniquely identified by their names and are
comprised of columns and rows. Columns contain the column name, data type, and any other
attributes for the column. Rows contain the records or data for the columns. Here is a sample table
called “weather”.
city, state, high, and low are the columns. The rows contain the data for this table:
SELECTING DATA
The select statement is used to query the database and retrieve selected data that match the criteria that you
specify. Here is the format of a simple select statement:
select "column1"
[,"column2",etc]
from "tablename"
[where "condition"];
[] = optional
The column names that follow the select keyword determine which columns will be returned in the results. You
can select as many column names that you’d like, or you can use a “*” to select all columns.
The table name that follows the keyword from specifies the table that will be queried to retrieve the desired
results.
The where clause (optional) specifies which data values or rows will be returned or displayed, based on the
criteria described after the keyword where.
Conditional selections used in the where clause:
The LIKE pattern matching operator can also be used in the conditional selection of the where clause. Like is a
very powerful operator that allows you to select only rows that are “like” what you specify. The percent sign “%”
can be used as a wild card to match any possible character that might appear before or after the characters
specified.
For example:
This SQL statement will match any first names that start with ‘Er’. Strings must be in single quotes.
Or you can specify:
This statement will match any last names that end in a ‘s’.
This will only select rows where the first name equals ‘Eric’ exactly.
CREATING TABLES
The create table statement is used to create a new table.
Here is the format of a simple create table statement:
Note: You may have as many columns as you’d like, and the constraints are optional.
Example:
To create a new table, enter the keywords create table followed by the table name, followed by an open
parenthesis, followed by the first column name, followed by the data type for that column, followed by any optional
constraints, and followed by a closing parenthesis. It is important to make sure you use an open parenthesis
before the beginning table, and a closing parenthesis after the end of the last column definition. Make sure you
separate each column definition with a comma. All SQL statements should end with a “;”.
The table and column names must start with a letter and can be followed by letters, numbers, or underscores –
not to exceed a total of 30 characters in length. Do not use any SQL reserved keywords as names for tables or
column names (such as “select”, “create”, “insert”, etc).
Data types specify what the type of data can be for that particular column. If a column called “Last_Name”, is to be
used to hold names, then that particular column should have a “varchar” (variable-length character) data type.
Here are the most common Data types:
What are constraints? When tables are created, it is common for one or more columns to have constraints
associated with them. A constraint is basically a rule associated with a column that the data entered into that
column must follow. For example, a “unique” constraint specifies that no two records can have the same value in
a particular column. They must all be unique. The other two most popular constraints are “not null” which specifies
that a column can’t be left blank, and “primary key”. A “primary key” constraint defines a unique identification of
each record (or row) in a table.
It’s now time for you to design and create your own table. While the SQL Interpreter on this page does not support
creating a table on this website, the following lessons will provide example templates for use as a comparison and
sense check.
In the example below, the column name first will match up with the value 'Luke', and the column name
state will match up with the value 'Georgia'.
Example:
update "tablename"
set "columnname" =
"newvalue"
[,"nextcolumn" =
"newvalue2"...]
where "columnname"
OPERATOR "value"
[and|or "column"
OPERATOR "value"];
[] = optional
Examples:
update phone_book
set area_code = 623
where prefix = 979;
update phone_book
set last_name = 'Smith', prefix=555, suffix=9292
where last_name = 'Jones';
update employee
set age = age+1
where first_name='Mary' and last_name='Williams';
DELETING RECORDS
The delete statement is used to delete records or rows from the table.
where "columnname"
OPERATOR "value"
[and|or "column"
OPERATOR "value"];
[ ] = optional
Examples:
Note: if you leave off the where clause, all records will be deleted!
To delete an entire record/row from a table, enter delete from followed by the table name, followed by the
where clause which contains the conditions to delete. If you leave off the where clause, all records will be
deleted.
DROP A TABLE
The drop table command is used to delete a table and all rows in the table.
To delete an entire table including all of its rows, issue the drop table command followed by the tablename. drop
table is different from deleting all of the records in the table. Deleting all of the records in the table leaves the table
including column and constraint information. Dropping the table removes the table definition as well as all of its
rows.
Example:
SELECT STATEMENT
The SELECT statement is used to query the database and retrieve selected data that match the criteria that you
specify.
The SELECT statement has five main clauses to choose from, although, FROM is the only required clause. Each
of the clauses have a vast selection of options, parameters, etc. The clauses will be listed below, but each of them
will be covered in more detail later in the tutorial.
Here is the format of the SELECT statement:
*The column names that follow the SELECT keyword determine which columns will be returned in the results. You
can select as many column names that you’d like, or you can use a * to select all columns. The order they are
specified will be the order that they are returned in your query results.
*The table name that follows the keyword FROM specifies the table that will be queried to retrieve the desired
results.
*The WHERE clause (optional) specifies which data values or rows will be returned or displayed, based on the
criteria described after the keyword where.
Example:
The above statement will select all of the values in the name, age, and salary columns from the employee table
whose age is greater than 50.
Note: Remember to put a semicolon at the end of your SQL statements. The ; indicates that your SQL statment is
complete and is ready to be interpreted.
The LIKE pattern matching operator can also be used in the conditional selection of the where clause. Like is a
very powerful character string comparison operator that allows you to select only rows that are “like” what you
specify. The percent sign “%” can be used as a wild card to match any possible character that might appear
before or after the characters specified.
For example:
This SQL statement will match any first names that start with ‘Mc’. Strings must be in single quotes.
Example:
SELECT name, title, dept FROM employee WHERE title LIKE 'Pro%';
The above statement will select all of the rows/values in the name, title, and dept columns from the employee
table whose title starts with ‘Pro’. This may return job titles including Programmer or Pro-wrestler.
ALL and DISTINCT are keywords used to select either ALL (default) or the “distinct” or unique records in your
query results. If you would like to retrieve just the unique records in specified columns, you can use the
“DISTINCT” keyword. DISTINCT will discard the duplicate records for the columns you specified after the
“SELECT” statement:
For example:
This statement will return all of the unique ages in the employee_info table.
ALL will display “all” of the specified columns including all of the duplicates. The ALL keyword is the default if
nothing is specified.
Note: The following two tables will be used throughout this course. It is recommended to have them open in
another window or print them out.
AGGREGATE FUNCTIONS
Aggregate functions are used to compute against a “returned column of numeric data” from your SELECT
statement. They basically summarize the results of a particular column of selected data. We are covering these
here since they are required by the next topic, “GROUP BY”. Although they are required for the “GROUP BY”
clause, these functions can be used without the “GROUP BY” clause.
For example:
SELECT AVG(salary)
FROM employee;
This statement will return a single result which contains the average value of everything returned in the salary
column from the employee table.
Another example:
SELECT AVG(salary)
FROM employee
WHERE title = 'Programmer';
This statement will return the average salary for all employee whose title is equal to ‘Programmer’
Example:
SELECT Count(*)
FROM employee;
This particular statement is slightly different from the other aggregate functions since there isn’t a column supplied
to the count function. This statement will return the number of rows in the employees table.
GROUP BY CLAUSE
The GROUP BY clause will gather all of the rows together that contain data in the specified column(s) and will
allow aggregate functions to be performed on the one or more columns. This can best be explained by an
example:
GROUP BY clause syntax:
SELECT column1,
SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list";
Let’s say you would like to retrieve a list of the highest paid salaries in each dept:
This statement will select the maximum salary for the people in each unique department. Basically, the salary for
the person who makes the most in each department will be displayed. Their salary and their department will be
returned.
Multiple Grouping Columns – What if I wanted to display their lastname too?
HAVING CLAUSE
The HAVING clause allows you to specify conditions on the rows for each group – in other words, which rows
should be selected will be based on the conditions you specify. The HAVING clause should follow the GROUP BY
clause if you are going to use it.
HAVING clause syntax:
SELECT column1,
SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list"
HAVING "condition";
HAVING can best be described by example. Let’s say you have an employee table containing the employee’s
name, department, salary, and age.
If you would like to select the average salary for each employee in each department, you could enter:
But, let’s say that you want to ONLY calculate & display the average if their salary is over 20000:
ORDER BY CLAUSE
ORDER BY is an optional clause which will allow you to display the results of your query in a sorted order (either
ascending order or descending order) based on the columns that you specify to order by.
ORDER BY clause syntax:
This statement will select the employee_id, dept, name, age, and salary from the employee_info table where the
dept equals ‘Sales’ and will list the results in Ascending (default) order based on their Salary.
For example:
SELECT column1,
SUM(column2)
FROM "list-of-tables"
The OR operator can be used to join two or more conditions in the WHERE clause also. However, either side of
the OR operator can be true and the condition will be met – hence, the rows will be displayed. With the OR
operator, either side can be true or both sides can be true.
For example:
FROM employee_info
This statement will select the employeeid, firstname, lastname, title, and salary from the employee_info table
where the salary is greater than or equal to 50000.00 AND the title is equal to ‘Programmer’. Both of these
conditions must be true in order for the rows to be returned in the query. If either is false, then it will not be
displayed.
Although they are not required, you can use parentheses around your conditional expressions to make it easier to
read:
FROM employee_info
FROM employee_info
This statement will select the firstname, lastname, title, and salary from the employee_info table where the title is
either equal to ‘Sales’ OR the title is equal to ‘Programmer’.
IN & BETWEEN
FROM "list-of-tables"
WHERE col3 IN
(list-of-values);
FROM "list-of-tables"
The IN conditional operator is really a set membership test operator. That is, it is used to test whether or not a
value (stated before the keyword IN) is “in” the list of values provided after the keyword IN.
For example:
FROM employee_info
This statement will select the employeeid, lastname, salary from the employee_info table where the lastname is
equal to either: Hernandez, Jones, Roberts, or Ruiz. It will return the rows if it is ANY of these values.
The IN conditional operator can be rewritten by using compound conditions using the equals operator and
combining it with OR – with exact same output results:
FROM employee_info
FROM employee_info
This statement will select the employeeid, age, lastname, and salary from the employee_info table where the age
is between 30 and 40 (including 30 and 40).
This statement can also be rewritten without the BETWEEN operator:
FROM employee_info
You can also use NOT BETWEEN to exclude the values between your range.
MATHEMATICAL FUNCTIONS
Standard ANSI SQL-92 supports the following first four basic arithmetic operators:
The modulo operator determines the integer remainder of the division. This operator is not ANSI SQL supported,
however, most databases support it.
The following are some more useful mathematical functions to be aware of since you might need them. These
functions are not standard in the ANSI SQL-92 specs, therefore they may or may not be available on the specific
RDBMS that you are using. However, they were available on several major database systems that we tested.
They WILL work on this tutorial.
For example:
This statement will select the salary rounded to the nearest whole value and the firstname from the employee_info
table.
SELECT "list-of-columns"
FROM table1,table2
WHERE "search-condition(s)"
Joins can be explained easier by demonstrating what would happen if you worked with one table only, and didn’t
have the ability to use “joins”. This single table database is also sometimes referred to as a “flat table”.
Let’s say you have a one-table database that is used to keep track of all of your customers and what they
purchase from your store:
“Customer_info” table:
“Purchases” table:
Now, whenever a purchase is made from a repeating customer, the 2nd table, “Purchases” only needs to be
updated! We’ve just eliminated useless redundant data, that is, we’ve just normalized this database!
Notice how each of the tables have a common “customer_number” column. This column, which contains the
unique customer number will be used to JOIN the two tables. Using the two new tables, let’s say you would like to
select the customer’s name, and items they’ve purchased.
Here is an example of a join statement to accomplish this:
This particular “Join” is known as an “Inner Join” or “Equijoin”. This is the most common type of “Join” that you will
see or use.
Notice that each of the columns are always preceded by the table name and a period. This isn’t always required,
however, it IS good practice so that you wont confuse which columns go with what tables. It is required if the
name column names are the same between the two tables. I recommend preceding all of your columns with the
table names when using joins.
Note: The syntax described above will work with most Database Systems -including the one with this tutorial.
However, in the event that this doesn’t work with yours, please check your specific database documentation.
Although the above will probably work, here is the ANSI SQL-92 syntax specification for an Inner Join using the
preceding statement above that you might want to try:
ON customer_info.customer_number = purchases.customer_number;
Another example:
This statement will select the employeeid, lastname (from the employee_info table), and the comission value
(from the employee_sales table) for all of the rows where the employeeid in the employee_info table matches the
employeeid in the employee_sales table.