Utilisation de la syntaxe SELECT six dans ADO
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:54:23
sous-requête
Dans une expression SELECT, SELECT...INTO, INSERT...INTO, DELETE ou UPDATE, vous pouvez inclure une expression SELECT. Cette expression SELECT est appelée une sous-requête.
Vous pouvez créer des sous-requêtes à l'aide de trois syntaxes :
Expression [TOUS | CERTAINS] (sous-requête)
Expression [NOT] IN (sous-requête)
[NON] EXISTE (sous-requête)
Une expression SELECT d'une sous-requête a la même syntaxe qu'une expression SELECT générale et doit être placée entre parenthèses.
Vous pouvez utiliser des sous-requêtes pour remplacer des opérateurs dans une expression SELECT ou dans une clause WHERE ou HAVING.
Les mots-clés ANY et SOME ont la même signification et sont utilisés pour sélectionner les conditions de comparaison de tous les enregistrements correspondant à la sous-requête. Par exemple, l'exemple suivant renverra les enregistrements dans lesquels le prix unitaire du produit est supérieur à toute quantité supérieure à 100 dans la commande :
SÉLECTIONNER * DES produits
OÙ prix unitaire > TOUT
(SÉLECTIONNEZ le prix unitaire DE la commande
OÙ quantité > 100)
Le mot-clé ALL est utilisé pour sélectionner les conditions de comparaison de tous les enregistrements correspondant à la sous-requête.
Par exemple, dans l'exemple ci-dessus, remplacer ANY par ALL renverra les enregistrements dans lesquels le prix unitaire du produit est supérieur à toutes les commandes d'une quantité supérieure à 100.
Prédicat Mot-clé IN pour récupérer certains enregistrements qui contiennent la même valeur dans la requête principale et uniquement dans la sous-requête. L'exemple suivant renvoie tous les produits vendus avec une remise de 25 % ou plus :
Le mot clé IN est utilisé pour sélectionner des enregistrements dans la sous-requête. Par exemple, l'exemple suivant renverra les enregistrements avec une quantité > 100 dans la commande :
SÉLECTIONNER * DES produits
OÙ code produit IN
(SÉLECTIONNEZ le code produit DE la commande
OÙ quantité > 100)
En revanche, le mot clé NOT IN est utilisé pour sélectionner les enregistrements qui ne sont pas inclus dans la sous-requête.
Dans une comparaison vrai/faux, vous pouvez utiliser le mot-clé EXISTS pour déterminer si la sous-requête renverra des enregistrements.
Un exemple ASP du mot-clé ALL, tel que le programme ASP rs24.asp, est le suivant : [SELECT nom, sujet, score de l'examen Où sujet = 'arithmétique' et score >= Tous (SELECT score De l'examen Où sujet = 'arithmétique ' et nom =' Zhang San')] Trouver les enregistrements arithmétiques du test arithmétique dont le score est supérieur ou égal à Zhang San :
<%
Définir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Définir rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT nom, sujet, score de l'examen où sujet = 'Arithmétique' et score >= Tout (SELECT score de l'examen où sujet = 'Arithmétique' et nom = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
Réponse.Écrivez « <p>Tous les scores sont supérieurs à l'arithmétique de Zhang San »
Faire sans rs2.EOF
Réponse.Écrivez "<BR>" & rs2("Nom") & " " & rs2("Sujet") & " Score : " & rs2("Score")
rs2.MoveNext
Boucle
rs2.Fermer
%>
Le programme ASP ci-dessus, rs24.asp, utilise un navigateur côté client pour parcourir les résultats d'exécution et afficher les enregistrements arithmétiques du test arithmétique dont les scores sont supérieurs ou égaux à Zhang San.
N'importe lequel
Le mot-clé ANY est utilisé pour sélectionner les conditions de comparaison de tout enregistrement correspondant à la sous-requête. Par exemple, le programme ASP rs24.asp est le suivant : [SELECT nom, sujet, score de l'examen Où sujet = 'arithmétique' et score >=. Tout (SELECT score From exam Where Subject='Arithmetic' and Name='Zhang San')] Recherchez les enregistrements dont la fraction est supérieure ou égale à n'importe quelle fraction arithmétique de Zhang San :
<%
Définir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Définir rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT nom, sujet, score de l'examen où sujet = 'Arithmétique' et score >= Tout (SELECT score de l'examen où sujet = 'Arithmétique' et nom = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
Réponse.Écrivez "<p>Toute fraction supérieure à l'arithmétique de Zhang San"
Faire sans rs2.EOF
Réponse.Écrivez "<BR>" & rs2("Nom") & " " & rs2("Sujet") & " Score : " & rs2("Score")
rs2.MoveNext
Boucle
rs2.Fermer%>
Le programme ASP ci-dessus, rs24.asp, utilise un navigateur côté client pour parcourir les résultats d'exécution et afficher les enregistrements dont les scores sont supérieurs ou égaux à n'importe quelle fraction arithmétique de Zhang San.
Quelques
Les mots clés SOME et ANY ont la même signification et sont utilisés pour sélectionner les conditions de comparaison de tout enregistrement correspondant à la sous-requête. Par exemple, le programme ASP rs24.asp est le suivant : [SELECT Name, Subject, Score From Exam Where Subject. = 'Arithmétique' et Score >= Certains (SELECT Score From Exam Where Subject='Arithmétique' et Nom='Zhang San')] Recherchez les enregistrements dont les scores sont supérieurs ou égaux à n'importe quelle fraction arithmétique de Zhang San :
<%
Définir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Définir rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT nom, sujet, score de l'examen où sujet = 'Arithmétique' et score >= Certains (SELECT score de l'examen où sujet = 'Arithmétique' et nom = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
Réponse.Écrivez "<p>Une fraction supérieure à l'arithmétique de Zhang San"
Faire sans rs2.EOF
Réponse.Écrivez "<BR>" & rs2("Nom") & " " & rs2("Sujet") & " Score : " & rs2("Score")
rs2.MoveNext
Boucle
rs2.Fermer
%>
Le programme ASP ci-dessus, rs24.asp, utilise un navigateur côté client pour parcourir les résultats d'exécution et afficher les enregistrements dont les scores sont supérieurs ou égaux à n'importe quelle fraction arithmétique de Zhang San.
Sélectionnez...Dans
Select...Into créera une table générée basée sur les résultats de la requête.
La syntaxe est la suivante :
SELECT champ 1[,champ 2[, ...]] INTO nouvelle table[IN table externe]
DE la table
Le nom de la nouvelle table ne peut pas être le même que celui de la table existante, sinon une erreur se produira.
La nouvelle table créée par Select...Into a le même type de données de champ et la même taille que la table interrogée.
Regardons un exemple d'utilisation de cette commande SQL dans un programme ASP.
Par exemple, le programme ASP rs9.asp est le suivant : [Sélectionner * Dans l'ordinateur à partir du produit où Type = 'Ordinateur'] générera une nouvelle table [Ordinateur] pour tous les enregistrements [Type] dans la table [Produit] sous la forme [Ordinateur ] :
<%
Définir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
sql = "Sélectionner * Dans l'ordinateur à partir du produit où catégorie = 'Ordinateur'"
Définir a = conn1.Execute(sql)
Définir rs3 = Server.CreateObject("ADODB.Recordset")
sql = "Sélectionner * depuis l'ordinateur"
rs3.Open sql,conn1,1,1,1
%>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Code</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Nom</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Prix</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Quantité</FONT></TD>
</TR>
<% Faire sans rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("codename")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("name")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("price")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("quantité")%></TD>
</TR>
<%
rs3.MoveNext
Boucle
rs3.Fermer
%>
</TABLE>
Le programme ASP ci-dessus, rs9.asp, utilise un navigateur sur le client pour parcourir les résultats d'exécution et afficher les enregistrements de la nouvelle table [Ordinateur].