Simple Query Language
Interrogation de Données
- Select
sql
SELECT * FROM users;- Column Aliases
sql
SELECT
"firstName" as first_name,
last_name
FROM
users;- Order By
sql
SELECT
"firstName" as first_name,
last_name
FROM
users
ORDER BY
first_name ASC,
last_name DESC;- Distinct
sql
SELECT
"firstName" as first_name,
DISTINCT last_name
FROM
users
ORDER BY
first_name ASC,
last_name DESC;Filtrage de Données
- Where
sql
SELECT
first_name,
"lastName"
FROM
users
WHERE
first_name = 'John' AND
"lastName" = 'Doe';- Limit / Offset
sql
SELECT
first_name,
"lastName"
FROM
users
WHERE
first_name = 'John' OR
"lastName" != 'Doe'
LIMIT 5 OFFSET 3;- In
sql
SELECT
user_id,
first_name,
"lastName"
FROM
users
WHERE
user_id IN (1, 2, 3) OR
"lastName" NOT IN ('Doe', 'Smith');- Between
sql
SELECT
user_id,
first_name,
"lastName"
FROM
users
WHERE
user_id BETWEEN 1 AND 3;- Like
sql
SELECT
user_id,
first_name,
"lastName"
FROM
users
WHERE
first_name LIKE '%oh%' AND -- John
"lastName" NOT LIKE '_o_'; -- Doe- Ilike #PSQL
sql
SELECT
user_id,
first_name,
"lastName"
FROM
users
WHERE
first_name ILIKE '%oh%' AND -- John | JOHN
"lastName" NOT ILIKE '_o_'; -- Doe | DOE- Null
sql
SELECT
user_id,
first_name,
"lastName"
FROM
users
WHERE
first_name IS NULL OR
"lastName" IS NOT NULL;Jointures
- Table Aliases
sql
SELECT
u.user_id,
first_name,
"lastName",
phone_number,
"phoneModel"
FROM
users u
INNER JOIN phones p
ON u.user_id = p.user_id;- Inner Join

sql
SELECT
user_id,
first_name,
"lastName",
phone_number,
"phoneModel"
FROM
users
INNER JOIN phones USING(user_id);- Left Join

sql
SELECT
user_id,
first_name,
"lastName",
phone_number,
"phoneModel"
FROM
users
LEFT JOIN phones USING(user_id);- Left (Outer) Join

sql
SELECT
u.user_id,
first_name,
"lastName",
phone_number,
"phoneModel"
FROM
users u
LEFT JOIN phones p
ON u.user_id = p.user_id
WHERE p.user_id IS NULL;- Right Join

sql
SELECT
user_id,
first_name,
"lastName",
phone_number,
"phoneModel"
FROM
users
RIGHT JOIN phones USING(user_id);- Right (Outer) Join

sql
SELECT
u.user_id,
first_name,
"lastName",
phone_number,
"phoneModel"
FROM
users u
RIGHT JOIN phones p
ON u.user_id = p.user_id
WHERE u.user_id IS NULL;Regroupement de Données
- Group By
sql
SELECT
user_id,
"firstName" || ' ' || last_name full_name,
COUNT(phone_number)
FROM
users
INNER JOIN phonep USING(user_id)
GROUP BY
user_id
ORDER BY
COUNT(phone_number) DESC;- Having
sql
SELECT
user_id,
"firstName" || ' ' || last_name full_name,
COUNT(phone_number)
FROM
users
INNER JOIN phones USING(user_id)
GROUP BY
user_id
HAVING
COUNT(phone_number) < 5;Modification de Données
- Insert
sql
INSERT INTO users (first_name, "lastName", random_number, birth_date)
VALUES
('Damien', 'Chazoule', 42, '1993-05-21'),
('Tim', 'Berners-Lee', 21, '1955-06-08');- Update
sql
UPDATE users
SET first_name = 'Benjamin'
WHERE user_id = 42;- Delete
sql
DELETE FROM users
WHERE user_id = 42;Gestion de Tables
- Create Table
sql
CREATE TABLE [IF NOT EXISTS] users (
user_id INT PRIMARY KEY,
email VARCHAR (128) UNIQUE NOT NULL,
first_name VARCHAR (64),
last_name VARCHAR (64),
year_old INT NOT NULL
);- Rename Table
sql
ALTER TABLE [IF EXISTS] users
RENAME TO accounts;- Drop Table
sql
DROP TABLE [IF EXISTS]
users,
phones;- Add Column
sql
ALTER TABLE users
ADD COLUMN birth_date DATE NOT NULL;- Rename Column
sql
ALTER TABLE users
RENAME COLUMN nick_name
TO user_name;- Drop Column
sql
ALTER TABLE users
DROP COLUMN birth_date;Type Composite
PSQL
- Create Type
sql
CREATE TYPE address AS (street TEXT, city TEXT, zip_code INTEGER);- Managing Table
sql
CREATE TABLE contacts (name TEXT, contact_address address);- Modifying Data
sql
INSERT INTO contacts (name, contact_address) VALUES ('John Doe', ROW('42 Place de la République', 'Le Mans', 72000));- Querying Data
sql
SELECT name, contact_address.city FROM contacts;