#import "@local/template:1.0.0": *
#import "@local/callout:1.0.0": *
#show: doc.with(
authors: (
(name: "William Hergès", affiliation: "Sorbonne Université", email: "william@herges.fr"),
),
page_title: "SQL base",
)
= Création d'une table
On utilise H2 comme DB.
```sql
CREATE TABLE
(
[NOT NULL] [DEFAULT ],
[NOT NULL] [DEFAULT ],
[NOT NULL] [DEFAULT ],
...
[NOT NULL] [DEFAULT ],
,
,
)
```
== Types
=== Alphanumériques
Alphanumériques~:
- `char(n)`, `character(n)`
- `varchar(n)`, `varying(n)`
$n$ vaut $1$ par défaut, peut aller de $1$ à $1048576$.
`char(n)` est une allocation statique -> tous les mots feront toujours $n$.
`varchar(n)` est une allocation dynamique -> les mots font au maximum $n$.
=== Numériques
Numériques~:
- `smallint`, `int` (ou `integer`), `bigint`
- `numeric(t,d)` ou `decimal(t,d)`
- `real`, `double precision`
`numeric(t,d)` ou `decimal(t,d)` représentent les nombres à virgule.
- `t` est le nombre total de chiffres (on ne compte pas le signe)
- `d` est le nombre de chiffres après la virgule (partie décimale)
`real`, `double precision` représentent les floatants.
=== Temps
`date` est la date calendaire (jour, mois, année).
`time` est le temps d'un jour (heure, minutes, secondes), peut contenir un fuseau horaire.
`timestamp` est la combinaison de `date` et de `time`.
=== Domaine
Définition d'un nouveau type à partir d'un type de base.
Associe éventuellement une contraine devant être évaluée à vrai ou inconnu pour être vérifiée.
```sql
CREATE DOMAIN AS [];
```
Par exemple,
```sql
CREATE DOMAIN fin_semaine as TEXT CHECK (VALUE in ('sam', 'dim'));
CREATE DOMAIN sal_min as NUMERIC(7,2) CHECK (VALUE >= 10000);
```
== Contrainte
Est une condition devant être vérifiée par toutes les données.
Cela permet d'avoir une cohérence et de garder cette cohérence avec une mise à jour.
=== Type
Peut toucher rôle des clés~:
- identification des $n$-uplets
- chaque table possède au moins une clé (la primaire)
- vérification efficace avec des index
Peut toucher les données basiques~:
- _voir diapo_
=== Contraintes de clés
Clé candidate sont les attributs dont les valeurs sont distinctes pour tous les $n$-uplets.
Clé primaire est une clé candidate dont chacun des attributs est renseigné.
```sql
PRIMARY KEY()
```
Clé étrange est un attribut dans les valeurs proviennent d'une clé candidate ou d'une clé primaire définie autre part.
(Peut être la même table.)
```sql
FOREIGN KEY REFERENCES
```
Comme on n'a pas indique d'attributs, cela signifie que l'on réfère à la clé primaire.
=== Contraintes sur les données
_Voir le diapo_
=== CHECK et ASSERTION
_Voir le diapo_
== Modifier une table
=== Suppression
Pour supprimer une table~:
```sql
DROP TABLE [IF EXISTS];
```
Si il existe des contraintes portant sur cette table, on peut les supprimer durant la suppression~:
```sql
DROP TABLE IF EXISTS CASCADE;
```
=== Modification d'un champ
= Requêtes SQL simples
SQL provient de la fusion entre l'algèbre relationnelle et des tuples.
```sql
SELECT
FROM