Reivax

SQL(3) LMD : Insert basique et Select

2 posts in this topic

Aujourd'hui nous allons apprendre à utiliser des requêtes dites LMD (langage de manipulation de donnée). Dans un premier temps nous allons ajotuer des lignes dans nos tables pour travailler dessus plus tard. Pour cela nous utiliserons des INSERT. Ensuite nous allons récupérer ces informations avec des requêtes de sélection (SELECT).

1/ INSERT basique

Dans cette partie nous allons faire des insertions de ligne dans nos deux tables clients et factures. Ces INSERT seront basiques, je vous montrerai dans un autre tutoriel d'autres façon d'écrire un insert.

Pour rappel voici le schéma de la base de donnée que nous avons créer dans le Tuto 2 jusqu'à maintenant :

DatabaseClient1.jpeg

Maintenant nous allons jouer les requêtes suivantes :

INSERT INTO `client`(`IdClient`, `Name`) VALUES (1,'SARAH CROCHE');
INSERT INTO `client`(`IdClient`, `Name`) VALUES (2,'SAM VIMAIRE');
INSERT INTO `client`(`IdClient`, `Name`) VALUES (3,'PRINCESSE MONONOKE');
INSERT INTO `client`(`IdClient`, `Name`) VALUES (4,'CAROTTE FONDEURENFERSSON');

Ces 4 lignes nous permettent d'insérer 4 nouveaux clients. Nous insérons (INSERT) dans (INTO) la table client, et dans chaque champ IdClient et Name les valeurs (VALUE) 1 et Sarah Croche etc. Vous remarquerez que cette fois ci j'ai protéger le nom des tables et objets avec un ` (alt + 7). Cette protection n'est pas obligatoire et je la met assez rarement, mais il peut arriver qu'elle soit obligatoire. En effet si j'avais créer une table client-2, la protection aurait été obligatoire à cause du tiret dans le nom de la table.

Nous allons maintenant rajouter un autre client :

INSERT INTO `client`(`Name`) VALUES ('ESME CIREDUTEMPS');

Quelle est la différence avec mes autres INSERT ?.Je n'ai pas renseigné le champ IdClient, pourtant si nous vérifions, une ligne dans la table client a été créé ! En effet rappelez vous notre requête de création de la table client, nous avions mis pour le champ IdClient comme quoi il devait être en AUTO_INCREMENT. Donc nous n'avons pas besoin de renseigner le numéro de IdClient, MySQL sait automatiquement le remplir !

Nous allons maintenant compléter la table facture avec d'autres insert :

INSERT INTO `facture`( `IdClient`, `Descr`) VALUES (5,'Facture de bottine');
INSERT INTO `facture`( `IdClient`, `Descr`) VALUES (1,'Téléphone');
INSERT INTO `facture`( `IdClient`, `Descr`) VALUES (4,'Plastron');
INSERT INTO `facture`( `IdClient`, `Descr`) VALUES (4,'Croquettes pour loup');
INSERT INTO `facture`( `IdClient`, `Descr`) VALUES (2,'Bottes usées');

Vous remarquerez que je n'ai pas renseigné ni l'idfacture (car il est en auto_increment) ni la descr2. En effet la descr2 peut être null et donc il est autorisé de ne rien mettre dans cette colonne.

 

2/Requête de sélection

Dans cette partie nous allons apprendre à sélectionner et retrouver les informations que nous avons insérer précédemment. Cette partie risque d'être assez longue et nous irons d'un cas simple à des cas de plus en plus compliqués.

A/Sélection de toutes les lignes d'une table

La requête SELECT la plus simple possible est celle ci :

SELECT * FROM `client` 

SELECT1.jpg

Cette requête permet de sélectionner (SELECT) toutes les colonnes (*) qui proviennent (FROM) de la table client.

Nous avons donc obtenu un tableau avec l'idclient et le Name de toutes les lignes de la table client :

 

Imaginons maintenant que je n'ai besoin que de la colonne Name, je peux dire dans ma requête que je ne veux que la colonne Name.

SELECT `Name` FROM `client`

SELECT2.jpg

Nous avons remplacer l'étoile par le nom du champ. Le résultat est donc le même mais sans la colonne IdClient. Il est possible d'ajouter plusieurs nom de colonne en les séparant par des virgules. Nous aurons l'occasion de voir d'autres cas plus tard.

B/Les conditions

Jusqu'ici nous avons sélectionner toutes les lignes de la table. Or la plupart des temps nous n'aurons pas besoin de toutes les lignes mais juste de quelques unes ! Pour cela nous allons utiliser les clauses WHERE à la fin de la requête pour diminuer le nombre de ligne que nous récupérons.

SELECT * FROM `client` 
WHERE name = 'SAM VIMAIRE'

SELECT3.jpg

Nous avons donc rajouté une clause WHERE à la fin de notre requête, et nous n'avons ramené qu'une seule ligne, celle où (WHERE) le nom (name) est égal à (=) SAM VIMAIRE. Nous avons donc ramené toutes les lignes correspondant à ce cas, ici nous n'avons qu'un seul Sam Vimaire.

Il existe d'autres comparateur que le égal. Par exemple nous pouvons récupérer tous les numéro de client supérieur ou égal à 3 :

SELECT * FROM `client`
WHERE idclient >= 3

SELECT5.jpg

Les autres comparateurs peuvent aussi être utilisés. Il existe d'autres opérations comme le LIKE. Le LIKE permet de retrouver des lignes à partir d'un morceau du champ. Dans l'exemple suivant nous allons chercher tous les clients commençant par S :

SELECT * FROM `client` 
WHERE name like 'S%'

SELECT4.jpg

Nous avons bien récupéré les deux noms commençant par un S. Le % sert de joker dans la chaîne de caractère ! Il est donc aussi possible de retrouver les noms contenant un S puis plus loin un M par exemple. Ainsi nous pourrions écrire '%S%M%'. Essayez pour voir ce que cela donne ! Et surtout essayer de faire d'autre cas et voir les résultats.

Il est aussi possible de faire une liste de valeur avec le mot clé IN. Par exemple dans l'exemple suivant nous allons chercher PRINCESSE MONONOKE et ESME CIREDUTEMPS dans la liste de nom.

SELECT * FROM `client` 
WHERE name IN ('ESME CIREDUTEMPS','PRINCESSE MONONOKE')

SELECT6.jpg

Le mot clé NOT va nous permettre d'inverser les sélections. Ainsi un NOT LIKE fera l'inverse d'un LIKE. Un NOT IN fera que vous allez exclure les valeurs que vous avez mentionné dans la liste. Voici quelques exemple par rapport à ce que nous avons fait précèdemment :

SELECT * FROM `client` 
WHERE name NOT IN ('ESME CIREDUTEMPS','PRINCESSE MONONOKE')

SELECT7.jpg

SELECT * FROM `client` 
WHERE name NOT LIKE 'S%'

SELECT8.jpg

 

Ce tuto est fini :). Vous avez désormais les bases pour écrire des SELECT ! Mais attention il nous reste encore à voir pas mal de choses sur les SELECT. Notamment les sous requêtes et les EXISTS (Qui sont liés au sous requête). Mais comme c'est un peu plus compliqué je pense qu'il est préférable de faire une autre partie ! De plus nous allons devoir voir aussi les jointures; c'est à dire comment relier deux tables entre elles !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now