You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9.2 KiB
9.2 KiB
marp | paginate | math | theme | title |
---|---|---|---|---|
true | true | mathjax | buutti | SQL Databases |
SQL Databases
What is SQL?
- SQL, Structured Query Language is a language used to organize and manipulate data in a database
- Originally developed by IBM in the 70's
- Quickly became the most popular database language
SELECT id, email FROM users WHERE first_name = 'Teppo';
Relational Database Management Systems
- In relational databases, values are stored in tables
- Each table has rows and columns
- Data is displayed in a two-dimensional matrix
- Values in a table are related to each other
- Values can also be related to values in other tables
- A relational database management system (RDBMS) is a program that executes queries to relational databases
https://db-engines.com/en/ranking
PostgreSQL
- Free and open-source, cross-platform relational database management system
- Emphasizes extensibility and SQL compliance
- Fully ACID-compliant (atomicity, consistency, isolation and durability)
- Used in conjunction with pgAdmin
- Administration and development platform for PostgreSQL
- Cross-platform, features a web interface
- Basically a control panel application for your PostgreSQL database
PostgreSQL: Creating a Database
With pgAdmin:
- Right-click Servers > my-postgres > Databases
- Select Create > Database...
- Insert a name for the database and hit Save
With psql:
- Enter command
CREATE DATABASE <database-name>;
PostgreSQL: Querying
With pgAdmin:
- Right-click sqlpractice > Query tool...
- Insert a query into the Query Editor and hit Execute (F5)
With psql:
- List all available databases with
\l
- Connect to the created database with
\c <database-name>
- List all tables in the database with
\dt
- Type a query and press enter
- Here's an example query
Editing Data with pgAdmin
- Individual values in the table can be directly modified by double clicking the value and then editing the value in the visual user interface
- Save the changes by pressing the Save Data Changes button
Exercise 1: Preparing the database
Using either PgAdmin or PSQL,
- Create a new database called
sqlpractice
- Insert the provided example query to the new database
- Verify that the query has created new tables to your database
Basic SQL queries
SELECT
INSERT
DELETE
UPDATE
CREATE
&DROP
Querying data with SELECT
- Syntax:
SELECT column1, column2, column3 FROM table_name;
- Examples:
SELECT full_name, email FROM users; SELECT full_name AS name, email FROM users; SELECT * FROM users;
Filtering data with WHERE
- Syntax:
SELECT column1, column2 FROM table_name WHERE condition;
- Text is captured in single quotes.
LIKE
condition uses the%
sign as a wildcard.IS
andIS NOT
are also valid operators.
- Example:
SELECT full_name FROM users WHERE full_name = 'Teppo Testaaja'; SELECT * FROM books WHERE name LIKE '%rr%'; SELECT * FROM books WHERE author IS NOT null;
Ordering data with ORDER BY
- Syntax:
SELECT column1 FROM table_name ORDER BY column1 ASC;
- Examples:
SELECT full_name FROM users ORDER BY full_name ASC; SELECT full_name FROM users ORDER BY full_name DESC;
Combining data with JOIN
- Also known as
INNER JOIN
- Corresponds to intersection from set theory
JOIN examples
SELECT
users.id, users.full_name, borrows.id,
borrows.user_id, borrows.due_date, borrows.returned_at
FROM users
JOIN borrows ON
users.id = borrows.user_id;
SELECT
U.full_name AS name,
B.due_date AS due_date,
B.returned_at AS returned_at
FROM users AS U
JOIN borrows AS B ON
U.id = B.user_id;
Combining with LEFT JOIN
- Also known as
LEFT OUTER JOIN
- Example:
SELECT U.full_name AS name, B.due_date AS due_date, B.returned_at AS returned_at FROM users AS U LEFT JOIN borrows AS B ON U.id = B.user_id;
Exercise 2: Querying the library
Using SQL queries, get
- all columns of
borrows
that are borrowed before2020-10-27
- all columns of
borrows
that are returned - columns
user.full_name
andborrows.borrowed_at
of the user with anid
of 1 - columns
book.name
,book.release_year
andlanguage.name
of all books that are released after 1960
Inserting data with INSERT
- Syntax
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
- Example
INSERT INTO users (full_name, email, created_at) VALUES ('Pekka Poistuja', 'pekka.poistuja@buutti.com', NOW());
- Since id is not provided, it will be automatically generated.
Updating data with UPDATE
- Syntax
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
- Notice: if a condition is not provided, all rows will be updated!
- If updating only one row, it is usually best to use
id
.
- If updating only one row, it is usually best to use
- Example
UPDATE users SET email = 'taija.testaaja@gmail.com' WHERE id = 2;
Removing data with REMOVE
- Syntax
DELETE FROM table_name WHERE condition;
- Again, if the condition is not provided,
DELETE
affects all rows - Before deleting, it is a good practice to execute an equivalent
SELECT
query to make sure that only the proper rows will be affected. - Example:
SELECT * FROM users WHERE id = 5; DELETE FROM users WHERE id = 5;
Exercise 3: Editing data
- Postpone the due date of the borrow with an
id
of1
by two days in theborrows
table - Add a couple of new books to the
books
table - Delete one of the borrows.
Initializing data with CREATE TABLE
- Before data can be manipulated, a database and its tables need to be initialized.
- Syntax
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... );
- Example:
CREATE TABLE "users" ( "id" SERIAL PRIMARY KEY, "full_name" varchar NOT NULL, "email" varchar UNIQUE NOT NULL, "created_at" timestamp NOT NULL );
Removing data with DROP
- In order to remove tables or databases, we use a
DROP
statementDROP TABLE table_name; DROP DATABASE database_name;
- These statements do not ask for confirmation and there is no undo feature. Take care when using a drop statement.
- I'm legally obliged to include this XKCD comic here.
NoSQL
- In addition to SQL databases, there's NoSQL
- There are many differing definitions, but...
- most agree that NoSQL databases store data in a format other than tables
- They can still store relational data - just differently
- Four different database types:
- Document databases
- Key-value databases
- Wide-column stores
- Graph databases
- Example database engines include MongoDB, Redis and Cassandra
- For more info, see MongoDB: What is NoSQL?
Object-Relational Mappers
- Object-Relational Mappers, or ORMs allow the developer to write code instead of SQL to perform CRUD operations on their database
- An abstraction layer between code and database
- Can make database logic easier to read and write
- Prevents SQL injection by sanitizing input (see the comic before...)
- ...but sometimes you'd rather just write the SQL queries themselves
- Some popular ORMs:
- Hibernate (Java)
- EFCore (.NET)
- Sequelize (Node.js)
- TypeORM (TypeScript)