Download as pdf or txt
Download as pdf or txt
You are on page 1of 37

Database / SQL Basics

Using SQLite
This Talk

Isn't This Talk

Databases as a topic...
user activity
id id
first_name name
last_name work_log description
id
date
user_id
activity_id
summary

Relational Model
Free!
Insert Installation
Instructions Here

You'll figure it out...


$ sqlite test.db

SQLite version 3.7.8


2011-09-19 14:49:19
Enter ".help" for
instructions
Enter SQL statements
terminated with a ";"
sqlite>

Starting & DB Creation


sqlite> .help

.commands
Individual Piece
of Data

C
Description
R O W S of the Entity
L
S

Columns & Rows


TEMPORAL
20110912
STRINGS 20110912T193500
Woody 193501
Lorem ipsum
dolor sit amet NUMERIC
0012455322 -1
3.14
62517851473784112

Data Types
sqlite> CREATE TABLE user (
...> id INTEGER,
...> first_name VARCHAR(20),
...> last_name VARCHAR(20)
...> );

CREATE TABLE
sqlite> .tables
activity user

.tables
sqlite> .schema user
CREATE TABLE user (
id INTEGER,
first_name VARCHAR(20),
last_name VARCHAR(20)
);

sqlite> .schema use%


CREATE TABLE user (...

.schema
sqlite> DROP TABLE user;
sqlite> .tables
activity

DROP TABLE
CREATE TABLE user (
id INTEGER NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL
);

NOT NULL
CREATE TABLE user (
id INTEGER AUTOINCREMENT NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL
);

AUTO INCREMENT
CREATE TABLE activity (
id INTEGER AUTOINCREMENT NOT NULL,
name VARCHAR(20) UNIQUE NOT NULL,
description TEXT NOT NULL
);

UNIQUE
CREATE TABLE user (
id INTEGER PRIMARY KEY
AUTOINCREMENT,
name VARCHAR(20) UNIQUE NOT NULL,
description TEXT NOT NULL
);

PRIMARY KEY
user activity
id id
first_name name
last_name work_log description
id
date
Foreign Key user_id
activity_id Foreign Key

summary

Foreign Keys
CREATE TABLE work_log (
id INTEGER PRIMARY KEY
AUTOINCREMENT,
date DATETIME NOT NULL,
user_id INTEGER REFERENCES
user(id),
activity_id INTEGER REFERENCES
activity(id),
summary TEXT NOT NULL
);

Foreign Keys
INSERT INTO user
(first_name, last_name)
VALUES ( "Brandon", "Woods" );

INSERT INTO user


VALUES (null, "Bruce", "Gray");

INSERT
.header(s) ON|OFF
Turn display of headers on or off

.mode MODE ?TABLE?


Set output mode where MODE is one of:
csv - Comma-separated values
column - Left-aligned columns. (See
.width)
html - HTML <table> code
insert - SQL insert statements for TABLE
line - One value per line
list - Values delimited by
.separator string
tabs - Tab-separated values
tcl - TCL list elements
Qurey Output
sqlite> SELECT * FROM user;

id first_name last_name
---------- ---------- ----------
1 Brandon Woods
2 Bruce Gray
3 Jason Noble
4 Stephen Cristol

SELECT
sqlite> SELECT first_name, last_name
FROM user;

first_name last_name
---------- ----------
Brandon Woods
Bruce Gray
Jason Noble
Stephen Cristol

SELECT
sqlite> SELECT first_name AS "First
Name", last_name AS "Last Name" FROM
user;

First Name Last Name


---------- ----------
Brandon Woods

SELECT
sqlite> SELECT COUNT(id) FROM user;

COUNT(id)
----------
4

SELECT
SELECT * FROM user ORDER BY
last_name;

id first_name last_name
---------- ---------- ----------
4 Stephen Cristol
2 Bruce Gray
3 Jason Noble
5 John Smith
6 Jane Smith
1 Brandon Woods
ORDER
SELECT COUNT(last_name), last_name
FROM user GROUP BY last_name;

COUNT(last_name) last_name
---------------- ----------
1 Cristol
1 Gray
1 Noble
2 Smith
1 Woods

GROUP BY
SELECT * FROM user WHERE id=1;

id first_name last_name
---------- ---------- ----------
1 Brandon Woods

WHERE
SELECT * FROM user WHERE
first_name="Brandon"
OR
last_name="Grey";

id first_name last_name
---------- ---------- ----------
1 Brandon Woods
2 Bruce Gray

WHERE
SELECT * FROM user
WHERE first_name LIKE "B%";

id first_name last_name
---------- ---------- ----------
1 Brandon Woods
2 Bruce Gray

WHERE
user activity
id id
first_name name
last_name work_log description
id
date
user_id
activity_id
summary

Related Data
SELECT a.date AS Date ,
b.first_name AS Name,
a.summary AS Summary
FROM work_log AS a
JOIN user AS b
ON a.user_id=b.id

Date Name Summary


---------- ------------- ---------------------
2011-11-06 Brandon Gave a talk on SQL.

JOIN
SELECT a.date AS Date ,
b.first_name || ' ' || b.last_name AS Name,
c.name AS Activity,
a.summary AS Summary
FROM work_log AS a
JOIN user AS b
ON a.user_id=b.id
JOIN activity AS c
ON a.activity_id=c.id;

Date Name Activity Summary


---------- ------------- -------- ---------------------
2011-11-06 Brandon Wood Preso Gave a talk on SQL.

JOIN
UPDATE user SET last_name="Wood"
WHERE id="1";

SELECT * FROM use WHERE id=1;

id first_name last_name
---------- ---------- ----------
1 Brandon Wood

UPDATE
DELETE FROM user WHERE
last_name="Smith";

SELECT * FROM user;

id first_name last_name
---------- ---------- ----------
1 Brandon Wood
2 Bruce Gray
3 Jason Noble
4 Stephen Cristol
DELETE
CREATE INDEX idx_user_id
ON user (id);

CREATE INDEX idx_user_flname


ON user (first_name, last_name);

.indices
One could go on for HOURS about SQL.
Thank you for your time.
- Woody@2143.net
2011-11-03

Oops!

You might also like