Add second lecture SQL examples

This commit is contained in:
Tomas Krejci 2026-06-08 17:01:47 +02:00
parent 83391d472f
commit aef8bfe76e
3 changed files with 154 additions and 0 deletions

View File

@ -30,4 +30,52 @@ SELECT * FROM accounts WHERE currency NOT IN ('CZK', 'USD');
SELECT * FROM clients WHERE email IS NULL;
SELECT * FROM clients WHERE email IS NOT NULL;
SELECT * FROM clients WHERE name LIKE 'Ja%';
-- Use ILIKE for a case-insensitive pattern match.
SELECT * FROM clients WHERE name ILIKE 'JA%';
-- Sort accounts by balance in ascending or descending order.
SELECT * FROM accounts ORDER BY balance;
SELECT * FROM accounts ORDER BY balance DESC;
-- Apply secondary sorting when currency values are equal.
SELECT * FROM accounts ORDER BY currency DESC, balance ASC;
-- Limit the number of returned records.
SELECT * FROM accounts ORDER BY currency DESC, balance ASC LIMIT 5;
-- Skip records before returning the limited result set.
SELECT *
FROM accounts
ORDER BY currency DESC, balance ASC
LIMIT 5
OFFSET
2;
-- Return distinct currency values without duplicates.
SELECT DISTINCT (currency) FROM accounts;
SELECT * FROM cards;
-- Return cards with their associated clients.
SELECT * FROM cards JOIN clients ON cards.client_id = clients.id;
-- Select only the required columns from joined tables.
SELECT clients.name, cards.card_number
FROM cards
JOIN clients ON cards.client_id = clients.id;
-- Use aliases to distinguish similarly named columns.
SELECT clients.id AS client_id, cards.id AS card_id
FROM cards
JOIN clients ON cards.client_id = clients.id;
SELECT * FROM accounts JOIN cards ON accounts.id = cards.account_id;
SELECT * FROM accounts LEFT JOIN cards ON accounts.id = cards.account_id;
-- PostgreSQL console command for describing the accounts table: \d accounts

View File

@ -0,0 +1,42 @@
-- Display the name of the current database.
SELECT CURRENT_DATABASE();
-- Create tables starting with entities that do not depend on foreign keys.
CREATE TABLE enclosures (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
area INTEGER,
biome VARCHAR(20)
);
-- Delete a table.
DROP TABLE enclosures;
CREATE TABLE keepers (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR NOT NULL,
salary NUMERIC(10, 3)
);
CREATE TABLE animals (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
enclosure_id INT,
name VARCHAR NOT NULL,
is_healthy BOOLEAN DEFAULT TRUE,
adoption_date DATE,
note TEXT,
FOREIGN KEY (enclosure_id) REFERENCES enclosures (id)
);
-- Junction table for the many-to-many relationship.
CREATE TABLE animals_keepers (
animal_id INT NOT NULL,
keeper_id INT NOT NULL,
PRIMARY KEY (animal_id, keeper_id),
FOREIGN KEY (animal_id) REFERENCES animals (id),
FOREIGN KEY (keeper_id) REFERENCES keepers (id)
);
-- Change an existing table structure with ALTER TABLE.

View File

@ -0,0 +1,64 @@
-- Use INSERT to add a record.
INSERT INTO
enclosures (biome, name, area)
VALUES (
'Arktida',
'Ledové království',
2500
);
SELECT * FROM enclosures;
INSERT INTO
enclosures (name, area, biome)
VALUES (
'Savanvoá pláň',
1700,
'Savana'
),
(
'Křišťálová laguna',
900,
'Tropické vody'
),
(
'Zelený divoký les',
750,
'Mírný les'
);
-- Increase every enclosure area by 100 square meters.
UPDATE enclosures SET area = area + 100;
SELECT * FROM enclosures;
-- Increase smaller enclosure areas by 50 square meters.
UPDATE enclosures SET area = area + 50 WHERE area < 1500;
-- Update multiple columns in one statement.
UPDATE enclosures SET biome = 'Oceán', area = area + 25 WHERE id = 3;
-- Delete a selected record.
DELETE FROM enclosures WHERE id = 3;
SELECT * FROM enclosures;
INSERT INTO
animals (name, adoption_date, note)
VALUES (
'hroch',
'2026-10-25',
'hrošík Igor'
);
INSERT INTO
animals (name, adoption_date, note)
VALUES ('vlk', NOW(), 'pozor kouše');
INSERT INTO
animals (name, adoption_date, note)
VALUES ('vlk', NOW(), 'pozor kouše');
SELECT * FROM animals;