Structured Query Language
It is NOT a programming language, but a database query language.
Both are widely accepted:
- Sequel
- MySQL
- Ms SQL Server
- Ess-Cue-Ell
- Oracle
- PostgreSQL
Even though there is a standard for SQL: ANSI SQL
ANSI/ISO/IEC 9075:2003 "Database Language SQL"
each database engine implements its own dialect of SQL
·-----------· ·-------------· ·--------· ·-----------· | TRAININGS |---<| ENROLLMENTS |>---| PEOPLE |>---| COMPANIES | ·-----------· ·-------------· ·--------· ·-----------·
select * from People;| Id | FirstName | LastName | IDNumber | CompanyId | |
|---|---|---|---|---|---|
| 1 | Iván | Osuna Ayuste | 23000 | ivan.osuna.ayuste@gmail.com | |
| 2 | Mario | Novi Rod | 296666 | novirod@gmail.com | 7 |
| 3 | Juan | Garcia Garcia | 2346800 | Juan.Garcia@gmail.com | |
| 4 | Mateusz Aleksander | Duda | 3694485 | mateusz.aleksander@gmail.com | 2 |
| 5 | Michael | Wilson | 7777777 | mcantos@gmail.com | 1 |
| 6 | Marta | Pérez Arribas | 5844692 | marta.perez.arribas@gmail.com | |
| 7 | Vicenç | Côdina Soler | 30000 | vcs@gmail.com | 3 |
| 8 | Pedro | Oviedo Miedo | 665444 | Oviedo.Miedo@pepe.es | 1 |
| 9 | John | Spearman | 77771177 | mcantos@gmail.com | 1 |
| 10 | Marcelo | Buonera | 2300120 | primeragl@gmail.com | 5 |
| 11 | Mateo | Libra | 71620135 | bikes@gmail.com | 2 |
select * from Enrollments;| TrainingId | PersonId | Date | Passed |
|---|---|---|---|
| 1 | 1 | 2021-11-21 | 1 |
| 1 | 3 | 2022-12-30 | 1 |
| 1 | 4 | 2022-04-20 | 1 |
| 1 | 5 | 2021-10-23 | 1 |
| 1 | 6 | 2021-12-05 | 0 |
| 1 | 7 | 2022-04-23 | 1 |
| 1 | 11 | 2022-04-05 | 0 |
| 2 | 2 | 2021-10-30 | 1 |
| 4 | 4 | 2022-04-24 | 0 |
| 8 | 1 | 2021-12-31 | 1 |
| 10 | 2 | 2021-11-12 | 1 |
| 11 | 11 | 2021-05-12 | 1 |
select * from Trainings;| Id | Name | Hours | Price |
|---|---|---|---|
| 1 | SQL Introduction | 20 | 1000.05 |
| 2 | Programming webapps | 17 | 800.05 |
| 3 | Python for dummies | 60 | 1353.5 |
| 4 | Advanced Python | 50 | 8500.99 |
| 5 | Advanced SQL | 20 | 1000.05 |
| 6 | Oracle SQL | 50 | 995 |
| 7 | PHP for dummies | 35 | 2000.05 |
| 8 | MS Access | 20 | 500 |
| 9 | Cobol | 80 | 1000.05 |
| 10 | SQL for data analytics | 20 | 1000.05 |
| 11 | MS Excel | 30 | 3000 |
select * from Companies;| Id | Name | VATNumber |
|---|---|---|
| 1 | Womanpower | A12345678 |
| 2 | Flower Power | B765098777 |
| 3 | IBN | Y8968960 |
| 4 | MatSoft | A69435871 |
| 5 | Oracol | A12345678 |
| 6 | Kyndryl | A6532653 |
| 7 | Solero | B89101112 |
Database creation script
CREATE TABLE Trainings (
Id SMALLINT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Hours SMALLINT NOT NULL,
Price DOUBLE (6,2) NOT NULL
) ENGINE INNODB;
CREATE TABLE Companies (
Id SMALLINT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
VATNumber CHAR(10) NOT NULL
) ENGINE INNODB;
CREATE TABLE People (
Id INT NOT NULL PRIMARY KEY,
FirstName VARCHAR(100) NOT NULL,
LastName VARCHAR(100) NOT NULL,
IDNumber INT NOT NULL UNIQUE,
Email VARCHAR(100),
CompanyId SMALLINT,
FOREIGN KEY (CompanyId) REFERENCES Companies(Id)
) ENGINE INNODB;
CREATE TABLE Enrollments (
TrainingId SMALLINT NOT NULL,
PersonId INT NOT NULL,
Date DATE NOT NULL,
Passed BOOLEAN,
PRIMARY KEY (TrainingId, PersonId),
FOREIGN KEY (TrainingId) REFERENCES Trainings(Id),
FOREIGN KEY (PersonId) REFERENCES People(Id)
) ENGINE INNODB;
CREATE INDEX IDX_Names ON People(FirstName);Database population script
INSERT INTO Trainings (Id,Name,Hours,Price)
VALUES ( 1, 'SQL Introduction', 20, '1000.05');
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 2, 'Programming webapps', 17, 800.05);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 3, 'Python for dummies', 60, 1353.50);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 4, 'Advanced Python', 50, 8500.99);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 5, 'Advanced SQL', 20, 1000.05);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 6, 'Oracle SQL', 50, 995);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 7, 'PHP for dummies', 35, 2000.05);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 8 , 'MS Access' , 20 , 500.00 );
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 9, 'Cobol', 80, 1000.05);
INSERT INTO Trainings (Id, Name,Hours, Price)
VALUES ( 10, 'SQL for data analytics', 20, 1000.05);
INSERT INTO Trainings (Id,Name,Hours, Price)
VALUES ( 11, 'MS Excel', 30, 3000.00);
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 1, 'Womanpower', 'A12345678');
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 2, 'Flower Power', 'B765098777');
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 3, 'IBN', 'Y8968960');
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 4, 'MatSoft', 'A69435871');
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 5, 'Oracol', 'A12345678');
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 6, 'Kyndryl', 'A6532653');
INSERT INTO Companies (Id,Name, VATNumber)
VALUES ( 7, 'Solero', 'B89101112');
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 1, 'Iván', 'Osuna Ayuste', 23000, 'ivan.osuna.ayuste@gmail.com', NULL );
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 2, 'Mario', 'Novi Rod', 00296666, 'novirod@gmail.com', 7);
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email)
VALUES ( 3, 'Juan', 'Garcia Garcia', 2346800, 'Juan.Garcia@gmail.com');
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 4, 'Mateusz Aleksander', 'Duda', 3694485, 'mateusz.aleksander@gmail.com', 2);
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 5, 'Michael', 'Wilson', 7777777, 'mcantos@gmail.com', 1);
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 6, 'Marta', 'Pérez Arribas', 05844692, 'marta.perez.arribas@gmail.com', NULL);
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 7, 'Vicenç', 'Côdina Soler', 30000, 'vcs@gmail.com', 3);
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 8 , 'Pedro' , 'Oviedo Miedo' , 665444, 'Oviedo.Miedo@pepe.es' , 1 );
INSERT INTO People (Id, FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 9, 'John', 'Spearman', 77771177, 'mcantos@gmail.com', 1);
INSERT INTO People (Id, FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 10, 'Marcelo', 'Buonera', 2300120, 'primeragl@gmail.com', 5);
INSERT INTO People (Id,FirstName, LastName, IDNumber, Email, CompanyId)
VALUES ( 11, 'Mateo', 'Libra', 71620135, 'bikes@gmail.com', 2);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 1, '2021-11-21', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (2, 2, '2021-10-30', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 3, '2022-12-30', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 4, '2022-04-20', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (4, 4, '2022-04-24', 0);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 5, '2021-10-23', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 6, '2021-12-05', 0);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 7, '2022-04-23', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (8 , 1 , '2021-12-31' , 1 );
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (10, 2, '2021-11-12', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (11, 11, '2021-05-12', 1);
INSERT INTO Enrollments (TrainingId, PersonId, Date, Passed)
VALUES (1, 11, '2022-04-05', 0);