SQL Workshop Introduction Queries Doug Shook SQL Server As its - - PowerPoint PPT Presentation

sql workshop
SMART_READER_LITE
LIVE PREVIEW

SQL Workshop Introduction Queries Doug Shook SQL Server As its - - PowerPoint PPT Presentation

SQL Workshop Introduction Queries Doug Shook SQL Server As its name implies: its a data base server! Technically it is a database management system (DBMS) Competitors: Oracle, MySQL, DB2 End users (thats you!) interact


slide-1
SLIDE 1

SQL Workshop

Introduction Queries

Doug Shook

slide-2
SLIDE 2

2

SQL Server

 As its name implies: its a data base server!

– Technically it is a database management system (DBMS) – Competitors: Oracle, MySQL, DB2

 End users (that’s you!) interact as clients

– Queries formed on the client and passed to the server

slide-3
SLIDE 3

3

SQL Server

Network Database server

`

Client

`

Client

`

Client

slide-4
SLIDE 4

4

Relational database model

 Data is stored in tables

– One or more columns (fields) – Many, many, rows (records)

 Modeled after real world entities

– Attributes – Instances

 Primary keys are used to identify each record

– Must be unique!

slide-5
SLIDE 5

5

Relational database model

Primary key Columns Rows

slide-6
SLIDE 6

6

Relational database model

 Relationships are defined between two tables by

foreign keys – One-to-one – One-to-many – Many-to-many

 Primary key -> foreign key

slide-7
SLIDE 7

7

Relational database model

Primary key Foreign key

slide-8
SLIDE 8

8

Columns

 Columns have associated properties

– Data type – Null? – Default value – Identity column

slide-9
SLIDE 9

9

Comparison with file systems

 Databases...

– Are consistent

  • Same basic structure for all data

– Are easier to maintain

  • Due to centralization

– Can perform validations – Can enforce relationships – Can access many records at once – Allow concurrent access

 Performance considerations?

slide-10
SLIDE 10

10

SQL

 Forms the basis of all DBMS

– Basic statements will work (mostly) regardless of platform – Each vendor adds “extensions”

 Two main categories

– Data Manipulation Language – Data Definition Language

slide-11
SLIDE 11

11

SQL

SQL DML statements

 SELECT  INSERT  UPDATE  DELETE

SQL DDL statements

 CREATE DATABASE, TABLE, INDEX  ALTER TABLE, INDEX  DROP DATABASE, TABLE, INDEX

slide-12
SLIDE 12

12

SQL Coding Guidelines

 Freeform

– Lines, spaces, linebreaks do not affect code

 Not case sensitive (!)  Comments

– Block /* */ – Single line --

slide-13
SLIDE 13

13

SQL Coding Guidelines

 Recommendations:

– Each clause should be on a new line – Break up long clauses and indent – Keywords should be capatalized (or in all caps)

  • Column and table names should use CamelCase

– Each statement should end with a semicolon

  • Technically not required by SQL Server but...
slide-14
SLIDE 14

14

SQL Coding Guidelines

A SELECT statement that’s difficult to read

select invoicenumber, invoicedate, invoicetotal, invoicetotal – paymenttotal – credittotal as balancedue from invoices where invoicetotal – paymenttotal – credittotal > 0 order by invoicedate

A SELECT statement that’s coded with a readable style

Select InvoiceNumber, InvoiceDate, InvoiceTotal, InvoiceTotal – PaymentTotal – CreditTotal As BalanceDue From Invoices Where InvoiceTotal – PaymentTotal – CreditTotal > 0 Order By InvoiceDate;

slide-15
SLIDE 15

15

Our Setup

 Server set up for us

– We'll be sharing...so be nice!

 Need a client

– DBVisualizer

 washu.cyteeotxp6ae.us-east-1.rds.amazonaws.com

slide-16
SLIDE 16

16

Connecting to the DB

 Server name: supplied to you  Authentication

– Username: washu – Password: workshop

slide-17
SLIDE 17

17

Database Diagrams

 Shows:

– Table relationships – Column names – Primary keys

 Great for visualizing the database as a whole

slide-18
SLIDE 18

18

Queries

 Click the green triangle

– SQL Commander

 Ensure that the DB you’d like to work with is

selected in the combobox

 Type in the query

– Execute button

 Results displayed at the bottom  Once a query works the way you want, save it!

slide-19
SLIDE 19

19

Syntax Errors

 Sometimes detected by the query editor  Common mistakes

– Wrong DB selected in combobox – Misspellings – Missing quotation/parentheses

slide-20
SLIDE 20

20

Documentation

 Short version: Use it!  Long version: It will save you time and effort. Use it!

slide-21
SLIDE 21

21

SELECT

 Used to retrieve information  (Up to) four clauses:

– SELECT

  • Column name(s)

– FROM

  • Table name

– WHERE (Optional)

  • Conditional statement(s)

– ORDER BY (Optional)

  • Column name(s)
slide-22
SLIDE 22

22

SELECT Examples

A simple SELECT statement

SELECT * FROM Invoices;

A SELECT statement that retrieves and sorts rows

SELECT InvoiceNumber, InvoiceDate, InvoiceTotal FROM Invoices ORDER BY InvoiceTotal;

A SELECT statement that retrieves a calculated value

SELECT InvoiceID, InvoiceTotal, CreditTotal + PaymentTotal AS TotalCredits FROM Invoices WHERE InvoiceID = 17;

A SELECT statement that retrieves all invoices between given dates

SELECT InvoiceNumber, InvoiceDate, InvoiceTotal FROM Invoices WHERE InvoiceDate BETWEEN '2012-01-01' AND '2012-05-31' ORDER BY InvoiceDate;

slide-23
SLIDE 23

23

Column Specifications

The expanded syntax of the SELECT clause

SELECT [ALL|DISTINCT] [TOP n [PERCENT] [WITH TIES]] column_specification [[AS] result_column] [, column_specification [[AS] result_column]] ...

Five ways to code column specifications

 All columns in a base table  Column name in a base table  Arithmetic expression  String expression  Function

slide-24
SLIDE 24

24

Column Specifications

Column specifications that use base table values

The * is used to retrieve all columns

SELECT *

Column names are used to retrieve specific columns

SELECT VendorName, VendorCity, VendorState

Column specifications that use calculated values

An arithmetic expression is used to calculate BalanceDue

SELECT InvoiceNumber, InvoiceTotal - PaymentTotal – CreditTotal AS BalanceDue

A string expression is used to calculate FullName

SELECT VendorContactFName + ' ' + VendorContactLName AS FullName

A function is used to calculate CurrentDate

SELECT InvoiceNumber, InvoiceDate, GETDATE() AS CurrentDate

slide-25
SLIDE 25

25

Naming Columns

Two ways to name the columns in a result set

Using the AS keyword (the preferred technique)

SELECT InvoiceNumber AS [Invoice Number], InvoiceDate AS Date, InvoiceTotal AS Total FROM Invoices;

Using the equal operator (an older technique)

SELECT [Invoice Number] = InvoiceNumber, Date = InvoiceDate, Total = InvoiceTotal FROM Invoices;

The result set for both SELECT statements

slide-26
SLIDE 26

26

String Expressions

How to concatenate string data

SELECT VendorCity, VendorState, VendorCity + VendorState FROM Vendors;

How to format string data using literal values

SELECT VendorName, VendorCity + ', ' + VendorState + ' ' + VendorZipCode AS Address FROM Vendors;

How to include apostrophes in literal values

SELECT VendorName + '''s Address: ', VendorCity + ', ' + VendorState + ' ' + VendorZipCode FROM Vendors;

slide-27
SLIDE 27

27

Functions

A SELECT statement that uses the LEFT function

SELECT VendorContactFName, VendorContactLName, LEFT(VendorContactFName, 1) + LEFT(VendorContactLName, 1) AS Initials FROM Vendors;

A SELECT statement that uses the CONVERT function

SELECT 'Invoice: #' + InvoiceNumber + ', dated ' + CONVERT(char(8), PaymentDate, 1) + ' for $' + CONVERT(varchar(9), PaymentTotal, 1) FROM Invoices;

A SELECT statement that computes the age of an invoice

SELECT InvoiceDate, GETDATE() AS 'Today''s Date', DATEDIFF(day, InvoiceDate, GETDATE()) AS Age FROM Invoices;

slide-28
SLIDE 28

28

DISTINCT

A SELECT statement that returns all rows

SELECT VendorCity, VendorState FROM Vendors ORDER BY VendorCity;

A SELECT statement that eliminates duplicate rows

SELECT DISTINCT VendorCity, VendorState FROM Vendors;

slide-29
SLIDE 29

29

TOP

A SELECT statement with a TOP clause

SELECT TOP 5 VendorID, InvoiceTotal FROM Invoices ORDER BY InvoiceTotal DESC;

A SELECT statement with a TOP clause and the PERCENT keyword

SELECT TOP 5 PERCENT VendorID, InvoiceTotal FROM Invoices ORDER BY InvoiceTotal DESC;

A SELECT statement with a TOP clause and the WITH TIES keyword

SELECT TOP 5 WITH TIES VendorID, InvoiceDate FROM Invoices ORDER BY InvoiceDate ASC;

slide-30
SLIDE 30

30

WHERE

 Recall that this is optional!

Examples of WHERE clauses that retrieve…

Vendors located in Iowa

WHERE VendorState = 'IA'

Invoices with a balance due (two variations)

WHERE InvoiceTotal – PaymentTotal – CreditTotal > 0 WHERE InvoiceTotal > PaymentTotal + CreditTotal

Vendors with names from A to L

WHERE VendorName < 'M'

Invoices on or before a specified date

WHERE InvoiceDate <= '2012-05-31'

Invoices on or after a specified date

WHERE InvoiceDate >= '5/1/12'

Invoices with credits that don’t equal zero

WHERE CreditTotal <> 0

slide-31
SLIDE 31

31

Logical Operators

The syntax of the WHERE clause with logical operators

WHERE [NOT] search_condition_1 {AND|OR} [NOT] search_condition_2 ...

Examples of queries using logical operators

The AND operator

WHERE VendorState = 'NJ' AND YTDPurchases > 200

The OR operator

WHERE VendorState = 'NJ' OR YTDPurchases > 200

The NOT operator

WHERE NOT (InvoiceTotal >= 5000 OR NOT InvoiceDate <= '2012-07-01')

The same condition without the NOT operator

WHERE InvoiceTotal < 5000 AND InvoiceDate <= '2012-07-01'

slide-32
SLIDE 32

32

IN

The syntax of the WHERE clause with an IN phrase

WHERE test_expression [NOT] IN ({subquery|expression_1 [, expression_2]...})

Examples of the IN phrase

An IN phrase with a list of numeric literals

WHERE TermsID IN (1, 3, 4)

An IN phrase preceded by NOT

WHERE VendorState NOT IN ('CA', 'NV', 'OR')

An IN phrase with a subquery

WHERE VendorID IN (SELECT VendorID FROM Invoices WHERE InvoiceDate = '2012-05-01')

slide-33
SLIDE 33

33

BETWEEN

The syntax of the WHERE clause with a BETWEEN phrase

WHERE test_expression [NOT] BETWEEN begin_expression AND end_expression

Examples of the BETWEEN phrase

A BETWEEN phrase with literal values

WHERE InvoiceDate BETWEEN '2012-05-01' AND '2012-05-31'

A BETWEEN phrase preceded by NOT

WHERE VendorZipCode NOT BETWEEN 93600 AND 93799

A BETWEEN phrase with a test expression coded as a calculated value

WHERE InvoiceTotal – PaymentTotal – CreditTotal BETWEEN 200 AND 500

A BETWEEN phrase with calculated values

WHERE InvoiceDueDate BETWEEN GetDate() AND GetDate() + 30

slide-34
SLIDE 34

34

Dates

 Datetime data type includes date and time (duh)  So what happens when you compare just the date to

a datetime column?

 More about dates to come...

slide-35
SLIDE 35

35

LIKE

 Used for matching string patterns  Symbols

– %: match zero or more characters – _: match any single character – []: match anything contained within – [ - ]: match anything within the given range – [ ^ ]: match anything except what is given

slide-36
SLIDE 36

36

LIKE

WHERE clauses that use the LIKE phrase Example 1

WHERE VendorCity LIKE 'SAN%'

Cities that will be retrieved “San Diego” and “Santa Ana”

Example 2

WHERE VendorName LIKE 'COMPU_ER%'

Vendors that will be retrieved “Compuserve” and “Computerworld”

Example 3

WHERE VendorContactLName LIKE 'DAMI[EO]N'

Names that will be retrieved “Damien” and “Damion”

slide-37
SLIDE 37

37

LIKE

WHERE clauses that use the LIKE phrase (cont.) Example 4

WHERE VendorState LIKE 'N[A-J]'

States that will be retrieved “NC” and “NJ” but not “NV” or “NY”

Example 5

WHERE VendorState LIKE 'N[^K-Y]'

States that will be retrieved “NC” and “NJ” but not “NV” or “NY”

Example 6

WHERE VendorZipCode NOT LIKE '[1-9]%'

Zip codes that will be retrieved “02107” and “08816”

slide-38
SLIDE 38

38

NULL

 What qualifies as NULL?

– 0? – Empty string? (“”) – A single space? (“ “)

slide-39
SLIDE 39

39

NULL

A SELECT statement that retrieves rows with zero values

SELECT * FROM NullSample WHERE InvoiceTotal = 0;

A SELECT statement that retrieves rows with non-zero values

SELECT * FROM NullSample WHERE InvoiceTotal <> 0;

A SELECT statement that retrieves rows with null values

SELECT * FROM NullSample WHERE InvoiceTotal IS NULL;

A SELECT statement that retrieves rows without null values

SELECT * FROM NullSample WHERE InvoiceTotal IS NOT NULL;

slide-40
SLIDE 40

40

ORDER BY

 Can sort by one or more columns

– Sorts ascending by default

 Sorting order (ascending)

– Null – Special Characters (&, !, etc.) – Numbers – Letters

 Can also use aliases, expressions, and column

positions

slide-41
SLIDE 41

41

ORDER BY

An ORDER BY clause that sorts by one column in descending sequence

SELECT VendorName, VendorCity + ', ' + VendorState + ' ' + VendorZipCode AS Address FROM Vendors ORDER BY VendorName DESC;

An ORDER BY clause that sorts by three columns

SELECT VendorName, VendorCity + ', ' + VendorState + ' ' + VendorZipCode AS Address FROM Vendors ORDER BY VendorState, VendorCity, VendorName;

slide-42
SLIDE 42

42

ORDER BY

An ORDER BY clause that uses an alias

SELECT VendorName, VendorCity + ', ' + VendorState + ' ' + VendorZipCode AS Address FROM Vendors ORDER BY Address, VendorName;

An ORDER BY clause that uses an expression

SELECT VendorName, VendorCity + ', ' + VendorState + ' ' + VendorZipCode AS Address FROM Vendors ORDER BY VendorContactLName + VendorContactFName;

An ORDER BY clause that uses column positions

SELECT VendorName, VendorCity + ', ' + VendorState + ' ' + VendorZipCode AS Address FROM Vendors ORDER BY 2, 1;

slide-43
SLIDE 43

43

ORDER BY

 OFFSET and FETCH can optionally be used to

retrieve a range of rows – OFFSET: Starting position – FETCH: Number to retrieve after offset

slide-44
SLIDE 44

44

ORDER BY

The syntax of the ORDER BY clause for retrieving a range of rows

ORDER BY order_by_list OFFSET offset_row_count {ROW|ROWS} [FETCH {FIRST|NEXT} fetch_row_count {ROW|ROWS} ONLY]

An ORDER BY clause that retrieves the first five rows

SELECT VendorID, InvoiceTotal FROM Invoices ORDER BY InvoiceTotal DESC OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;

An ORDER BY clause that retrieves rows 11 through 20

SELECT VendorName, VendorCity, VendorState, VendorZipCode FROM Vendors WHERE VendorState = 'CA' ORDER BY VendorCity OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

slide-45
SLIDE 45

45

Exercises

 Write a SELECT statement that returns three

columns from the Vendors table: VendorContactFName, VendorContactLName, and

  • VendorName. Sort the result set by last name, then

by first name.

slide-46
SLIDE 46

46

Exercises

 Write a SELECT statement that returns four columns

from the Invoices table, named Number, Total, Credits, and Balance: Number Column alias for the InvoiceNumber column Total Column alias for the InvoiceTotal column Credits Sum of the PaymentTotal and CreditTotal columns Balance InvoiceTotal minus the sum of PaymentTotal and CreditTotal

slide-47
SLIDE 47

47

Exercises

 Write a SELECT statement that returns one column

from the Vendors table named Full Name. Create this column from the VendorContactFName and VendorContactLName columns. Format it as follows: last name, comma, first name (for example, "Doe, John"). Sort the result set by last name, then by first name.

slide-48
SLIDE 48

48

Exercises

 Write a SELECT statement that returns three

columns: InvoiceTotal From the Invoices table 10% 10% of the value of InvoiceTotal Plus 10% The value of InvoiceTotal plus 10% Only return those rows with a balance due greater than 1000. Sort the result set by InvoiceTotal, with the largest invoice first.

slide-49
SLIDE 49

49

Exercises

 Modify the solution to the problem on slide 46 to

filter for invoices with an InvoiceTotal that's greater than or equal to $500 but less than or equal to $10,000.

slide-50
SLIDE 50

50

Exercises

 Modify the solution to the problem on slide 47 to

filter for contacts whose last name begins with the letter A, B, C, or E.

slide-51
SLIDE 51

51

Exercises

 Write a SELECT statement that determines whether

the PaymentDate column of the Invoices table has any invalid values. To be valid, PaymentDate must be a null value if there's a balance due and a non-null value if there's no balance due. Code a compound condition in the WHERE clause that tests for these conditions.