0% found this document useful (0 votes)
33 views

SQL and You: A Friendly Introduction To Databases

This document provides a friendly introduction to databases and SQL. It discusses the key components of a database including attributes, records, tables, and how they relate. It then covers SQL commands for creating tables, inserting data, selecting data with queries, updating and deleting records. The document also explains database normalization through various normal forms to reduce redundancy and inconsistencies in databases.

Uploaded by

Adil Ahmad
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views

SQL and You: A Friendly Introduction To Databases

This document provides a friendly introduction to databases and SQL. It discusses the key components of a database including attributes, records, tables, and how they relate. It then covers SQL commands for creating tables, inserting data, selecting data with queries, updating and deleting records. The document also explains database normalization through various normal forms to reduce redundancy and inconsistencies in databases.

Uploaded by

Adil Ahmad
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 48

SQL and You: A friendly introduction to databases

What is a database?

Parts of a database

Attributes (fields)

An attribute/field describes something about an item.


A record is the representation of an individual item. A collection of records A collection of tables and rules for accessing the tables

Records

Table

Database

Parts of a database
Record Tables Attribute/Field

Attributes/fields become columns Records become rows Rules determine the relationship between the tables and tie the data together to form a database

I need a new database!

Many people ask for new databases when in fact they only need a new table within an existing database. The data within the tables should be all related somehow.

By owner By project

Creating a database

What information are we trying to store? How do we describe the information? Phone Book/Contact entries Name Address Company Phone Number URL/Web Page Age Height Birthday When we added the entry

Data Types

Binary

Database specific binary objects Pictures, digital signatures, etc.


True/False values Fixed width or variable size Integer, Real (floating decimal point), Money Time, Date, Timestamp

Boolean

Character

Numeric

Temporal

Phone Book/Contact Record


Name Address Company Phone Number URL/Web Page Age Height Birthday When we added the entry Character Character Character Character Character Integer Real (float) Date Timestamp

E. F. Codds Normal Forms


Summarized from Barry Wises article on Database Normalization
http://www.phpbuilder.com/columns/barry20000731.php3?page=1

What are the normal forms?

E. F. Codd in 1972 wrote a paper on Further Normalization of the Data Base Relational Model Normal forms reduce the amount of redundancy and inconsistent dependency within databases. Codd proposed three normal forms and through the years two more have been added.

The Zero Form

No rules have been applied Where most people start (and stop) No room for growth Usually wastes space

Contacts
Name Company Address Phone1 Phone2 Phone3 ZipCode

Joe

ABC

123

5532

2234

3211

12345

Jane
Chris

XYZ
PDQ

456
789

3421
2341 3211

14454
14423

First Normal Form

Eliminate repeating columns in each table Create a separate table for each set of related data Identify each set of related data with a primary key

Contacts
Id Name Company Address Phone ZipCode

1
1 1 2 3 3

Joe
Joe Joe Jane Chris Chris

ABC
ABC ABC XYZ PDQ PDQ

123
123 123 456 789 789

5532
2234 3211 3421 2341 3211

12345
12345 12345 14454 14423 14423

Benefits: Now we can have infinite phone numbers or company addresses for each contact. Drawback: Now we have to type in everything over and over again. This leads to inconsistency, redundancy and wasting space. Thus, the second normal form

Second Normal Form

Create separate tables for sets of values that apply to multiple records Relate these tables with a foreign key.

People
Id 1 2 Name Joe Jane Company ABC XYZ Address 123 456 Zip 12345 14454

Chris

PDQ

789

14423

PhoneNumbers
PhoneID 1 2 Id 1 1 Phone 5532 2234

3
4 5 6

1
2 3 3

3211
3421 2341 3211

Third Normal Form

Eliminate fields that do not depend on the primary key.


PhoneNumbers

People
Id 1 2 3 Name Joe Jane Chris Addressid 1 2 3

PhoneID 1 2 3 4 5 6

Id 1 1 1 2 3 3

Phone 5532 AddressID 2234 3211 3421 2341 3211 1 2 3

Address
Company ABC XYZ PDQ Address 123 456 789 Zip 12345 14454 14423

Is this enough? Codd thought so What about many to many?

Kinds of Relationships

One to One

One row of a table matches exactly to another

One person, one id number, one address

One to Many

One row of a table matches many of another

One person, many phone numbers

Many to Many

One row may match many of another or vice versa

Artist to Album

One album, many artists Many artists, one album Many artists, many album

Fourth Normal Form

In a many to many relationship, independent entities cannot be stored in the same table. The same phone number 3211 shared by 1 and 3 can now be changed in one spot.

PhoneNumbers
PhoneID 1 2 3 4 5 Phone 5532 2234 3211 3421 2341

PhoneRelations
PhoneRelID 1 2 3 4 5 6 Id 1 1 1 2 3 3 PhoneID 1 2 3 4 5 3

Fifth Normal Form

The very esoteric one that is probably not required to get the most out of your database. The original table must be reconstructed from the tables into which it has been broken down. The rule ensures that you have not created any extraneous columns and all the tables are only as large as they need to be.

The Normal Forms

First Form Eliminate replicated data in tables Create separate tables for each set of related data Identify each set of related data with a primary key Second Form Create separate tables for sets of values that apply to multiple records Relate the tables with a foreign key Third Form Eliminate fields that do not depend on the primary key Fourth Form In many-to-many relationships, independent entities cannot be stored in the same table Fifth Form So rarely used but the purest form of separation of data

What do I need to remember?

Keep normalization in mind. Dont replicate data in a table. If you break the rules, know why you are breaking the rules and do it for a good reason.

Speed Organization Thats the way it comes to you

All you need to know about SQL in 30 minutes

Basic SQL Commands

Creating tables with CREATE Adding data with INSERT Viewing data with SELECT Removing data with DELETE Modifying data with UPDATE Destroying tables with DROP

Creating tables with CREATE

Generic form
CREATE TABLE tablename ( column_name data_type attributes, column_name data_type attributes, )

Table and column names cant have spaces or be reserved words like TABLE, CREATE, etc.

Phone Book/Contact Record


Name Address Company Phone Number URL/Web Page Age Height Birthday When we added the entry Character Character Character Character Character Integer Real (float) Date Timestamp

Phone Book/Contact Table


CREATE TABLE contacts ( Name VARCHAR(40), Address VARCHAR(60), Company VARCHAR(60), Phone VARCHAR(11), URL VARCHAR(80), Age INT, Height FLOAT, Birthday DATE, WhenEntered TIMESTAMP ); Plan your tables very carefully! Once created, they are difficult to change!

Phone Book/Contact Table


CREATE TABLE contacts ( ContactID INT PRIMARY KEY, Name VARCHAR(40), Address VARCHAR(60), Company VARCHAR(60), Phone VARCHAR(11), URL VARCHAR(80), Age INT, Height FLOAT, Birthday DATE, WhenEntered TIMESTAMP ); If you are going to use the relational nature of a database, dont forget you need to have a unique way to access records! There is a way to make the key automatically increment, so you dont have to worry about which one is next.

Data Types

Binary

Database specific binary objects (BLOB)


True/False values (BOOLEAN) Fixed width (CHAR) or variable size (VARCHAR) Integer (INT), Real (FLOAT), Money (MONEY) Time (TIME), Date (DATE), Timestamp (TIMESTAMP)

Boolean

Character

Numeric

Temporal

Adding data with INSERT

Generic Form
INSERT INTO tablename (column_name,) VALUES (value,)

Inserting a record into contacts


INSERT INTO contacts (contactid,name,address,company,phone,url, age,height,birthday,whenentered) VALUES (1,Joe,123 Any St.,ABC, 800-555-1212,http://abc.com,30,1.9, 6/14/1972, now());

Inserting a partial record


INSERT INTO contacts (contactid,name,phone) VALUES (2,Jane,212-555-1212);

Automatic key generation

CREATE SEQUENCE contactidseq; Change the ContactID line in the CREATE TABLE to:
ContactID INT DEFAULT nextval(contactidseq) PRIMARY KEY

Or when inserting into a table


INSERT contacts (contactid,name,phone) VALUES (nextval(contactidseq),Jack, 716-555-1212);

Viewing data with SELECT

Generic Form SELECT column, FROM table, WHERE condition GROUP BY group_by_expression HAVING condition ORDER BY order_expression The most used command Probably the most complicated also If used improperly, can cause very long waits because complex combinations

A few simple SELECTs

SELECT * FROM contacts;

Display all records in the contacts table


Display only the record number and names Display only one entry for every value of URL.

SELECT contactid,name FROM contacts;

SELECT DISTINCT url FROM contacts;

Refining selections with WHERE

The WHERE subclause allows you to select records based on a condition. SELECT * FROM contacts WHERE age<10;

Display records from contacts where age<10

SELECT * FROM contacts WHERE age BETWEEN 18 AND 35;

Display records where age is 18-35

Additional selections

The LIKE condition

Allows you to look at strings that are alike

SELECT * FROM contacts WHERE name LIKE J%;

Display records where the name starts with J

SELECT * FROM contacts WHERE url NOT LIKE %.com;

Display where url does not end in .com

Removing data with DELETE

Generic Form

DELETE FROM table WHERE condition; DELETE FROM contacts WHERE age<13;

Modifying data with UPDATE

Generic Form

UPDATE table SET column=expression WHERE condition; UPDATE contacts SET company=AOL WHERE company=Time Warner;

Destroying tables with DROP

Generic Form

DROP TABLE tablename; DROP TABLE contacts;

More about SELECT

Joining together tables

SELECT name,phone,zip FROM people, phonenumbers, address WHERE people.addressid=address.addressid AND people.id=phonenumbers.id;

People
Id Name Addressid

1
2 3

Joe
Jane Chris

1
2 3

PhoneNumbers
PhoneID 1 2 3 4 5 6 Id 1 1 1 2 3 3 Phone 5532 2234 3211 3421 2341 3211 AddressID 1 2

Address
Company ABC XYZ Address 123 456 Zip 12345 14454

PDQ

789

14423

Different types of JOINs

Inner Join

Unmatched rows in either table arent printed


All records from the left side are printed All records from the right side are printed All records are printed Join records from multiple tables

Left Outer Join

Right Outer Join

Full Outer Join

Multiple Table Join

General form of SELECT/JOIN


SELECT columns, FROM left_table join_type JOIN right_table ON condition; SELECT name,phone FROM people JOIN phonenumbers ON people.id=phonenumbers.id;

Other versions
SELECT name,phone FROM people LEFT JOIN phonenumbers ON people.id=phonenumbers.id; SELECT name,phone FROM people RIGHT JOIN phonenumbers ON people.id=phonenumbers.id; SELECT name,phone FROM people FULL JOIN phonenumbers ON people.id=phonenumbers.id;

Theta style vs. ANSI

Theta Style (used in most SQL books)

SELECT name,phone,zip FROM people, phonenumbers, address WHERE people.addressid=address.addressid AND people.id=phonenumbers.id;

ANSI Style uses JOIN

SELECT name,phone,zip FROM people JOIN phonenumbers ON people.id=phonenumbers.id JOIN address ON people.addressid=address.addressid;

Other SELECT examples

SELECT * FROM contacts WHERE name is NULL; SELECT * FROM contacts WHERE zip IN (14454,12345); SELECT * FROM contacts WHERE zip NOT IN ( SELECT zip FROM address WHERE state=NY );

GROUP BY/HAVING

The GROUP BY clause allows you to group results together with aggregate functions

AVG(), COUNT(), MAX(), MIN(), SUM() COUNT DISTINCT

HAVING allows you to search the GROUP BY results

GROUP BY Examples
SELECT * FROM contacts GROUP BY company; SELECT company,count(company) FROM contacts GROUP BY company; SELECT company,count(company) FROM contacts GROUP BY company HAVING count(company) > 5;

ORDER BY

The ORDER BY clause allows you to sort the results returned by SELECT.

SELECT * FROM contacts ORDER BY company; SELECT * FROM contacts ORDER BY company, name;

Views

You can use CREATE VIEW to create a virtual table from a SELECT statement.

CREATE VIEW contactview AS (SELECT name,phone,zip FROM people,phonenumbers,address WHERE people.id=phonenumbers.id AND people.addressid=address.addressid);

You might also like