0% found this document useful (0 votes)
16 views41 pages

Chapter 1 Slides

The document provides an introduction to relational databases and client-server systems. It defines key terms related to database tables, relationships between tables, SQL statements, and designing a relational database using an entity relationship diagram. Example SQL queries are also included to demonstrate selecting, joining, and inserting data.

Uploaded by

vanshit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views41 pages

Chapter 1 Slides

The document provides an introduction to relational databases and client-server systems. It defines key terms related to database tables, relationships between tables, SQL statements, and designing a relational database using an entity relationship diagram. Example SQL queries are also included to demonstrate selecting, joining, and inserting data.

Uploaded by

vanshit
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 41

Chapter 1

An introduction
to relational
databases

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 1
Objectives
Knowledge
 Identify the three main hardware components of a client/server
system.
 Describe the way a client accesses the database on a server using
these terms: application software, data access API, database
management system, SQL query, and query results.
 Describe the way a relational database is organized using these
terms: tables, columns, rows, cells, primary keys, unique keys,
and foreign keys.
 Identify the three types of relationships that can exist between
two tables.
 Describe the way the columns in a table are defined using these
terms: data type, null value, and default value.

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 2
Objectives (continued)
 Describe how an entity relationship diagram can show how the
tables in a database are defined and related.
 Describe the difference between DML statements and DDL
statements.
 List three coding techniques that can make your SQL code easier
to read and maintain.
 Describe the use of a database driver.

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 3
A simple client/server system

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 4
The three hardware components
of a client/server system
 Clients
 Server
 Network

Terms to know about client/server systems


 Local area network (LAN)
 Wide area network (WAN)
 Enterprise system

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 5
Client software, server software,
and the SQL interface

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 6
Server software
 Database management system (DBMS)
 The DBMS does the back-end processing

Client software
 Application software
 Data access API (application programming interface)
 The client software does the front-end processing

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 7
The SQL interface
 The application software communicates with the DBMS by
sending SQL queries through the data access API.
 When the DBMS receives a query, it provides a service like
returning the requested data (the query results) to the client.
 SQL stands for Structured Query Language, which is the
standard language for working with a relational database.

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 8
A networked system with an application server

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 9
A simple web-based system

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 10
The Vendors table in an
Accounts Payable (AP) database

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 11
Terms to know about database tables
 Relational database
 Table
 Column
 Row
 Cell
 Primary key
 Composite primary key
 Non-primary key (unique key)
 Index

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 12
The relationship between two tables

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 13
Terms to know about table relationships
 Foreign key
 Referential integrity
 One-to-many relationship
 One-to-one relationship
 Many-to-many relationship

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 14
The columns of the Invoices table

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 15
Common MySQL data types
CHAR, VARCHAR
INT, DECIMAL
FLOAT
DATE

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 16
Terms to know about columns
 Data type
 Null value
 Default value
 Auto increment column

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 17
An EER diagram for the AP database

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 18
How knowing “standard SQL” helps you
 Basic SQL statements are the same for all dialects.
 Once you know one dialect, you can easily learn others.

How knowing “standard SQL” does not help


you
 Most applications require modification when moved to another
database.

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 19
First database releases
Oracle 1979
DB2 1985
SQL Server 1987
MySQL 2000

Primary platforms
Oracle Unix
OS/390 and z/OS
DB2 OS/390 and z/OS
Unix
SQL Server Windows
MySQL Unix
Windows
Mac OS

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 20
SQL DML statements
SELECT
INSERT
UPDATE
DELETE

SQL DDL statements


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

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 21
A statement that creates a new database
CREATE DATABASE ap

A statement that selects the current database


USE ap

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 22
A statement that creates a new table
CREATE TABLE invoices
(
invoice_id INT PRIMARY KEY
AUTO_INCREMENT,
vendor_id INT NOT NULL,
invoice_number VARCHAR(50) NOT NULL,
invoice_date DATE NOT NULL,
invoice_total DECIMAL(9,2) NOT NULL,
payment_total DECIMAL(9,2) DEFAULT 0,
credit_total DECIMAL(9,2) DEFAULT 0,
terms_id INT NOT NULL,
invoice_due_date DATE NOT NULL,
payment_date DATE,
CONSTRAINT invoices_fk_vendors
FOREIGN KEY (vendor_id)
REFERENCES vendors (vendor_id),
CONSTRAINT invoices_fk_terms
FOREIGN KEY (terms_id)
REFERENCES terms (terms_id)
)

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 23
A statement that adds a new column to a table
ALTER TABLE invoices
ADD balance_due DECIMAL(9,2)

A statement that deletes the new column


ALTER TABLE invoices
DROP COLUMN balance_due

A statement that creates an index on the table


CREATE INDEX invoices_vendor_id_index
ON invoices (vendor_id)

A statement that deletes the new index


DROP INDEX invoices_vendor_id_index

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 24
The Invoices base table

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 25
A SELECT statement that retrieves and sorts
selected columns and rows
SELECT invoice_number, invoice_date, invoice_total,
payment_total, credit_total,
invoice_total - payment_total - credit_total
AS balance_due
FROM invoices
WHERE invoice_total - payment_total - credit_total > 0
ORDER BY invoice_date

The result set defined by the SELECT statement

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 26
A SELECT statement that joins data
SELECT vendor_name, invoice_number, invoice_date,
invoice_total
FROM vendors INNER JOIN invoices
ON vendors.vendor_id = invoices.vendor_id
WHERE invoice_total >= 500
ORDER BY vendor_name, invoice_total DESC

The result set defined by the SELECT statement

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 27
Terms to know about SQL
 Query
 Base table
 Result table (result set)
 Calculated value
 Join
 Inner join
 Outer join

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 28
A statement that adds a row to the Invoices table
INSERT INTO invoices
(vendor_id, invoice_number, invoice_date,
invoice_total, terms_id, invoice_due_date)
VALUES
(12, '3289175', '2018-07-18', 165, 3, '2018-08-17')

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 29
A statement that changes the value of a column
for one row
UPDATE invoices
SET credit_total = 35.89
WHERE invoice_number = '367447'

A statement that changes the value of a column


for multiple rows
UPDATE invoices
SET invoice_due_date
= DATE_ADD(invoice_due_date, INTERVAL 30 DAY)
WHERE terms_id = 4

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 30
A statement that deletes a selected invoice
from the Invoices table
DELETE FROM invoices
WHERE invoice_number = '4-342-8069'

A statement that deletes all paid invoices


from the Invoices table
DELETE FROM invoices
WHERE invoice_total - payment_total - credit_total = 0

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 31
A SELECT statement that’s difficult to read
select invoice_number, invoice_date, invoice_total, payment_total,
credit_total, invoice_total - payment_total – credit_total as
balance_due from invoices where invoice_total – payment_total -
credit_total > 0 order by invoice_date

A SELECT statement that’s easy to read


SELECT invoice_number, invoice_date, invoice_total,
payment_total, credit_total,
invoice_total - payment_total - credit_total
AS balance_due
FROM invoices
WHERE invoice_total - payment_total - credit_total > 0
ORDER BY invoice_date

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 32
A SELECT statement with a block comment
/*
Author: Joel Murach
Date: 8/22/2018
*/
SELECT invoice_number, invoice_date, invoice_total,
invoice_total - payment_total - credit_total
AS balance_due
FROM invoices

A SELECT statement with a single-line comment


-- The fourth column calculates the balance due
SELECT invoice_number, invoice_date, invoice_total,
invoice_total - payment_total - credit_total
AS balance_due
FROM invoices

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 33
Coding recommendations
 Capitalize all keywords.
 Use lowercase for the other code.
 Separate the words in names with underscores.
 Start each clause on a new line.
 Break long clauses into multiple lines.
 Indent continued lines.
 Use comments only for code that is difficult to understand.
 Make sure that the comments are correct and up-to-date.

Note
 Line breaks, white space, indentation, and capitalization have no
effect on the operation of a statement.

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 34
Common options for accessing MySQL data

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 35
Two commonly used MySQL drivers
 Connector/J
 Connector/Net

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 36
Terms to know about accessing MySQL data
 Data access API
 mysqli API (for PHP)
 PDO API (for PHP)
 JDBC API (for Java)
 ADO.NET API (for .NET languages)
 Database driver

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 37
PHP code that gets data from MySQL (part 1)
<?php
$query =
"SELECT vendor_name, invoice_number, invoice_total
FROM vendors INNER JOIN invoices
ON vendors.vendor_id = invoices.vendor_id
WHERE invoice_total >= 500
ORDER BY vendor_name, invoice_total DESC";
$dsn = 'mysql:host=localhost;dbname=ap';
$username = 'root';
$password = 'sesame';

try {
$db = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
$error_message = $e->getMessage();
echo $error_message;
exit();
}

$statement = $db->prepare($query);
$statement->execute();
$rows = $statement->fetchAll();
?>

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 38
PHP code that gets data from MySQL (part 2)
<!DOCTYPE html>
<html lang="en">
<head>
<title>DB Test</title>
</head>
<body>
<h1>Invoices with totals over 500:</h1>

<?php foreach ($rows as $row) : ?>


<p>
Vendor: <?php echo $row['vendor_name']; ?><br/>
Invoice No: <?php echo $row['invoice_number']; ?>
<br/>
Total: $<?php echo
number_format($row['invoice_total'], 2); ?>
</p>
<?php endforeach; ?>

</body>
</html>

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 39
Java code that gets data from MySQL (part 1)
import java.sql.*;
import java.text.NumberFormat;

public class DBTestApp


{
public static void main(String args[])
{
String query =
"SELECT vendor_name, invoice_number, invoice_total " +
"FROM vendors INNER JOIN invoices " +
"ON vendors.vendor_id = invoices.vendor_id " +
"WHERE invoice_total >= 500 " +
"ORDER BY vendor_name, invoice_total DESC";

String dbUrl = "jdbc:mysql://localhost:3306/ap";


String username = "root";
String password = "sesame";

try (Connection connection =


DriverManager.getConnection(
dbUrl, username, password);
PreparedStatement ps =
connection.prepareStatement(query);
ResultSet rs = ps.executeQuery())

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 40
Java code that gets data from MySQL (part 2)
{
System.out.println("Invoices with totals over 500:\n");
while(rs.next())
{
String vendorName = rs.getString("vendor_name");
String invoiceNumber =
rs.getString("invoice_number");
double invoiceTotal = rs.getDouble("invoice_total");
NumberFormat currency =
NumberFormat.getCurrencyInstance();
String invoiceTotalString =
currency.format(invoiceTotal);
System.out.println(
"Vendor: " + vendorName + "\n" +
"Invoice No: " + invoiceNumber + "\n" +
"Total: " + invoiceTotalString + "\n");
}
}
catch(SQLException e)
{
System.out.println(e.getMessage());
}
}
}

© 2019, Mike Murach & Associates, Inc.


Murach's MySQL 3rd Edition C1, Slide 41

You might also like