Maison  >  Article  >  base de données  >  Un merveilleux résumé des méthodes de requête SQL

Un merveilleux résumé des méthodes de requête SQL

巴扎黑
巴扎黑original
2017-05-21 18:39:161272parcourir

Une simple requête Transact-SQL comprend uniquement une liste de sélection, une clause FROM et une clause WHERE. Ils décrivent respectivement les colonnes interrogées, les tables ou vues interrogées et les conditions de recherche

1. Requête simple

Une simple requête Transact-SQL ne comprend qu'une liste de sélection, FROM clause et clause WHERE. Ils décrivent respectivement la colonne interrogée, la table ou la vue interrogée et les conditions de recherche.
Par exemple, l'instruction suivante interroge le champ pseudo et le champ e-mail nommés « Zhang San » dans la table testtable.


SELECT pseudo, email
FROM testtable
WHERE name='Zhang San'

(1) Sélectionnez la liste

La liste de sélection (select_list) indique la colonne interrogée, qui peut être un ensemble de listes de noms de colonnes, d'astérisques, d'expressions, de variables (y compris des variables locales et des variables globales), etc.

1. Sélectionnez toutes les colonnes

Par exemple, l'instruction suivante affiche les données de toutes les colonnes de la table testtable :


SELECT *
FROM testtable


2. Sélectionnez certaines colonnes et spécifiez leur ordre d'affichage

L'ordre des données dans l'ensemble de résultats de la requête est le même que l'ordre des noms de colonnes spécifiés dans la liste de sélection .
Par exemple :


SELECT pseudo,email
FROM testtable


3. Changez le titre de la colonne

Dans la liste de sélection, vous pouvez re-Spécifier les en-têtes de colonnes. Le format de définition est :
Titre de la colonne = nom de la colonne
Nom de la colonne Titre de la colonne
Si le titre de la colonne spécifié n'est pas un format d'identifiant standard, des délimiteurs de guillemets doivent être utilisés. Par exemple, l'instruction suivante utilise le chinois. caractères pour afficher les colonnes Titre :


SELECT pseudo=surnom, email=email
FROM testtable


4. Supprimer les lignes en double

Utiliser TOUTES dans l'instruction SELECT Ou utilisez l'option DISTINCT pour afficher toutes les lignes du tableau qui répondent aux critères ou supprimer les lignes de données en double. La valeur par défaut est ALL. Lors de l'utilisation de l'option DISTINCT, une seule ligne est conservée dans le jeu de résultats renvoyé par SELECT pour toutes les lignes de données en double.

5. Limiter le nombre de lignes renvoyées

Utilisez l'option TOP n [PERCENT] pour limiter le nombre de lignes de données renvoyées TOP n signifie que n lignes sont renvoyées, et lorsque TOP n PERCENT. , n signifie Pourcentage, spécifie à quel pourcentage du nombre total de lignes le nombre de lignes renvoyées est égal.
Par exemple :


SELECT TOP 2 *
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable


( deux )Clause FROM

La clause FROM spécifie la requête de l'instruction SELECT et les tables ou vues liées à la requête. Jusqu'à 256 tables ou vues peuvent être spécifiées dans la clause FROM, séparées par des virgules.
Lorsque la clause FROM spécifie plusieurs tables ou vues en même temps, s'il y a des colonnes portant le même nom dans la liste de sélection, les noms d'objet doivent être utilisés pour limiter les tables ou vues auxquelles appartiennent ces colonnes. Par exemple, la colonne cityid existe dans les tables usertable et citytable. Lors de l'interrogation du cityid dans les deux tables, le format d'instruction suivant doit être utilisé pour qualifier :


SELECT username,citytable.cityid
FROM usertable, citytable
 WHERE usertable.cityid=citytable.cityid


 Les deux formats suivants peuvent être utilisés pour spécifier un alias pour une table ou une vue dans la clause FROM :
Nom de la table comme alias
 Nom de la table Alias ​​​​
(2) Clause FROM

La clause FROM spécifie la requête de l'instruction SELECT et les tables ou vues liées à la requête. Jusqu'à 256 tables ou vues peuvent être spécifiées dans la clause FROM, séparées par des virgules.
Lorsque la clause FROM spécifie plusieurs tables ou vues en même temps, s'il y a des colonnes portant le même nom dans la liste de sélection, les noms d'objet doivent être utilisés pour limiter les tables ou vues auxquelles appartiennent ces colonnes. Par exemple, si la colonne cityid existe à la fois dans les tables usertable et citytable, le format d'instruction suivant doit être utilisé lors de l'interrogation du cityid dans les deux tables :

SELECT username,citytable.cityid
FROM usertable, citytable
WHERE usertable.cityid=citytable.cityid

Les deux formats suivants peuvent être utilisés pour spécifier des alias pour les tables ou les vues dans la clause FROM :
Nom de la table comme alias
Alias ​​du nom de la table
Par exemple, ci-dessus L'instruction peut être exprimée dans le format d'alias du tableau comme suit :

SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid= b.cityid

SELECT peut non seulement récupérer des données d'une table ou d'une vue, il peut également interroger les données de l'ensemble de résultats renvoyés par d'autres instructions de requête.

Par exemple :

SELECT a.au_fname+a.au_lname
FROM auteurs a,titleauthor ta
(SELECT title_id,title
FROM titres
WHERE ytd_sales> ; 10000
 ) AS t
 WHERE a.au_id=ta.au_id
 AND ta.title_id=t.title_id

 Dans cet exemple, l'ensemble de résultats renvoyé par SELECT reçoit un alias t, puis récupérez les données.

(3) Utilisez la clause WHERE pour définir les conditions de requête

La clause WHERE définit les conditions de requête et filtre les lignes de données inutiles. Par exemple, l'instruction suivante interroge les données dont l'âge est supérieur à 20 :

SELECT *
FROM usertable
WHERE age>20

La clause WHERE peut inclure différents opérateurs conditionnels :
Opérateurs de comparaison (comparaison de tailles) : >, >=, =, <, <=, <>, !>, !<
Opérateur de plage (si la valeur de l'expression est dans la plage spécifiée) : ENTRE…ET…
PAS ENTRE…ET…
Opérateur de liste (détermine si l'expression est un élément spécifié dans la liste) : IN ( élément 1, élément 2...)
NOT IN (élément 1, élément 2...)
Matcher de modèle (pour déterminer si la valeur correspond au format de caractère générique spécifié) : LIKE, NOT LIKE
Opérateur de jugement de valeur NULL (pour déterminer si une expression est vide) : IS NULL, NOT IS NULL
Opérateurs logiques (utilisés pour la connexion logique de plusieurs conditions) : NOT, AND, OR

1. Opérateur de plage exemple : age ENTRE 10 ET 30 équivaut à age>=10 AND age<=30
2. Exemple d'opérateur de liste : country IN ("Allemagne", "Chine")
3. Opérateur de correspondance de modèles Exemple : Souvent utilisé pour la recherche floue, il détermine si la valeur de la colonne correspond au format de chaîne spécifié. Peut être utilisé pour les requêtes de type char, varchar, text, ntext, datetime et smalldatetime.
Les caractères génériques suivants peuvent être utilisés :
Signe de pourcentage % : peut correspondre à des caractères de n'importe quel type et longueur. S'il s'agit de chinois, veuillez utiliser deux signes de pourcentage, à savoir %%.
Underscore_ : correspond à un seul caractère arbitraire, qui est souvent utilisé pour limiter la longueur des caractères des expressions.
Crochets [] : Spécifiez un caractère, une chaîne ou une plage, exigeant que l'objet correspondant soit l'un d'entre eux. [^] : sa valeur est la même que celle de [], mais elle nécessite que l'objet correspondant soit un caractère autre que le caractère spécifié.
Par exemple :
Si la limite se termine par Publishing, utilisez LIKE '%Publishing'
Si la limite commence par A : LIKE '[A]%'
Si la limite ne commence pas par A : LIKE '[^A]% '
4. Exemple de symbole de jugement de valeur NULL OÙ l'âge EST NULL

5. Opérateurs logiques : la priorité est NOT, AND, OR

(4) Tri des résultats de la requête

Utilisez la clause ORDER BY pour trier les résultats renvoyés par la requête sur une ou plusieurs colonnes. Le format de syntaxe de la clause ORDER BY est :
ORDER BY {column_name [ASC|DESC]} [,...n]
Où ASC représente l'ordre croissant, qui est la valeur par défaut, et DESC représente l'ordre décroissant. . ORDER BY ne peut pas trier par types de données ntext, texte et image
.
Par exemple :

SELECT *
FROM usertable
ORDER BY age desc, userid ASC

De plus, vous pouvez trier en fonction des expressions.

2. Requête d'union

L'opérateur UNION peut combiner les ensembles de résultats de requête de deux ou plusieurs instructions SELECT en un seul ensemble de résultats pour l'affichage, c'est-à-dire effectuer une union Requête. Le format de syntaxe de UNION est :

select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]

Où selectstatement est l'instruction de requête SELECT à être combiné.

L'option ALL signifie fusionner toutes les lignes dans l'ensemble de résultats. Lorsque cet élément n'est pas spécifié, une seule ligne de lignes en double sera conservée dans le jeu de résultats de requête combiné.

Lors de l'exécution d'une requête conjointe, le titre de la colonne du résultat de la requête est le titre de la colonne de la première instruction de requête. Par conséquent, les en-têtes de colonnes doivent être définis dans la première instruction de requête. Lors du tri des résultats d'une requête conjointe, le nom de la colonne, le titre de la colonne ou le numéro de la colonne dans la première instruction de requête doivent également être utilisés.
Lorsque vous utilisez l'opérateur UNION, vous devez vous assurer qu'il y a le même nombre d'expressions dans la liste de sélection de chaque instruction de requête union, et que chaque expression de sélection de requête doit avoir le même type de données, ou elles peuvent être automatiquement converties en le même type de données. Lors de la conversion automatique, pour les types numériques, le système convertit les types de données de faible précision en types de données de haute précision.

Dans une instruction UNION qui inclut plusieurs requêtes, l'ordre d'exécution est de gauche à droite. Utilisez des parenthèses pour modifier cet ordre d'exécution. Par exemple :

Requête 1 UNION (Requête 2 UNION Requête 3)

3. Requête de connexion

Plusieurs requêtes de table peuvent être implémentées via des opérateurs de connexion . Les connexions sont la principale caractéristique du modèle de base de données relationnelle et un signe qui le distingue des autres types de systèmes de gestion de bases de données.

Dans un système de gestion de base de données relationnelle, la relation entre chaque donnée n'a pas besoin d'être déterminée lors de la création de la table. Toutes les informations d'une entité sont souvent stockées dans une seule table. Lors de la récupération des données, les informations sur les différentes entités stockées dans plusieurs tables sont interrogées via des opérations de jointure. Les opérations de jointure offrent aux utilisateurs une grande flexibilité et ils peuvent ajouter de nouveaux types de données à tout moment. Créez de nouvelles tables pour différentes entités, puis interrogez-les via des jointures.
La connexion peut être établie dans la clause FROM ou la clause WHERE de l'instruction SELECT. Indiquer de manière plausible la connexion dans la clause FROM permet de distinguer l'opération de connexion des conditions de recherche dans la clause WHERE. Par conséquent, cette méthode est recommandée dans Transact-SQL.
Le format de syntaxe de jointure de la clause FROM défini par la norme SQL-92 est :

FROM join_table join_type join_table
[ON (join_condition)]

Où join_table indique le nom de la table participant à l'opération de connexion. La connexion peut opérer sur la même table ou sur plusieurs tables. La connexion sur la même table est également appelée auto-jointure.

join_type indique le type de connexion, qui peut être divisé en trois types : jointure interne, jointure externe et jointure croisée. Inner JOIN utilise des opérateurs de comparaison pour comparer certaines colonnes de données entre les tables et répertorie les lignes de données de ces tables qui correspondent aux conditions de jointure. Selon les différentes méthodes de comparaison utilisées, les jointures internes sont divisées en trois types : les jointures égales, les jointures naturelles et les jointures inégales. Il existe trois types de jointures externes : la jointure externe gauche (LEFT OUTER JOIN ou LEFT JOIN), la jointure externe droite (RIGHT OUTER JOIN ou RIGHT JOIN) et la jointure externe complète (FULL OUTER JOIN ou FULL JOIN). À la différence des jointures internes, les jointures externes répertorient non seulement les lignes qui correspondent aux conditions de jointure, mais répertorient également la table de gauche (lors de l'utilisation d'une jointure externe gauche), la table de droite (lors de l'utilisation d'une jointure externe droite) ou les deux tables (lors de l'utilisation d'une jointure externe gauche). en utilisant une jointure externe complète) qui correspondent aux critères de recherche.
La jointure croisée (CROSS JOIN) n'a pas de clause WHERE. Elle renvoie le produit cartésien de toutes les lignes de données de la table connectée. Le nombre de lignes de données dans l'ensemble de résultats est égal au nombre de lignes de données dans la première. table qui remplit les conditions de requête multiplié par Le nombre de lignes de données dans la deuxième table qui répondent aux conditions de requête.
La clause ON (join_condition) dans l'opération de jointure indique la condition de jointure, qui se compose de colonnes dans la table jointe, d'opérateurs de comparaison, d'opérateurs logiques, etc.
Quel que soit le type de connexion, les colonnes de type de données texte, ntext et image ne peuvent pas être directement connectées, mais ces trois colonnes peuvent être connectées indirectement. Par exemple :

SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

 (1) Jointure interne
 L'opération de requête de jointure interne répertorie les lignes de données qui correspondent à la condition de jointure. Elle utilise des opérateurs de comparaison pour comparer les valeurs des colonnes jointes. Il existe trois types de jointures internes :
1. Jointure équivalente : utilisez l'opérateur de signe égal (=) dans la condition de jointure pour comparer les valeurs des colonnes jointes. Les résultats de la requête répertorient toutes les colonnes de la table jointe. , y compris les colonnes en double.
 2. Connexion inégale : utilisez d'autres opérateurs de comparaison à l'exception de l'opérateur égal dans la condition de connexion pour comparer les valeurs des colonnes connectées. Ces opérateurs incluent >, >=, <=, <, !>, !< et <>.
 3. Jointure naturelle : utilisez l'opérateur égal (=) dans la condition de jointure pour comparer les valeurs des colonnes jointes, mais il utilise une liste de sélection pour indiquer les colonnes incluses dans l'ensemble de résultats de la requête et supprimer les doublons. colonnes dans la table de jointure.
Exemple, ce qui suit utilise une équijointure pour lister les auteurs et éditeurs situés dans la même ville dans les tables auteurs et éditeurs :

SELECT *
FROM auteurs AS a INNER JOIN éditeurs AS p
ON a.city=p.city
Un autre exemple consiste à utiliser des jointures naturelles pour supprimer les colonnes en double (ville et état) dans les tables des auteurs et des éditeurs dans la liste de sélection :
SELECT a.*,p.pub_id ,p.pub_name, p.country
FROM auteurs AS a INNER JOIN éditeurs AS p
ON a.city=p.city

(2) Jointure externe
Lorsque les jointures internes, retournez les résultats de la requête sont définis Seules les lignes qui répondent aux conditions de requête (conditions de recherche WHERE ou conditions HAVING) et aux conditions de jointure. Lorsqu'une jointure externe est utilisée, le jeu de résultats de requête renvoyé contient non seulement des lignes qui répondent aux conditions de jointure, mais inclut également la table de gauche (lors d'une jointure externe gauche), la table de droite (lors d'une jointure externe droite) ou deux tables de bord (complètes). toutes les lignes de données dans la jointure externe). Comme indiqué ci-dessous, utilisez une jointure externe gauche pour connecter le contenu du forum et les informations sur l'auteur :

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username

Ce qui suit utilise une jointure externe complète pour lister tous les auteurs de la table city et tous les auteurs de la table user, ainsi que les villes où ils se trouvent :

SELECT a. *,b.*
FROM city en tant qu'utilisateur FULL OUTER JOIN en tant que b
ON a.username=b.username

(3) Jointure croisée
La jointure croisée n'a pas de WHERE clause, elle renvoie toutes les lignes de données des deux tables étant un produit cartésien connecté, le nombre de lignes de données renvoyées dans le jeu de résultats est égal au nombre de lignes de données dans la première table qui remplissent les conditions de requête multiplié par le nombre de lignes de données dans la deuxième table qui répondent aux conditions de requête. Par exemple, il y a 6 catégories de livres dans la table des titres, et 8 éditeurs dans la table des éditeurs, alors le nombre d'enregistrements récupérés par l'interconnexion suivante sera égal à 6*8=48 lignes.

SELECT type,pub_name

FROM titres CROSS JOIN éditeurs
ORDER BY type
[Post=0][/Post]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn