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;