Usando a sintaxe SELECT seis no ADO
Autor:Eve Cole
Data da Última Atualização:2009-05-30 19:54:23
subconsulta
Em uma expressão SELECT, SELECT...INTO, INSERT...INTO, DELETE ou UPDATE, você pode incluir uma expressão SELECT. Essa expressão SELECT é chamada de subconsulta.
Você pode construir subconsultas usando três sintaxes:
Expressão [ANY | ALL SOME] (subconsulta)
Expressão [NOT] IN (subconsulta)
[NÃO] EXISTE (subconsulta)
Uma expressão SELECT de uma subconsulta tem a mesma sintaxe de uma expressão SELECT geral e deve ser colocada entre parênteses.
Você pode usar subconsultas para substituir operadores em uma expressão SELECT ou em uma cláusula WHERE ou HAVING.
As palavras-chave ANY e SOME têm o mesmo significado e são utilizadas para selecionar as condições de comparação de quaisquer registros que correspondam à subconsulta. Por exemplo, o exemplo a seguir retornará registros nos quais o preço unitário do produto é maior que qualquer quantidade maior que 100 no pedido:
SELECIONE * DOS produtos
ONDE preço unitário> QUALQUER
(SELECIONE o preço unitário DO pedido
ONDE quantidade > 100)
A palavra-chave ALL é usada para selecionar as condições de comparação de todos os registros que correspondem à subconsulta.
Por exemplo, no exemplo acima, alterar ANY para ALL retornará registros em que o preço unitário do produto é maior que todos os pedidos com quantidade superior a 100.
Predicado de palavra-chave IN para recuperar determinados registros que contêm o mesmo valor na consulta principal e apenas na subconsulta. O exemplo a seguir retorna todos os produtos vendidos com desconto de 25% ou mais:
A palavra-chave IN é usada para selecionar registros na subconsulta. Por exemplo, o exemplo a seguir retornará registros com quantidade > 100 no pedido:
SELECIONE * DOS produtos
ONDE o código do produto IN
(SELECIONE o código do produto DO pedido
ONDE quantidade > 100)
Por outro lado, a palavra-chave NOT IN é usada para selecionar registros que não estão incluídos na subconsulta.
Em uma comparação verdadeiro/falso, você pode usar a palavra-chave EXISTS para determinar se a subconsulta retornará algum registro.
Um exemplo ASP da palavra-chave ALL, como o programa ASP rs24.asp é o seguinte, [SELECT name, subject, score From exam Where subject = 'arithmetic' and score >= All (SELECT score From exam Where subject = 'arithmetic ' e nome =' Zhang San')] Encontre os registros aritméticos do teste aritmético cuja pontuação é maior ou igual a Zhang San:
<%
Definir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Driver Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
Definir rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECIONE nome, matéria, pontuação do exame Onde matéria = 'Aritmética' e pontuação >= Todos (SELECIONE pontuação do exame Onde matéria = 'Aritmética' e nome = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Todas as pontuações superiores à aritmética de Zhang San"
Faça enquanto não rs2.EOF
Response.Write "<BR>" & rs2("Nome") & " " & rs2("Assunto") & " Pontuação: " & rs2("Pontuação")
rs2.MoveNext
Laço
rs2.Fechar
%>
O programa ASP rs24.asp acima usa um navegador no lado do cliente para navegar pelos resultados da execução e exibir os registros aritméticos do teste aritmético cujas pontuações são maiores ou iguais a Zhang San.
Qualquer
A palavra-chave ANY é usada para selecionar as condições de comparação de qualquer registro que corresponda à subconsulta. Por exemplo, o programa ASP rs24.asp é o seguinte, [SELECT nome, matéria, pontuação do exame Onde matéria = 'aritmética' e pontuação >=. Qualquer (SELECT score From exam Where Subject='Arithmetic' and Name='Zhang San')] Encontre os registros cuja fração é maior ou igual a qualquer fração aritmética de Zhang San:
<%
Definir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Driver Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
Definir rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECIONE nome, matéria, pontuação do exame Onde matéria = 'Aritmética' e pontuação >= Qualquer (SELECIONE pontuação do exame Onde matéria = 'Aritmética' e nome = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Qualquer fração maior que a aritmética de Zhang San"
Faça enquanto não rs2.EOF
Response.Write "<BR>" & rs2("Nome") & " " & rs2("Assunto") & " Pontuação: " & rs2("Pontuação")
rs2.MoveNext
Laço
rs2.Fechar%>
O programa ASP rs24.asp acima usa um navegador no lado do cliente para navegar pelos resultados da execução e exibir os registros cujas pontuações são maiores ou iguais a qualquer fração aritmética de Zhang San.
Alguns
As palavras-chave SOME e ANY têm o mesmo significado e são usadas para selecionar as condições de comparação de qualquer registro que corresponda à subconsulta. Por exemplo, o programa ASP rs24.asp é o seguinte, [SELECT Name, Subject, Score From Exam Where Subject. = 'Aritmética' e Pontuação >= Alguns (SELECT Score From Exam Where Subject='Arithmetic' and Name='Zhang San')] Encontre os registros cujas pontuações são maiores ou iguais a qualquer fração aritmética de Zhang San:
<%
Definir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Driver Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
Definir rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECIONE nome, matéria, pontuação do exame Onde matéria = 'Aritmética' e pontuação >= Alguns (SELECIONE pontuação do exame Onde matéria = 'Aritmética' e nome = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>Alguma fração maior que a aritmética de Zhang San"
Faça enquanto não rs2.EOF
Response.Write "<BR>" & rs2("Nome") & " " & rs2("Assunto") & " Pontuação: " & rs2("Pontuação")
rs2.MoveNext
Laço
rs2.Fechar
%>
O programa ASP rs24.asp acima usa um navegador no lado do cliente para navegar pelos resultados da execução e exibir os registros cujas pontuações são maiores ou iguais a qualquer fração aritmética de Zhang San.
Selecione...em
Select...Into criará uma tabela gerada com base nos resultados da consulta.
A sintaxe é a seguinte:
SELECT campo 1[,campo 2[, ...]] INTO nova tabela[IN tabela externa]
DA tabela
O nome da nova tabela não pode ser igual ao nome da tabela existente, caso contrário ocorrerá um erro.
A nova tabela criada por Select...Into tem o mesmo tipo e tamanho de dados de campo que a tabela consultada.
Vejamos um exemplo de uso deste comando SQL em um programa ASP.
Por exemplo, o programa ASP rs9.asp é o seguinte, [Select * Into Computer From Product Where Type = 'Computer'] irá gerar uma nova tabela [Computer] para todos os registros [Type] na tabela [Product] como [Computer ]:
<%
Definir conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Driver Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
sql = "Selecione * no computador do produto onde categoria = 'computador'"
Defina a = conn1.Execute(sql)
Definir rs3 = Server.CreateObject("ADODB.Recordset")
sql = "Selecione * do computador"
rs3.Abrir sql,conn1,1,1,1
%>
<TABELA COLSPAN=8 CELLPADDING=5 BORDER=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Código</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Nome</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Preço</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">Quantidade</FONT></TD>
</TR>
<% Faça enquanto não rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("codename")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("nome")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("preço")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("quantidade")%></TD>
</TR>
<%
rs3.MoveNext
Laço
rs3.Fechar
%>
</TABELA>
O programa ASP rs9.asp acima usa um navegador no cliente para navegar pelos resultados da execução e exibir os registros da nova tabela [Computador].