80
SQL Tutorial SQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how to use SQL to access and manipulate data in Oracle, Sybase, SQL Server, DB2, Access, and other database systems. Introduction to SQL SQL is a standard computer language for accessing and manipulating databases. 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 is a Standard - BUT.... SQL is an ANSI (American National Standards Institute) standard computer language for accessing and manipulating database systems. SQL statements are used to retrieve and update data in a database. SQL works with database programs like MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase, etc. Unfortunately, there are many different versions of the SQL language, but to be in compliance with the ANSI standard, they must support the same major keywords in a similar manner (such as SELECT, UPDATE, DELETE, INSERT, WHERE, and others). Modul Praktikum Basis Data/MSAccess-SQL/Hal. 1

SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL TutorialSQL is a standard computer language for accessing and manipulating databases.In this tutorial you will learn how to use SQL to access and manipulate data in Oracle, Sybase, SQL Server, DB2, Access, and other database systems.

Introduction to SQLSQL is a standard computer language for accessing and manipulating databases.

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 is a Standard - BUT....

SQL is an ANSI (American National Standards Institute) standard computer language for accessing and manipulating database systems. SQL statements are used to retrieve and update data in a database. SQL works with database programs like MS Access, DB2, Informix, MS SQL Server, Oracle, Sybase, etc.

Unfortunately, there are many different versions of the SQL language, but to be in compliance with the ANSI standard, they must support the same major keywords in a similar manner (such as SELECT, UPDATE, DELETE, INSERT, WHERE, and others).Note: Most of the SQL database programs also have their own proprietary extensions in addition to the SQL standard!

SQL 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":LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesSvendson Tove Borgvn 23 SandnesPettersen Kari Storgt 20 Stavanger

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 1

Page 2: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

The table above contains three records (one for each person) and four columns (LastName, FirstName, Address, and City).

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: LastNameHansenSvendsonPettersen

Note: Some database systems require a semicolon at the end of the SQL statement. We don't use the semicolon in our tutorials.

SQL Data Manipulation Language (DML)

SQL (Structured Query Language) is a syntax for executing queries. But the SQL language also includes a syntax to update, insert, and delete records.These query and update commands together form the Data Manipulation Language (DML) part of SQL:

SELECT - extracts data from a database table UPDATE - updates data in a database table DELETE - deletes data from a database table INSERT INTO - inserts new data into a database table

SQL Data Definition Language (DDL)

The Data Definition Language (DDL) part of SQL permits database tables to be created or deleted. We can also define indexes (keys), specify links between tables, and impose constraints between database tables.The most important DDL statements in SQL are: 

CREATE TABLE - creates a new database table ALTER TABLE - alters (changes) a database table DROP TABLE - deletes a database table CREATE INDEX - creates an index (search key) DROP INDEX - deletes an index

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 2

Page 3: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL The SELECT Statement

The SELECT StatementThe SELECT statement is used to select data from a table. The tabular result is stored in a result table (called the result-set).

SyntaxSELECT column_name(s)FROM table_name

Select Some ColumnsTo select the columns named "LastName" and "FirstName", use a SELECT statement like this:SELECT LastName,FirstName FROM Persons

"Persons" tableLastName FirstName Address CityHansen Ola Timoteivn 10 SandnesSvendson Tove Borgvn 23 SandnesPettersen Kari Storgt 20 Stavanger

ResultLastName FirstNameHansen OlaSvendson TovePettersen Kari

Select All ColumnsTo select all columns from the "Persons" table, use a * symbol instead of column names, like this: SELECT * FROM Persons

ResultLastName FirstName Address CityHansen Ola Timoteivn 10 Sandnes

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 3

Page 4: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Svendson Tove Borgvn 23 SandnesPettersen Kari Storgt 20 Stavanger

The Result Set

The result from a SQL query is stored in a result-set. Most database software systems allow navigation of the result set with programming functions, like: Move-To-First-Record, Get-Record-Content, Move-To-Next-Record, etc.Programming functions like these are not a part of this tutorial. To learn about accessing data with function calls, please visit our ADO tutorial.

Semicolon after SQL Statements?

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.Some SQL tutorials end each SQL statement with a semicolon. Is this necessary? 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.

The SELECT DISTINCT Statement

The DISTINCT keyword is used to return only distinct (different) values.The SELECT statement returns information from table columns. But what if we only want to select distinct elements?With SQL, all we need to do is to add a DISTINCT keyword to the SELECT statement:

SyntaxSELECT DISTINCT column_name(s)FROM table_name

Using the DISTINCT keyword

To select ALL values from the column named "Company" we use a SELECT statement like this:SELECT Company FROM Orders

"Orders" tableCompany OrderNumberSega 3412W3Schools 2312Trio 4678

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 4

Page 5: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

W3Schools 6798

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 5

Page 6: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ResultCompanySegaW3SchoolsTrioW3SchoolsNote that "W3Schools" is listed twice in the result-set.

To select only DIFFERENT values from the column named "Company" we use a SELECT DISTINCT statement like this:SELECT DISTINCT Company FROM Orders

Result:CompanySegaW3SchoolsTrioNow "W3Schools" is listed only once in the result-set.

SQL The WHERE ClauseThe WHERE clause is used to specify a selection criterion.

The WHERE Clause   To conditionally select data from a table, a WHERE clause can be added to the SELECT statement.

SyntaxSELECT column FROM tableWHERE 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 equalBETWEEN Between an inclusive range

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 6

Page 7: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

LIKE Search for a patternNote: In some versions of SQL the <> operator may be written as !=Using the WHERE Clause

To select only the persons living in the city "Sandnes", we add a WHERE clause to the SELECT statement: SELECT * FROM PersonsWHERE City='Sandnes'

"Persons" tableLastName FirstName Address City YearHansen Ola Timoteivn 10 Sandnes 1951Svendson Tove Borgvn 23 Sandnes 1978Svendson Stale Kaivn 18 Sandnes 1980Pettersen Kari Storgt 20 Stavanger 1960

ResultLastName FirstName Address City YearHansen Ola Timoteivn 10 Sandnes 1951Svendson Tove Borgvn 23 Sandnes 1978Svendson Stale Kaivn 18 Sandnes 1980

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 WHERE FirstName='Tove'This is wrong:SELECT * FROM Persons WHERE FirstName=Tove

For numeric values:This is correct:SELECT * FROM Persons WHERE Year>1965This is wrong:SELECT * FROM Persons WHERE Year>'1965'

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 7

Page 8: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

The LIKE Condition The LIKE condition is used to specify a search for a pattern in a column.

SyntaxSELECT column FROM tableWHERE column LIKE pattern

A "%" sign can be used to define wildcards (missing letters in the pattern) both before and after the pattern.

Using LIKEThe following SQL statement will return persons with first names that start with an 'O':SELECT * FROM PersonsWHERE FirstName LIKE 'O%'

The following SQL statement will return persons with first names that end with an 'a':SELECT * FROM PersonsWHERE FirstName LIKE '%a'

The following SQL statement will return persons with first names that contain the pattern 'la':SELECT * FROM PersonsWHERE FirstName LIKE '%la%'

SQL The INSERT INTO Statement

The INSERT INTO StatementThe INSERT INTO statement is used to insert new rows into a table.

SyntaxINSERT INTO table_nameVALUES (value1, value2,....)

You can also specify the columns for which you want to insert data:INSERT INTO table_name (column1, column2,...)VALUES (value1, value2,....)

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 8

Page 9: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Insert a New RowThis "Persons" table:LastName FirstName Address CityPettersen Kari Storgt 20 Stavanger

And this SQL statement:INSERT INTO Persons VALUES ('Hetland', 'Camilla', 'Hagabakka 24', 'Sandnes')

Will give this result:LastName FirstName Address CityPettersen Kari Storgt 20 StavangerHetland Camilla Hagabakka 24 Sandnes

Insert Data in Specified ColumnsThis "Persons" table:LastName FirstName Address CityPettersen Kari Storgt 20 StavangerHetland Camilla Hagabakka 24 Sandnes

And This SQL statement:INSERT INTO Persons (LastName, Address)VALUES ('Rasmussen', 'Storgt 67')

Will give this result:LastName FirstName Address CityPettersen Kari Storgt 20 StavangerHetland Camilla Hagabakka 24 SandnesRasmussen   Storgt 67  

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 9

Page 10: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL The UPDATE Statement

The Update StatementThe UPDATE statement is used to modify the data in a table.

SyntaxUPDATE table_nameSET column_name = new_valueWHERE column_name = some_value

Person:LastName FirstName Address CityNilsen Fred Kirkegt 56 StavangerRasmussen   Storgt 67  

Update one Column in a RowWe want to add a first name to the person with a last name of "Rasmussen":UPDATE Person SET FirstName = 'Nina'WHERE LastName = 'Rasmussen'

Result:LastName FirstName Address CityNilsen Fred Kirkegt 56 StavangerRasmussen Nina Storgt 67  

Update several Columns in a RowWe want to change the address and add the name of the city:UPDATE PersonSET Address = 'Stien 12', City = 'Stavanger'WHERE LastName = 'Rasmussen'

Result:LastName FirstName Address CityNilsen Fred Kirkegt 56 StavangerRasmussen Nina Stien 12 Stavanger

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 10

Page 11: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL The Delete Statement

The Delete StatementThe DELETE statement is used to delete rows in a table.

SyntaxDELETE FROM table_nameWHERE column_name = some_value

Person:LastName FirstName Address CityNilsen Fred Kirkegt 56 StavangerRasmussen Nina Stien 12 Stavanger

Delete a Row

"Nina Rasmussen" is going to be deleted:DELETE FROM Person WHERE LastName = 'Rasmussen'

ResultLastName FirstName Address CityNilsen Fred Kirkegt 56 Stavanger

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_nameorDELETE * FROM table_name

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 11

Page 12: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL Try It

Test your SQL SkillsOn this page you can test your SQL skills.

We will use the Customers table in the Northwind database:CompanyName ContactName Address CityAlfreds Futterkiste  Maria Anders  Obere Str. 57  Berlin Berglunds snabbköp  Christina Berglund  Berguvsvägen 8  Luleå Centro comercial Moctezuma 

Francisco Chang  Sierras de Granada 9993 

México D.F. 

Ernst Handel  Roland Mendel  Kirchgasse 6  Graz FISSA Fabrica Inter. Salchichas S.A. 

Diego Roel  C/ Moralzarzal, 86  Madrid 

Galería del gastrónomo  Eduardo Saavedra  Rambla de Cataluña, 23 

Barcelona 

Island Trading  Helen Bennett  Garden House Crowther Way 

Cowes 

Königlich Essen  Philip Cramer  Maubelstr. 90  Brandenburg Laughing Bacchus Wine Cellars 

Yoshi Tannamuri  1900 Oak St.  Vancouver 

Magazzini Alimentari Riuniti 

Giovanni Rovelli  Via Ludovico il Moro 22 

Bergamo 

North/South  Simon Crowther  South House 300 Queensbridge 

London 

Paris spécialités  Marie Bertrand  265, boulevard Charonne 

Paris 

Rattlesnake Canyon Grocery 

Paula Wilson  2817 Milton Dr.  Albuquerque 

Simons bistro  Jytte Petersen  Vinbæltet 34  København The Big Cheese  Liz Nixon  89 Jefferson Way Suite

2 Portland 

Vaffeljernet  Palle Ibsen  Smagsløget 45  Århus Wolski Zajazd  Zbyszek

Piestrzeniewicz ul. Filtrowa 68  Warszawa 

To preserve space, the table above is a subset of the Customers table used in the example below.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 12

Page 13: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

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, ContactNameFROM customers

SELECT * FROM customersWHERE companyname LIKE 'a%'

SELECT CompanyName, ContactNameFROM customersWHERE CompanyName > 'g'AND ContactName > 'g'

SQL ORDER BY

The ORDER BY keyword is used to sort the result.

Sort the RowsThe ORDER BY clause is used to sort the rows.

Orders:Company OrderNumberSega 3412ABC Shop 5678W3Schools 2312W3Schools 6798

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 13

Page 14: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ExampleTo display the companies in alphabetical order:SELECT Company, OrderNumber FROM OrdersORDER BY Company

Result:Company OrderNumberABC Shop  5678Sega 3412W3Schools 6798W3Schools 2312

ExampleTo display the companies in alphabetical order AND the ordernumbers in numerical order:SELECT Company, OrderNumber FROM OrdersORDER BY Company, OrderNumber

Result:Company OrderNumberABC Shop 5678Sega 3412W3Schools 2312W3Schools 6798

ExampleTo display the companies in reverse alphabetical order:SELECT Company, OrderNumber FROM OrdersORDER BY Company DESC

Result:Company OrderNumberW3Schools 6798W3Schools 2312Sega 3412

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 14

Page 15: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ABC Shop 5678

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 15

Page 16: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ExampleTo display the companies in reverse alphabetical order AND the ordernumbers in numerical order:SELECT Company, OrderNumber FROM OrdersORDER BY Company DESC, OrderNumber ASC

Result:Company OrderNumberW3Schools 2312W3Schools 6798Sega 3412ABC Shop 5678

SQL AND & OR

AND & ORAND 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.

Original Table (used in the examples)LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesSvendson Tove Borgvn 23 SandnesSvendson Stephen Kaivn 18 Sandnes

ExampleUse AND to display each person with the first name equal to "Tove", and the last name equal to "Svendson":SELECT * FROM PersonsWHERE FirstName='Tove'AND LastName='Svendson'

Result:LastName FirstName Address CitySvendson Tove Borgvn 23 Sandnes

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 16

Page 17: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ExampleUse OR to display each person with the first name equal to "Tove", or the last name equal to "Svendson":SELECT * FROM PersonsWHERE firstname='Tove'OR lastname='Svendson'

Result:LastName FirstName Address CitySvendson Tove Borgvn 23 SandnesSvendson Stephen Kaivn 18 Sandnes

ExampleYou 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 CitySvendson Tove Borgvn 23 SandnesSvendson Stephen Kaivn 18 Sandnes

SQL IN

INThe 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_nameWHERE column_name IN (value1,value2,..)

Original Table (used in the examples)LastName FirstName Address CityHansen Ola Timoteivn 10 Sandnes

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 17

Page 18: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Nordmann Anna Neset 18 SandnesPettersen Kari Storgt 20 StavangerSvendson Tove Borgvn 23 Sandnes

Example 1To display the persons with LastName equal to "Hansen" or "Pettersen", use the following SQL:SELECT * FROM PersonsWHERE LastName IN ('Hansen','Pettersen')

Result:LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesPettersen Kari Storgt 20 Stavanger

SQL BETWEEN

BETWEEN ... ANDThe BETWEEN ... AND operator selects a range of data between two values. These values can be numbers, text, or dates.

SELECT column_name FROM table_nameWHERE column_nameBETWEEN value1 AND value2

Original Table (used in the examples)LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesNordmann Anna Neset 18 SandnesPettersen Kari Storgt 20 StavangerSvendson Tove Borgvn 23 Sandnes

Example 1To display the persons alphabetically between (and including) "Hansen" and exclusive "Pettersen", use the following SQL:SELECT * FROM Persons WHERE LastName BETWEEN 'Hansen' AND 'Pettersen'

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 18

Page 19: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Result:LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesNordmann Anna Neset 18 SandnesIMPORTANT! 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 2To 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 CityPettersen Kari Storgt 20 StavangerSvendson Tove Borgvn 23 Sandnes

SQL Aliases

With SQL, aliases can be used for column names and table names.

Column Name AliasThe syntax is:SELECT column AS column_alias FROM table

Table Name AliasThe syntax is:SELECT column FROM table AS table_alias

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 19

Page 20: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Example: Using a Column AliasThis table (Persons):LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesSvendson Tove Borgvn 23 SandnesPettersen Kari Storgt 20 Stavanger

And this SQL:SELECT LastName AS Family, FirstName AS NameFROM Persons

Returns this result:Family NameHansen OlaSvendson TovePettersen Kari

Example: Using a Table AliasThis table (Persons):LastName FirstName Address CityHansen Ola Timoteivn 10 SandnesSvendson Tove Borgvn 23 SandnesPettersen Kari Storgt 20 Stavanger

And this SQL:SELECT LastName, FirstNameFROM Persons AS Employees

Returns this result:

Table Employees:LastName FirstNameHansen OlaSvendson TovePettersen Kari

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 20

Page 21: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL Join

Joins and Keys Sometimes we have to select data from two or more tables to make our result complete. We have to perform a join.

Tables in a database can be related to each other with keys. A primary key is a column with a unique value for each row. The purpose is to bind data together, across tables, without repeating all of the data in every table. In the "Employees" table below, the "Employee_ID" column is the primary key, meaning that no two rows can have the same Employee_ID. The Employee_ID distinguishes two persons even if they have the same name.

When you look at the example tables below, notice that: 

The "Employee_ID" column is the primary key of the "Employees" table The "Prod_ID" column is the primary key of the "Orders" table 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 Name01 Hansen, Ola02 Svendson, Tove03 Svendson, Stephen04 Pettersen, Kari

Orders:Prod_ID Product Employee_ID234 Printer 01657 Table 03865 Chair 03

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 21

Page 22: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Referring to Two TablesWe can select data from two tables by referring to two tables, like this:

Example

Who has ordered a product, and what did they order?SELECT Employees.Name, Orders.ProductFROM Employees, OrdersWHERE Employees.Employee_ID=Orders.Employee_ID

ResultName ProductHansen, Ola PrinterSvendson, Stephen TableSvendson, Stephen Chair

Example

Who ordered a printer?SELECT Employees.NameFROM Employees, OrdersWHERE Employees.Employee_ID=Orders.Employee_IDAND Orders.Product='Printer'

ResultNameHansen, Ola

Using JoinsOR we can select data from two tables with the JOIN keyword, like this:

Example INNER JOIN

SyntaxSELECT field1, field2, field3FROM first_tableINNER JOIN second_tableON first_table.keyfield = second_table.foreign_keyfield

Who has ordered a product, and what did they order?

SELECT Employees.Name, Orders.ProductFROM Employees

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 22

Page 23: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

INNER JOIN OrdersON 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.

ResultName ProductHansen, Ola PrinterSvendson, Stephen TableSvendson, Stephen Chair

Example LEFT JOIN

SyntaxSELECT field1, field2, field3FROM first_tableLEFT JOIN second_tableON first_table.keyfield = second_table.foreign_keyfield

List all employees, and their orders - if any.SELECT Employees.Name, Orders.ProductFROM EmployeesLEFT JOIN OrdersON Employees.Employee_ID=Orders.Employee_ID

The LEFT JOIN returns all the rows from the first table (Employees), even if there are no matches in the second table (Orders). If there are rows in Employees that do not have matches in Orders, those rows also will be listed.

ResultName ProductHansen, Ola PrinterSvendson, Tove  Svendson, Stephen TableSvendson, Stephen ChairPettersen, Kari  

Example RIGHT JOIN

SyntaxSELECT field1, field2, field3FROM first_tableRIGHT JOIN second_table

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 23

Page 24: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ON first_table.keyfield = second_table.foreign_keyfield

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 24

Page 25: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

List all orders, and who has ordered - if any.SELECT Employees.Name, Orders.ProductFROM EmployeesRIGHT JOIN OrdersON Employees.Employee_ID=Orders.Employee_ID

The RIGHT JOIN returns all the rows from the second table (Orders), even if there are no matches in the first table (Employees). If there had been any rows in Orders that did not have matches in Employees, those rows also would have been listed.

ResultName ProductHansen, Ola PrinterSvendson, Stephen TableSvendson, Stephen Chair

Example

Who ordered a printer?SELECT Employees.NameFROM EmployeesINNER JOIN OrdersON Employees.Employee_ID=Orders.Employee_IDWHERE Orders.Product = 'Printer'

ResultNameHansen, Ola

SQL UNION and UNION ALL

UNIONThe 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 1UNIONSQL Statement 2

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 25

Page 26: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Employees_Norway:Employee_ID E_Name01 Hansen, Ola02 Svendson, Tove03 Svendson, Stephen04 Pettersen, Kari

Employees_USA:Employee_ID E_Name01 Turner, Sally02 Kent, Clark03 Svendson, Stephen04 Scott, Stephen

Using the UNION Command

Example

List all different employee names in Norway and USA:SELECT E_Name FROM Employees_NorwayUNIONSELECT E_Name FROM Employees_USA

ResultNameHansen, OlaSvendson, ToveSvendson, StephenPettersen, KariTurner, SallyKent, ClarkScott, 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.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 26

Page 27: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

UNION ALLThe UNION ALL command is equal to the UNION command, except that UNION ALL selects all values.

SQL Statement 1UNION ALLSQL Statement 2

Using the UNION ALL Command

Example

List all employees in Norway and USA:SELECT E_Name FROM Employees_NorwayUNION ALLSELECT E_Name FROM Employees_USA

ResultNameHansen, OlaSvendson, ToveSvendson, StephenPettersen, KariTurner, SallyKent, ClarkSvendson, StephenScott, Stephen

SQL Create Database, Table, and Index

Create a DatabaseTo create a database:CREATE DATABASE database_name

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 27

Page 28: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Create a TableTo 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 Descriptioninteger(size)int(size)smallint(size)tinyint(size)

Hold integers only. The maximum number of digits are specified in parenthesis.

decimal(size,d)numeric(size,d)

Hold numbers with fractions. The maximum number of digits are specified in "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.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 28

Page 29: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

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 IndexCreates a unique index on a table. A unique index means that two rows cannot have the same index value.

CREATE UNIQUE INDEX index_nameON 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_nameON 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 PersonIndexON 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 PersonIndexON 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 PersonIndexON Person (LastName, FirstName)

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 29

Page 30: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

SQL Drop Index, Table and Database

Drop IndexYou can delete an existing index in a table with the DROP statement.

DROP INDEX table_name.index_name

Delete a Table or DatabaseTo delete a table (the table structure, attributes, and indexes will also be deleted):DROP TABLE table_name

To delete a database:DROP DATABASE database_name

Truncate a TableWhat 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

SQL ALTER TABLE

ALTER TABLEThe ALTER TABLE statement is used to add or drop columns in an existing table.

ALTER TABLE table_name ADD column_name datatypeALTER 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 FirstName AddressPettersen Kari Storgt 20

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 30

Page 31: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

ExampleTo add a column named "City" in the "Person" table:ALTER TABLE Person ADD City varchar(30)

Result:LastName FirstName Address CityPettersen Kari Storgt 20  

ExampleTo drop the "Address" column in the "Person" table:ALTER TABLE Person DROP COLUMN Address

Result:LastName FirstName CityPettersen Kari

SQL Functions

SQL has a lot of built-in functions for counting and calculations.

Function SyntaxThe syntax for built-in SQL functions is:SELECT function(column) FROM table

Types of FunctionsThere are several basic types and categories of functions in SQL. The basic types of functions are:

Aggregate Functions Scalar functions

Aggregate functionsAggregate 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!!

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 31

Page 32: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

"Persons" table (used in most examples)Name AgeHansen, Ola 34Svendson, Tove 45Pettersen, Kari 19

Aggregate functions in MS AccessFunction DescriptionAVG(column) Returns the average value of a columnCOUNT(column) Returns the number of rows (without a NULL value) of a

columnCOUNT(*) Returns the number of selected rowsFIRST(column) Returns the value of the first record in a specified fieldLAST(column) Returns the value of the last record in a specified fieldMAX(column) Returns the highest value of a columnMIN(column) Returns the lowest value of a columnSTDEV(column)  STDEVP(column)  SUM(column) Returns the total sum of a columnVAR(column)  VARP(column)  

Aggregate functions in SQL ServerFunction DescriptionAVG(column) Returns the average value of a columnBINARY_CHECKSUM  CHECKSUM  CHECKSUM_AGG  COUNT(column) Returns the number of rows (without a NULL value) of a

columnCOUNT(*) Returns the number of selected rowsCOUNT(DISTINCT column) Returns the number of distinct resultsFIRST(column) Returns the value of the first record in a specified field

(not supported in SQLServer2K)LAST(column) Returns the value of the last record in a specified field

(not supported in SQLServer2K)

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 32

Page 33: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

MAX(column) Returns the highest value of a columnMIN(column) Returns the lowest value of a columnSTDEV(column)  STDEVP(column)  SUM(column) Returns the total sum of a columnVAR(column)  VARP(column)  

Scalar functionsScalar functions operate against a single value, and return a single value based on the input value.

Useful Scalar Functions in MS AccessFunction DescriptionUCASE(c) Converts a field to upper caseLCASE(c) Converts a field to lower caseMID(c,start[,end]) Extract characters from a text fieldLEN(c) Returns the length of a text fieldINSTR(c) Returns the numeric position of a named character within

a text fieldLEFT(c,number_of_char) Return the left part of a text field requestedRIGHT(c,number_of_char) Return the right part of a text field requestedROUND(c,decimals) Rounds a numeric field to the number of decimals

specifiedMOD(x,y) Returns the remainder of a division operationNOW() Returns the current system dateFORMAT(c,format) Changes the way a field is displayedDATEDIFF(d,date1,date2) Used to perform date calculations

SQL GROUP BY and HAVING

Aggregate functions (like SUM) often need an added GROUP BY functionality.

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.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 33

Page 34: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

The syntax for the GROUP BY function is:SELECT column,SUM(column) FROM table GROUP BY column

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 34

Page 35: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

GROUP BY ExampleThis "Sales" Table:Company AmountW3Schools 5500IBM 4500W3Schools 7100

And This SQL:SELECT Company, SUM(Amount) FROM Sales

Returns this result:Company SUM(Amount)W3Schools 17100IBM 17100W3Schools 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 SalesGROUP BY Company

Returns this result:Company SUM(Amount)W3Schools 12600IBM 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 tableGROUP BY columnHAVING SUM(column) condition value

This "Sales" Table:Company AmountW3Schools 5500

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 35

Page 36: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

IBM 4500W3Schools 7100This SQL:SELECT Company,SUM(Amount) FROM SalesGROUP BY CompanyHAVING SUM(Amount)>10000

Returns this resultCompany SUM(Amount)W3Schools 12600

SQL The SELECT INTO Statement

The SELECT INTO StatementThe SELECT INTO statement is most often used to create backup copies of tables or for archiving records.

SyntaxSELECT column_name(s) INTO newtable [IN externaldatabase] FROM source

Make a Backup Copy

The following example makes a backup copy of the "Persons" table:SELECT * INTO Persons_backupFROM Persons

The IN clause can be used to copy tables into another database:SELECT Persons.* INTO Persons IN 'Backup.mdb'FROM Persons

If you only want to copy a few fields, you can do so by listing them after the SELECT statement:SELECT LastName,FirstName INTO Persons_backupFROM Persons

You can also add a WHERE clause. The following example creates a "Persons_backup" table with two columns (FirstName and LastName) by extracting the persons who lives in "Sandnes" from the "Persons" table:SELECT LastName,Firstname INTO Persons_backupFROM PersonsWHERE City='Sandnes'

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 36

Page 37: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 37

Page 38: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Selecting data from more than one table is also possible. The following example creates a new table "Empl_Ord_backup" that contains data from the two tables Employees and Orders:SELECT Employees.Name,Orders.ProductINTO Empl_Ord_backupFROM EmployeesINNER JOIN OrdersON Employees.Employee_ID=Orders.Employee_ID

SQL The CREATE VIEW Statement

A view is a virtual table based on the result-set of a SELECT statement.

What is a View?In SQL, a VIEW is a virtual table based on the result-set of a SELECT statement.

A view contains rows and columns, just like a real table. The fields in a view are fields from one or more real tables in the database. You can add SQL functions, WHERE, and JOIN statements to a view and present the data as if the data were coming from a single table.

Note: The database design and structure will NOT be affected by the functions, where, or join statements in a view.

SyntaxCREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition

Note: The database does not store the view data! The database engine recreates the data, using the view's SELECT statement, every time a user queries a view.

Using ViewsA view could be used from inside a query, a stored procedure, or from inside another view. By adding functions, joins, etc., to a view, it allows you to present exactly the data you want to the user.

The sample database Northwind has some views installed by default. The view "Current Product List" lists all active products (products that are not discontinued) from the Products table. The view is created with the following SQL:CREATE VIEW [Current Product List] ASSELECT ProductID,ProductNameFROM ProductsWHERE Discontinued=No

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 38

Page 39: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

We can query the view above as follows:SELECT * FROM [Current Product List]

Another view from the Northwind sample database selects every product in the Products table that has a unit price that is higher than the average unit price:CREATE VIEW [Products Above Average Price] ASSELECT ProductName,UnitPriceFROM ProductsWHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

We can query the view above as follows:SELECT * FROM [Products Above Average Price]

Another example view from the Northwind database calculates the total sale for each category in 1997. Note that this view select its data from another view called "Product Sales for 1997":CREATE VIEW [Category Sales For 1997] ASSELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySalesFROM [Product Sales for 1997]GROUP BY CategoryName

We can query the view above as follows:SELECT * FROM [Category Sales For 1997]

We can also add a condition to the query. Now we want to see the total sale only for the category "Beverages":SELECT * FROM [Category Sales For 1997]WHERE CategoryName='Beverages'

SQL Quick Reference

SQL Quick Reference from W3Schools. Print it, and fold it in your pocket.

SQL SyntaxStatement SyntaxAND / OR SELECT column_name(s)

FROM table_nameWHERE conditionAND|OR condition

ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype

ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 39

Page 40: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

AS (alias for column) SELECT column_name AS column_aliasFROM table_name

AS (alias for table) SELECT column_nameFROM table_name  AS table_alias

BETWEEN SELECT column_name(s)FROM table_nameWHERE column_nameBETWEEN value1 AND value2

CREATE DATABASE CREATE DATABASE database_nameCREATE INDEX CREATE INDEX index_name

ON table_name (column_name)CREATE TABLE CREATE TABLE table_name

(column_name1 data_type,column_name2 data_type,.......)

CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_nameON table_name (column_name)

CREATE VIEW CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition

DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_nameWHERE condition

DROP DATABASE DROP DATABASE database_nameDROP INDEX DROP INDEX table_name.index_nameDROP TABLE DROP TABLE table_nameGROUP BY SELECT column_name1,SUM(column_name2)

FROM table_nameGROUP BY column_name1

HAVING SELECT column_name1,SUM(column_name2)FROM table_nameGROUP BY column_name1HAVING SUM(column_name2) condition value

IN SELECT column_name(s)FROM table_nameWHERE column_name

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 40

Page 41: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

IN (value1,value2,..)

INSERT INTO INSERT INTO table_nameVALUES (value1, value2,....)orINSERT INTO table_name(column_name1, column_name2,...)VALUES (value1, value2,....)

LIKE SELECT column_name(s)FROM table_nameWHERE column_nameLIKE pattern

ORDER BY SELECT column_name(s)FROM table_nameORDER BY column_name [ASC|DESC]

SELECT SELECT column_name(s)FROM table_name

SELECT * SELECT *FROM table_name

SELECT DISTINCT SELECT DISTINCT column_name(s)FROM table_name

SELECT INTO(used to create backup copies of tables)

SELECT *INTO new_table_nameFROM original_table_nameorSELECT column_name(s)INTO new_table_nameFROM original_table_name

TRUNCATE TABLE(deletes only the data inside the table)

TRUNCATE TABLE table_name

UPDATE UPDATE table_nameSET column_name=new_value[, column_name=new_value]WHERE column_name=some_value

WHERE SELECT column_name(s)FROM table_nameWHERE condition

Source : http://www.w3schools.com/sql/sql_quickref.asp

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 41

Page 42: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Query Examples in Microsoft Access

Structured Query Language is a programming language developed within IBM corporation during the 1970's.  This language is designed to provide retrieval and update of information stored in Relational Database Management Systems (RDBMS).

Oracle corporation has had great influence on expanding the functionality of SQL during the 1980's through the 1990's.  SQL differs from other programming languages such as Basic & Fortran in that a user will identify which data is to be retrieve/updated by field name and table name and it is up to a SQL database engine to determine how to find information based on the table relationships originally defined by a database designer.

Microsoft Access query language is a fairly robust subset of the full SQL language.  Access SQL query examples contained in this section of our website will help the non-professional programmer to hurdle stumbling blocks often encountered when creating a query.  These query examples will provide 'how to' programming for several situations when  you may need to get into the Access SQL script editor to customize your query.

Access Union Query ExampleAny/All as a Choice in a Combo BoxThis MS Access union query example shows how to create a combo box All  choice item. This technique is often used for selecting specific (or All) records for a report.

The Union Query is used in this example and is a very powerful feature of the SQL language.  We assume you have read our Microsoft Access database design recommendations.

Note: Putting a blank letter before the 'A' in All makes this combo choice All choice sort to the top. Warning:  General warning about union queries -  Never try to use aggregate functions (avg, count, sum, etc.) in a union query.  It will drop out duplicate groups of records (in Access at least ).

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 42

Page 43: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Filter Report Records via Form FieldUse Form Fields as Parameters in a QueryIn this filter report records via form field example we use the Employee_ID selected in filter report example to select employee records for a report.  Many users and developers would use filters on the report to accomplish this task.

Filters are ok to use but putting these restrictions in the SQL query for the report usually runs faster.  This example assumes that you have a combo box (named: Emp_Combo), as defined in a previous example, in a form called F_Emp.

Filter Report Records Using Form Field Parameter Example:Select M_Employees.Name, M_Employees.Emp_Number, M_Employees.Address From M_Employees Where Forms!F_Emp!Emp_Combo=0 or Forms!F_Emp!Emp_Combo = M_Employees.Employee_ID;

This SQL query will select a specific employee or All employees for the report based on the Emp_Combo in the parameter form (F_Emp).  Note: You could have several combo boxes on the parameter form which would allow the user to select Employee records based on a combination of several fields.   This filter report records method provides a very powerful reporting feature.  (Warning:  Access may attempt to re-write your 'where' clause making it non-functioning).

Warning: If you ever want to upsize this Microsoft Access database to SQL Server then you should not refer to form fields within the query.  SQL Server can't deal with these references

Dynamic Order By Query Clause ExampleImmediate If (IIF) Order By Clause in SQL QueriesCreate a dynamic order by clause using the iif (immediate if) statement to change the 'Order By' statement in a query based on user input.  There are many instances where you would like to sort a form or report on different fields depending on a user's selection.

The following is an SQL example of an Access dynamic Order By clause.   This example assumes you have a form ('F_Emp') with an Option Group ('Sort_Option') with two possible choices.  Option 1 is for sorting by employee name and option 2 is for sorting by employee number.   Variable sorting can be accomplished in the Report however it is much more efficient to put this in the SQL code.

Select M_Employees.Name, M_Employees.Emp_Number, M_Employees.Address From M_Employees Order by IIf(Forms!F_Emp!Sort_Option=1, M_Employees.Emp_Name, M_Employees.Emp_Number);

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 43

Page 44: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

An alternative form of the Order By statement is to use ordinals.  Ordinals are numbers that refer to the fields in the select clause.  Example: ordinal 1 refers to M_Employees.Name, and ordinal 2 refers to M_Employees.Emp_Number. IIf(Forms!F_Emp!Sort_Option=1, 1, 2); This form of the IIf clause is very useful when you need to nest IIf clauses because of more than two sort choices.The immediate if (IIF) statement can also be used to create dynamic where query statements

Choose Function in Microsoft AccessThe choose function is similar to the Decode function in Oracle.  Assume the same setup as the Dynamic Order By Clause example but add a 3rd option for sorting by Address.

See below how the choose function expands your capabilities:

Select M_Employees.Name, M_Employees.Emp_Number, M_Employees.Address From M_Employees Order by Choose(Val(Forms!F_Emp!Sort_Option),M_Employees.Emp_Name,M_Employees.Emp_Number, M_Employees.Address);

Note:  Entry in Forms!F_Emp!Sort_Option must be an integer and it is best to force it to a number with the Val() function.  You can have up to 29 options and you can use the Choose Function in each part of the query except the From clause.The choose function can be used in each part of a query, except possible the from clause.

Access Bottom Up Query / Detail-Master Queries

ExamplesThere are times when you need to retrieve master records based on criteria in a detailed record.  We will assume that you have two tables in a master detail relationship.

The master is M_Employees and the detail is M_Attendance.  These  are linked by the Employee_ID field.  Our goal is to find the name and number of the employees that have missed more than 5 days of work.

Select M_Employees.Name, M_Employees.Emp_Number From M_Employees Where M_Employees.Employee_ID in (Select Employee_ID from M_Attendance Group By Employee_ID Having Count(M_Attendance.Day_Missed) >= 5);

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 44

Page 45: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Hopefully you can see how to parameterize this query to select a variable number of missed days. Or, you could use the Choose command to select the count of a different field.

Parameter Query in AccessParameter query example is an extension of the bottom-up query example.  The form field is used in the query to determine how far to look back in the M_Attendance table for missed work days.  Also, you are running this parameter query from a form called F_Emp_Report.

Access Parameter Query Code Example:Select M_Employees.Name, M_Employees.Emp_Number From M_Employees Where M_Employees.Employee_ID in (Select Employee_ID from M_Attendance Where M_Attendance.Attendance_Date >= Forms!F_Emp_Report!Start_Date Group By Employee_ID Having Count(M_Attendance.Day_Missed) >= 5);

Note:   If you get an Microsoft Access error saying that the form or field Forms![F_Emp_Report]!Start_Date (the parameter) cannot be found then you need to get the latest update for Access 2000, Version 9.0.4402 SR-1.  Referencing a form when using an aggregate function (like count, max, min, avg) produces this error when using form fields for parameter queries.

Update Table Data FieldsIn this Update Query example we want to update each employee's salary by 10%.  There are at least two ways to do this query.

Example c) is supposed to work but I get errors in Access.  It is called a correlated subquery - if you can tell me what is wrong with it I'd really appreciate it.

Same Table Update Query Code:a) Update M_Employees as A INNER JOIN M_Employees as B ON A.Employee_ID =

B.Employee_ID SET A.Salary = B.Salary*1.1 b) Update M_Employees as A, M_Employees as B Set A.Salary=B.Salary * 1.1

Where A.Employee_ID=B.Employee_ID c) Update M_Employees as A set A.Salary = (Select Salary * 1.1 from M_Employees

Where M_Employees.Employee_ID = A.Employee_ID)

Note:  I have added a another feature to this example - Aliases.  Aliases are where you use 'as' to establish a short nickname for a table or a field.  This helps when you have long table names or are trying to do a correlated subquery.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 45

Page 46: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Form Field as Combo Box FilterWe are working with an MS Access form for Employees and we need to define a Employee's Supervisor for each Employee.  However,  Employee Supervisors only advise Employees in specific departments. 

So, based upon the Employee's department a different list of potential Supervisors will be displayed in the combo box. The form, F_Employees, his three fields:  Employee_Name, Departement_Combo, and Supervisor_Combo. The following is the row source for the Supervisor_Combo:

Select Supervisor_ID, Supervisor_Name From L_Supervisors Where L_Supervisors.Departement_ID = Forms![F_Employees]![Departement_ID];

Note that the Departement_Combo is made up of two fields: Departement_ID (not visible) and Major.  Supervisor_Combo also has two fields: Departement_ID (not visible) and Major.

Now this should work ok and it may appear to work on a one record form or on the first record of a multiple record form.  However,  Access is stupid and will not automatically check to see if the Employee_Major field has changed or if we have moved to a new record in a multi-record form.  Re-quering every combo or listbox on a form on every new record could slowdown the form a lot. Therefore, to get by this you need to do two things:

1) In the After Update event on the Departement_Combo field of the F_Employees form add the command:

Me.Supervisor_Combo.Requery2) In the On Current event of a multi-record

form add the same command as in 1).

More form field as drop down list box source filter examples can be found on our Combo Box Examples home page.

Pivot Query How ToThe pesky pivot query.  For this Access coding example let us assume we have a table with the following layout:

Our goal is to total sales (Amount) by month (Sale_Date) and Department with months as column headings and departments as row headings.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 46

Page 47: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Access provides a pivot query wizard which, once you get some practice you'll find it as good place to start.  I usually have to go into the SQL editor and tweak the code a little. Here are the SQL statements that will produce the output we want:

TRANSFORM Sum([M_Sales].[Amount]) AS SumOfAmount SELECT [M_Sales].[Department] FROM M_Sales GROUP BY [M_Sales].[Department] PIVOT Format([M_Sales].[Sale_date],"mmm") In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

The key points of the query are: 1) The query's TRANSFORM statement contains the values that will be summed and

displayed as the results of the query. 2) The SELECT statement will contain the Row Headings3) The GROUP BY is just what it says 4) The PIVOT statement will create the column

headings and may be thought of as a Horizontal Group By. Here are the results of the query:

Warning about upsize to SQL Server - Access pivot query is not support.  There are workarounds which are similar to the functioning of the Histogram Example (#16).

Select Top QuerySelect Top n Records Predicate ExampleHave you ever had the need to get the 3rd record from a table using a query only?

Well, in case you want to know how to do it here is the solution: 1) Create a query (Query1) to get the top three records.  We are interested in field

called Submit_Date from a table called M_Revisions:

Select Top 3 M_Revisions.Submit_Date from M_Revisions Order by M_Revisions.Submit_Date;

2) Use Query1 as input to a new query:

Select Top 1 Query1.Submit_Date from Query1 Order by Query1.Submit_Date DESC;

Now you have the 3rd submit date.  Note that sorting the Query1 records in descending order makes the 3rd record go to the top.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 47

Page 48: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Date/Time Variables in SQL QueryAccess date/time query example is the topic of this discussion. Many types of data change over time some examples include work pay, hourly consulting rates, part costs, etc.This is an example of calculating worker pay as their pay rate changes over date/time.  You can see below there are two tables. 

The M_Employees table contains the hours worked for each date/time.  The M_Employee_PayRate table contains the worker's salary history over time.

In the image below, queries 1 and 2 are the same query but I made a copy so I could show one in design view and the other after it runs.The key to this Access date/time query is to have accurate pay rates defined by the Start and Stop dates.  Note that the current pay rate does not have a 'Stop_Date'.  The query substitutes today's date for the null stop date.   

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 48

Page 49: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Dynamic Table Links in Microsoft AccessHere's a neat trick which allows you to forego the need for permanently link tables between a front end and back end Access database setup.

Access dynamic table link works by using IN followed by a path and database name will retrieve the data dynamically.  If you put this query in VBA (password protected) then the user will not know where the data is coming from.   You won't have to worry about locking up the database objects which makes database updates/maintenance a bit cumbersome.Access dynamic table link code:

SELECT Customer_ID, Sales_Rep_IDFROM m_customer_orders IN 'p:\database\shoe_orders_data.mdb';

Another great way to use the dynamic table links technique is when you have an 'active database' and an 'archive database'  the user can dynamically switch between the two with an option on a form and a little VBA to create the alternate path to the data using dynamic table links.

Future examples will show how to create a temporary Access database and then create temporary tables in the database for processing and report generation - this technique eliminates front end database bloat.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 49

Page 50: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Access Choose Function ExampleHave you ever had to create several reports that were almost identical but had different order for the columns and a different sort order?  Many of these reports can be done in one  intelligent report and query combination with the Access SQL Command: Choose function.

Access Choose function query example setup:  We have a form called Form1.  On Form1 are two combo boxes (Field1_Combo, Field2_Combo), and a 'Preview Report' button:

Both combo boxes have the same Row Source.  Note that there are two columns in the row source; the first is a number (1, 2) and the second is the name of the field to be included in the report and sorted by.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 50

Page 51: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

The query looks like this:

   

Note that we will always retrieve the employee's Pay_Rate field, however this could be variable as well.  You'll also need to see the SQL code for the query to see how the Order By clause works for this Access choose command example:

SELECT Choose(Val([forms]![form1]![field1_combo]),[SSN],[Employee_No]) AS Field1, Choose(Val([forms]![form1]![field2_combo]),[SSN],[Employee_No]) AS Field2, M_Emp_Pay.Pay_RateFROM M_Emp_PayORDER BY Choose(Val([forms]![form1]![field1_combo]),[SSN],[Employee_No]), Choose(Val([forms]![form1]![field2_combo]),[SSN],[Employee_No]);Here's the resulting report:

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 51

Page 52: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

The second trick is how I got the column headings to come out correctly... All that's required is one line of VBA code for each label.. but before I show that here is the design view of the report:>

Ok, let's see how the VBA code assigns the correct values to the labels:

Option Compare Database

Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer)

Me.Field1_Label.Caption = Replace(Forms![form1]![Field1_Combo].Column(1), "_", " ")Me.Field2_Label.Caption = Replace(Forms![form1]![Field2_Combo].Column(1), "_", " ")

End Sub 

Don't be confused by the Replace command... all that does is get rid of underscore character in the field name (Employee_No to Employee No).Using the Access Choose function query can be extended to numerous fields and could probably be used for aggregate functions too, but I haven't tried that yet.  The alternative to using the SQL Choose command is to write many lines of VBA code in the report or behind the parameter form (Form1). You can also use the choose function to pass parameters to an Access Query.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 52

Page 53: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Access Scalar QueryAccess scalar query allows you to do in one SQL statement what you are used to doing in two or more queries.   This function allows retrieval of single values from a table, usually aggregate functions, from within the from clause.

Get individual values while at the same time getting max, min, avg, etc values from the same source without having to use the Group By clause... this greatly simplifies query design.  Here's the setup for our scalar query example:

Our goal is the retrieve SSN, Pay_Rate, Max Pay_Rate, Min Pay_Rate,  and calculate each employees' percent of maximum pay rate.

See the following SQL statement:

Don't bother trying to create this in the  design grid.  You must get into SQL view.  The key point of the query is:[select max(pay_rate) as Max_R from m_emp_pay]. as Q_Max   There are two aliases in this subquery - Max_R for the field and Q_Max for the source name.   See how these aliases are immediately used in the Select clause of the query.  No group by required!!  Therefore you get the individual pay rates for employees while, at the same time, retrieving min, max, and most importantly the percent of max.

See the results of the query below:

The main restriction with scalar SQL statement is that the function can only return a single value, although you can have multiple subqueries in one main query.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 53

Page 54: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Histogram QueryAccess Histogram query example - you'll be surprised at how easy it is to do the calculations for a seemingly complex statistical measure using a single Access query.  In this example we have customers who purchased items from a store.

We want to know the distribution of customer purchases grouped by customer's age.   To start, we have a table called M_Customer_Purchases (in reality this would probably be a query based on a Customer table and a Purchases table). 

The table has 2 fields (the purchase_date field is really not required for this example).  AgePurchase_Date The following sql statement will group the ages (purchases) into 6 categories based on the customer's age.  You can see the bracketing of the age in the immediate if statement (iif) - this created the Access histogram values.

SELECT Sum(IIf([Age]<18,1,0)) AS Group1, Sum(IIf([Age]>=18 and [Age]<30,1,0)) AS Group2, Sum(IIf([Age]>=30 and [Age]<40,1,0)) AS Group3, Sum(IIf([Age]>=40 and [Age]<50,1,0)) AS Group4, Sum(IIf([Age]>=50 and [Age]<60,1,0)) AS Group5, Sum(IIf([Age]>=60,1,0)) AS Group6FROM M_Customer_Purchases;

The following is the result of the Access example query.  You could easy pass this query to a bar chart to display the results graphically.

Note the trick is the 1, 0 in the iif statement - when the age matches the age range in the iif statement then the result is one, otherwise the result is 0, thereby providing a way to SUM the results. 

You should be able to see how you can bracket results for all kinds of data.   You could bracket date ranges to simulate a crosstab query (pivot query).  One advantage of using the method in this example over crosstabs is that you can pass query parameters to the query from a form field.

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 54

Page 55: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Calculate Running Sum Recordset ExampleHere is a fairly simple way to calculate a running sum using a DAO Recordset operation.  To begin, we have created a temporary table with Absence Dates, and Substitute Teach ID (SubID) - this table was created via a previous query not shown in this example.

Our goal is to determine running sum of substitute records based on absence date (teacher was absent and therefore a sub worked in this day).  In the example we used rst!day_count rather than just counting records because the sub can work either 1/2 days or full days (1).  Here is the VBA code:

Private Sub Sum_Button_Click()On Error GoTo Err_Sum_Button_Click

Dim rst As DAO.RecordsetDim db As DAO.DatabaseDim hold_subid As LongDim hold_day_Count As LongDim sqltext As StringDim wksp As DAO.WorkspaceSet db = CurrentDb''calculate running sum of days worked.'Set wksp = DBEngine.Workspaces(0)wksp.BeginTransSet rst = db.OpenRecordset("Select * from t_Sub_Pay order by subid,absencedate")rst.MoveFirst

hold_subid = rst!SubIDhold_day_Count = 0'Do While Not rst.EOFIf hold_subid <> rst!SubID Then' note that we reset the counter when a new sub teacher is encountered' new sub teacherhold_day_Count = rst!Day_Counthold_subid = rst!SubIDElsehold_day_Count = hold_day_Count + rst!Day_CountEnd Ifrst.Editrst!running_sum = hold_day_Count    ' calculate runing sum hererst.Updaterst.MoveNext

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 55

Page 56: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

Loopwksp.CommitTransrst.Closeset rst = Nothingwksp.closeexit sub

Err_Sum_Button_Click: wksp.rollback ' cancel transactions if there is an errorrst.closeset rst=nothingwksp.closeresume quit_itquit_it:End Sub

Note that this example also uses Transaction Processing - in this case the time to do the running sum processing was reduce by about 75%.

See some additional queries in Access Visual Basic.

SQL Predicates - Optional Value After the Select KeywordSQL Predicates are simple but important to understand for full use of the query programming language.

There are five predicate functions: Select All Select Distinct Select Distinctrow Select Top Select Top Percent

The ALL command is the default when you use a select statement:Select * from Employees

is equivalent to enteringSelect All * from Employees

The Distinct command is often confused with the distinctrow keyword.  Here is an example of the difference:

Select Distinctrow Last_Name from Employees

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 56

Page 57: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

This query won't necessarily retrieve a distinct list of employee last names.  If there are duplicates last names and ANY other field has different data between the two duplicate name records then you will get both records even though they have the same last name.  Whereas:

Select Distinct Last_Name from Employees

Will retrieve a unique list of employee last names because the Distinct command only looks at the fields you are returning in the query.  I have never had a reason to use the Distinctrow function because our tables never have duplicate rows.Select TOP (aka Top Values/Top Values) is explained in an example page: Select Top 10 Records, but we will review it here combined with the PERCENT option:

Select Top 10 Last_Name from EmployeesOrder By Age desc

Using the Top 10 example tells the query engine to return 10 records, in this case it will be the 10 oldest employees.  Here is the percent option:

Select Top 10 Percent Last_Name from Employees Order By Age desc

In this case, if you had 1000 employees in the Employee table you would retrieve 100 records containing a list of the 100 oldest employees.Now you know all about the use of predicates in the Microsoft Access programming language.

Update Master Record Based on Detail RecordsBottom-up Query Examples - Detail Record Criteria Selects Master RecordsIn this example let us assume we have two tables in a master/detail relationship.  The main table contains Tasks which much be completed.

The detail table contains one or more Action Items for each task.   The two tables are linked by Task_ID.  All Action Items must be completed before the Task is complete.  We want to mark the task as done when all the action items have been completed.  We have an AfterUpdate trigger associated with the Completed field in the Action Items form.  Here is the code to update the master table (Tasks) when all items are completed for the task.

Private Sub Action_Complete_AfterUpdate()     If Me.Action_Complete=true then         DoCmd.RunSQL ("Update Tasks set Task_Complete=True " & _         " Where Tasks.Task_ID in " & _         " (Select Task_ID from Action_Items where Task_ID=" & Me.Task_ID & _         " Having Max(Action_Items.Action_Completed)=-1 " & _         " Group By Task_ID)")     Else

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 57

Page 58: SQL is a standard computer language for accessing … · Web viewSQL is a standard computer language for accessing and manipulating databases. In this tutorial you will learn how

        DoCmd.RunSql ("Update Tasks set Task_Complete=False " & _         " where Task_ID=" & Me.Task_ID)     End If End Sub

Ok... this is more of an SQL example than a visual basic example.  But this is a perfect example of creating a very simple solution to a potentially very complicated task.   The key to creating highly maintainable Access databases is to have a consultant who knows both SQL programming and visual basic programming.

Here is the trick to this query... If all the Action_Completed Yes/No fields are true (-1) then the Max of them will be -1.  If any are not true (0) then the Max will be 0. You should have indexes on all table fields mentioned in the SQL statement.

Crosstab Query Added TrickHere is a slight twist to a simple MS Access crosstab query that may not seem obvious to you.

In this example we want only the totals by month and we don't care about department. TRANSFORM Sum([M_Sales].[Amount]) AS SumOfAmount SELECT "Total" AS Total FROM M_Sales GROUP BY "Total" PIVOT Format([M_Sales].[Sale_date],"mmm") In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

We need to select something so I put in the constant 'Total' so that the pivot query will run.  We don't want to see 'Total' in the first column so we will hide this column.  Here are the results:

Tip:  If you need to do some restriction to select only certain records then create that query first and use it as the input to the pivot query.  It will make things simpler for you.

Success for You All

Modul Praktikum Basis Data/MSAccess-SQL/Hal. 58