SQL Employee Table Creation and Queries
SQL Employee Table Creation and Queries
Display everyone's first name and their age for everyone that's in table.
select first,
age
from empinfo;
first age
John 45
Mary 25
Eric 32
Mary Ann 32
Ginger 42
Sebastian 23
Gus 35
Mary Ann 52
Erica 60
Leroy 22
Elroy 22
Display the first name, last name, and city for everyone that's not from Payson.
select first,
last,
city
from empinfo
where city <>
'Payson';
Display the first and last names for everyone whose last name ends in an "ay".
select first, last from empinfo
where last LIKE '%ay';
first last
Gus Gray
Display all columns for everyone whose first name equals "Mary".
select * from empinfo
where first = 'Mary';
Display all columns for everyone whose first name contains "Mary".
select * from empinfo
where first LIKE '%Mary%';
Creating Tables
The create table statement is used to create a new table. Here is the format of a simple create table statement:
create table "tablename"
("column1" "data type",
"column2" "data type",
"column3" "data type");
Format of create table if you were to use optional constraints:
create table "tablename"
("column1" "data type"
[constraint],
"column2" "data type"
[constraint],
"column3" "data type"
[constraint]);
[ ] = optional
Note: You may have as many columns as you'd like, and the constraints are optional.
Example:
create table employee
(first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));
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 seperate 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:
char(size) Fixed-length character string. Size is specified in parenthesis. Max 255 bytes.
varchar(size) Variable-length character string. Max size is specified in parenthesis.
number(size) Number value with a max number of column digits specified in parenthesis.
date Date value
Number value with a maximum number of digits of "size" total, with a maximum number of "d" digits to the right
number(size,d)
of the decimal.
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. All of these and more will be covered
in the future Advanced release of this Tutorial. Constraints can be entered in this SQL interpreter, however, they are not
supported in this Intro to SQL tutorial & interpreter. They will be covered and supported in the future release of the Advanced
SQL tutorial - that is, if "response" is good.
It's now time for you to design and create your own table. You will use this table throughout the rest of the tutorial. If you decide
to change or redesign the table, you can either drop it and recreate it or you can create a completely different one. The SQL
statement drop will be covered later.
Create Table Exercise
You have just started a new company. It is time to hire some employees. You will need to create a table that will contain the
following information about your new employees: firstname, lastname, title, age, and salary. After you create the table, you
should receive a small form on the screen with the appropriate column names. If you are missing any columns, you need to
double check your SQL statement and recreate the table. Once it's created successfully, go to the "Insert" lesson.
IMPORTANT: When selecting a table name, it is important to select a unique name that no one else will use or guess. Your
table names should have an underscore followed by your initials and the digits of your birth day and month. For example, Tom
Smith, who was born on November 2nd, would name his table myemployees_ts0211 Use this convention for all of the tables
you create. Your tables will remain on a shared database until you drop them, or they will be cleaned up if they aren't accessed
in 4-5 days. If "support" is good, I hope to eventually extend this to at least one week. When you are finished with your table, it
is important to drop your table (covered in last lesson).
Exercise answer
create table
myemployees_ts0211
(firstname varchar(30),
lastname varchar(30),
title varchar(30),
age number(2),
salary number(8,2));
Inserting into a Table
The insert statement is used to insert or add a row of data into the table.
To insert records into a table, enter the key words insert into followed by the table name, followed by an open parenthesis,
followed by a list of column names separated by commas, followed by a closing parenthesis, followed by the keyword values,
followed by the list of values enclosed in parenthesis. The values that you enter will be held in the rows and they will match up
with the column names that you specify. Strings should be enclosed in single quotes, and numbers should not.
insert into "tablename"
(first_column,...last_column)
values (first_value,...last_value);
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:
insert into employee
(first, last, age, address, city, state)
values ('Luke', 'Duke', 45, '2130 Boars Nest',
'Hazard Co', 'Georgia');
Note: All strings should be enclosed between single quotes: 'string'
Insert statement exercises
It is time to insert data into your new employee table.
Your first three employees are the following:
Jonie Weber, Secretary, 28, 19500.00
Potsy Weber, Programmer, 32, 45300.00
Dirk Smith, Programmer II, 45, 75020.00
Enter these employees into your table first, and then insert at least 5 more of your own list of employees in the table.
After they're inserted into the table, enter select statements to:
Select all columns for everyone in your employee table.
Select all columns for everyone with a salary over 30000.
Select first and last names for everyone that's under 30 years old.
Select first name, last name, and salary for anyone with "Programmer" in their title.
Select all columns for everyone whose last name contains "ebe".
Select the first name for everyone whose first name equals "Potsy".
Select all columns for everyone over 80 years old.
Select all columns for everyone whose last name ends in "ith".
Inserting into a Table Answers
Your Insert statements should be similar to: (note: use your own table name that you created)
insert into
myemployees_ts0211
(firstname, lastname,
title, age, salary)
values ('Jonie', 'Weber',
'Secretary', 28,
19500.00);
Select all columns for everyone in your employee table.
select * from
myemployees_ts0211
Select all columns for everyone with a salary over 30000.
select * from
myemployees_ts0211
where salary > 30000
Select first and last names for everyone that's under 30 years old.
select firstname, lastname
from myemployees_ts0211
where age < 30
Select first name, last name, and salary for anyone with "Programmer" in their title.
select firstname, lastname, salary
from myemployees_ts0211
where title LIKE '%Programmer%'
Select all columns for everyone whose last name contains "ebe".
select * from
myemployees_ts0211
where lastname LIKE '%ebe%'
Select the first name for everyone whose first name equals "Potsy".
select firstname from
myemployees_ts0211
where firstname = 'Potsy'
Select all columns for everyone over 80 years old.
select * from
myemployees_ts0211
[] = optional
[The above example was line wrapped for better viewing on this Web page.]
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';
Update statement exercises
After each update, issue a select statement to verify your changes.
Jonie Weber just got married to Bob Williams. She has requested that her last name be updated to Weber-Williams.
Dirk Smith's birthday is today, add 1 to his age.
All secretaries are now called "Administrative Assistant". Update all titles accordingly.
Everyone that's making under 30000 are to receive a 3500 a year raise.
Everyone that's making over 33500 are to receive a 4500 a year raise.
All "Programmer II" titles are now promoted to "Programmer III".
All "Programmer" titles are now promoted to "Programmer II".
Create at least 5 of your own update statements and submit them.
Answers to exercises
Updating Records Answers
Jonie Weber just got married to Bob Williams. She has requested that her last name be updated to Weber-Williams.
update
myemployees_ts0211
set lastname=
'Weber-Williams'
where firstname=
'Jonie'
and lastname=
'Weber';
Dirk Smith's birthday is today, add 1 to his age.
update myemployees_ts0211
set age=age+1
where firstname='Dirk' and lastname='Smith';
All secretaries are now called "Administrative Assistant". Update all titles accordingly.
update myemployees_ts0211
set title = 'Administrative Assistant'
where title = 'Secretary';
Everyone that's making under 30000 are to receive a 3500 a year raise.
update myemployees_ts0211
set salary = salary + 3500
where salary < 30000;
Everyone that's making over 33500 are to receive a 4500 a year raise.
update myemployees_ts0211
set salary = salary + 4500
where salary > 33500;
All "Programmer II" titles are now promoted to "Programmer III".
update myemployees_ts0211
set title = 'Programmer III'
where title = 'Programmer II'
All "Programmer" titles are now promoted to "Programmer II".
update myemployees_ts0211
set title = 'Programmer II'
where title = 'Programmer'
Deleting Records
The delete statement is used to delete records or rows from the table.
delete from "tablename"
where "columnname"
OPERATOR "value"
[and|or "column"
OPERATOR "value"];
[ ] = optional
[The above example was line wrapped for better viewing on this Web page.]
Examples:
delete from employee;
Note: if you leave off the where clause, all records will be deleted!
delete from employee
where lastname = 'May';
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.
FROM table1[,table2]
[WHERE "conditions"]
[GROUP BY "column-list"]
[HAVING "conditions]
Example:
FROM employee
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:
SELECT DISTINCT age
FROM employee_info;
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.
Tutorial Tables
items_ordered
customers
items_ordered
customerid order_date item quantity price
10330 30-Jun-1999 Pogo stick 1 28.00
10101 30-Jun-1999 Raft 1 58.00
10298 01-Jul-1999 Skateboard 1 33.00
10101 01-Jul-1999 Life Vest 4 125.00
10299 06-Jul-1999 Parachute 1 1250.00
10339 27-Jul-1999 Umbrella 1 4.50
10449 13-Aug-1999 Unicycle 1 180.79
10439 14-Aug-1999 Ski Poles 2 25.50
10101 18-Aug-1999 Rain Coat 1 18.30
10449 01-Sep-1999 Snow Shoes 1 45.00
10439 18-Sep-1999 Tent 1 88.00
10298 19-Sep-1999 Lantern 2 29.00
10410 28-Oct-1999 Sleeping Bag 1 89.22
10438 01-Nov-1999 Umbrella 1 6.75
10438 02-Nov-1999 Pillow 1 8.50
10298 01-Dec-1999 Helmet 1 22.00
10449 15-Dec-1999 Bicycle 1 380.50
10449 22-Dec-1999 Canoe 1 280.00
10101 30-Dec-1999 Hoola Hoop 3 14.75
10330 01-Jan-2000 Flashlight 4 28.00
10101 02-Jan-2000 Lantern 1 16.00
10299 18-Jan-2000 Inflatable Mattress 1 38.00
10438 18-Jan-2000 Tent 1 79.99
10413 19-Jan-2000 Lawnchair 4 32.00
10410 30-Jan-2000 Unicycle 1 192.50
10315 2-Feb-2000 Compass 1 8.00
10449 29-Feb-2000 Flashlight 1 4.50
10101 08-Mar-2000 Sleeping Bag 2 88.70
10298 18-Mar-2000 Pocket Knife 1 22.38
10449 19-Mar-2000 Canoe paddle 2 40.00
10298 01-Apr-2000 Ear Muffs 1 12.50
10330 19-Apr-2000 Shovel 1 16.75
customers
customerid firstname lastname city state
10101 John Gray Lynden Washington
10298 Leroy Brown Pinetop Arizona
10299 Elroy Keller Snoqualmie Washington
10315 Lisa Jones Oshkosh Wisconsin
10325 Ginger Schultz Pocatello Idaho
10329 Kelly Mendoza Kailua Hawaii
10330 Shawn Dalton Cannon Beach Oregon
10338 Michael Howell Tillamook Oregon
10339 Anthony Sanchez Winslow Arizona
10408 Elroy Cleaver Globe Arizona
10410 Mary Ann Howell Charleston South Carolina
10413 Donald Davids Gila Bend Arizona
10419 Linda Sakahara Nogales Arizona
10429 Sarah Graham Greensboro North Carolina
10438 Kevin Smith Durango Colorado
10439 Conrad Giles Telluride Colorado
10449 Isabela Moore Yuma Arizona
Review Exercises
From the items_ordered table, select a list of all items purchased for customerid 10449. Display the customerid, item, and price
for this customer.
Select all columns from the items_ordered table for whoever purchased a Tent.
Select the customerid, order_date, and item values from the items_ordered table for any items in the item column that start with
the letter "S".
Select the distinct items in the items_ordered table. In other words, display a listing of each of the unique items from the
items_ordered table.
Make up your own select statements and submit them.
Answers to these Exercises
Exercise #1
SELECT customerid, item, price
FROM items_ordered
WHERE customerid=10449;
SQL Command Executed
Exercise #2
SELECT * FROM items_ordered
WHERE item = 'Tent';
SQL Command Executed
Exercise #3
SELECT customerid, order_date, item
FROM items_ordered
WHERE item LIKE 's%';
SQL Command Executed
Exercise #4
SELECT DISTINCT item
FROM items_ordered;
SQL Command Executed
Pogo stick
Raft
Skateboard
Life Vest
Parachute
Umbrella
Unicycle
Ski Poles
Rain Coat
Snow Shoes
Tent
Lantern
Sleeping Bag
Pillow
Helmet
Bicycle
Canoe
Hoola Hoop
Flashlight
Inflatable Mattress
Lawnchair
Compass
Pocket Knife
Canoe paddle
Ear Muffs
Shovel
Aggregate Functions
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;
SELECT Count(*)
FROM employees;
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.
Review Exercises
Select the maximum price of any item ordered in the items_ordered table. Hint: Select the maximum price only.
>
Select the average price of all of the items ordered that were purchased in the month of Dec.
What are the total number of rows in the items_ordered table?
For all of the tents that were ordered in the items_ordered table, what is the price of the lowest tent? Hint: Your query should
return the price only.
Exercise #1
SELECT max(price)
FROM items_ordered;
1250.00
Exercise #2
SELECT avg(price)
FROM items_ordered
WHERE order_date LIKE '%Dec%';
174.312500
Exercise #3
SELECT count(*)
FROM items_ordered;
32
Exercise #4
SELECT min(price) FROM items_ordered WHERE item = 'Tent';
79.99
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:
FROM employee
GROUP BY 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?
For example, take a look at the items_ordered table. Let's say you want to group everything of quantity 1 together, everything of
quantity 2 together, everything of quantity 3 together, etc. If you would like to determine what the largest cost item is for each
grouped quantity (all quantity 1's, all quantity 2's, all quantity 3's, etc.), you would enter:
FROM items_ordered
GROUP BY quantity;
Enter the statement in above, and take a look at the results to see if it returned what you were expecting. Verify that the
maximum price in each Quantity Group is really the maximum price.
Review Exercises
How many people are in each unique state in the customers table? Select the state and display the number of people in each.
Hint: count is used to count rows in a column, sum works on numeric data only.
From the items_ordered table, select the item, maximum price, and minimum price for each specific item in the table. Hint: The
items will need to be broken up into separate groups.
How many orders did each customer make? Use the items_ordered table. Select the customerid, number of orders they made,
and the sum of their orders. Click the Group By answers link below if you have any problems.
Answers to these Exercises
Exercise #1
SELECT state, count(state)
FROM customers
GROUP BY state;
Exercise #2
SELECT item, max(price), min(price)
FROM items_ordered
GROUP BY item;
Exercise #3
SELECT customerid, count(customerid), sum(price)
FROM items_ordered
GROUP BY customerid;
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:
FROM employee
GROUP BY dept;
But, let's say that you want to ONLY calculate & display the average if their salary is over 20000:
FROM employee
GROUP BY dept
FROM employee_info
SELECT column1,
SUM(column2)
FROM "list-of-tables"
FROM employee_info
FROM employee_info
FROM "list-of-tables"
WHERE col3 IN
(list-of-values);
FROM "list-of-tables"
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
As you can see, the IN operator is much shorter and easier to read when you are testing for more than two or three values.
You can also use NOT IN to exclude the rows in your list.
The BETWEEN conditional operator is used to test to see whether or not a value (stated before the keyword BETWEEN) is
"between" the two values stated after the keyword BETWEEN.
For example:
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:
SELECT employeeid, age, lastname, salary
FROM employee_info
You can also use NOT BETWEEN to exclude the values between your range.
Exercise #2
SELECT firstname, city, state
FROM customers
WHERE state IN ('Arizona', 'Washington', 'Oklahoma', 'Colorado', 'Hawaii');
Mathematical Functions
Standard ANSI SQL-92 supports the following first four basic arithmetic operators:
+ addition
- subtraction
* multiplication
/ division
% modulo
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 I tested. They WILL work on
this tutorial.
FROM employee_info
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:
"Purchases" table:
ON customer_info.customer_number = purchases.customer_number;
Another example:
Exercise #2
SELECT [Link], [Link], [Link], items_ordered.item
FROM customers, items_ordered
WHERE [Link] = items_ordered.customerid
ORDER BY [Link] DESC;