ADO에서 SELECT 구문 6 사용
저자:Eve Cole
업데이트 시간:2009-05-30 19:54:23
하위 쿼리
SELECT, SELECT...INTO, INSERT...INTO, DELETE 또는 UPDATE 표현식에 SELECT 표현식을 포함할 수 있습니다. 이 SELECT 표현식을 하위 쿼리라고 합니다.
다음 세 가지 구문을 사용하여 하위 쿼리를 작성할 수 있습니다.
표현식 [모두 | 일부](하위 쿼리)
표현식 [NOT] IN(하위 쿼리)
[NOT] 존재함(하위 쿼리)
하위 쿼리의 SELECT 표현식은 일반 SELECT 표현식과 구문이 동일하며 괄호로 묶어야 합니다.
하위 쿼리를 사용하여 SELECT 표현식이나 WHERE 또는 HAVING 절에서 연산자를 바꿀 수 있습니다.
ANY와 SOME 키워드는 동일한 의미를 가지며 하위 쿼리와 일치하는 모든 레코드의 비교 조건을 선택하는 데 사용됩니다. 예를 들어 다음 예에서는 제품 단가가 주문 수량 100보다 큰 레코드를 반환합니다.
SELECT * FROM 제품
WHERE 단가 > 모두
(주문에서 단가 선택
수량 > 100인 경우)
ALL 키워드는 하위 쿼리와 일치하는 모든 레코드의 비교 조건을 선택하는 데 사용됩니다.
예를 들어 위의 예에서 ANY를 ALL로 변경하면 제품의 단가가 수량이 100보다 큰 모든 주문보다 높은 레코드가 반환됩니다.
키워드 IN 조건자는 기본 쿼리와 하위 쿼리에서만 동일한 값을 포함하는 특정 레코드를 검색합니다. 다음 예에서는 25% 이상의 할인율로 판매된 모든 제품을 반환합니다.
IN 키워드는 하위 쿼리에서 레코드를 선택하는 데 사용됩니다. 예를 들어 다음 예에서는 주문 수량 > 100인 레코드를 반환합니다.
SELECT * FROM 제품
제품 코드가 있는 곳
(주문에서 제품 코드 선택
수량 > 100인 경우)
반면에 NOT IN 키워드는 하위 쿼리에 포함되지 않은 레코드를 선택하는 데 사용됩니다.
참/거짓 비교에서는 EXISTS 키워드를 사용하여 하위 쿼리가 레코드를 반환할지 여부를 결정할 수 있습니다.
ASP 프로그램 rs24.asp와 같은 키워드 ALL의 ASP 예는 다음과 같습니다. [SELECT 이름, 주제, 점수 From Exam Where subject = '산술' 및 점수 >= All(SELECT Score From Exam Where subject = '산술' ' and name ='Zhang San')] 점수가 Zhang San보다 크거나 같은 산술 시험의 산술 기록을 찾습니다.
<%
conn1 = Server.CreateObject("ADODB.Connection") 설정
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver(*.mdb)};DriverId=25;FIL=MS Access;"
rs2 = Server.CreateObject("ADODB.Recordset") 설정
SqlStr = "이름, 과목, 시험 점수 선택 주제 = '산술' 및 점수 >= 모두(시험 점수 선택, 주제 = '산술' 및 이름 = '장산')"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>모든 점수가 장산의 산수보다 높습니다."
rs2.EOF가 아닌 동안 수행
Response.Write "<BR>" & rs2("이름") & " " & rs2("제목") & " 점수: " & rs2("점수")
rs2.다음으로 이동
고리
RS2.닫기
%>
위의 ASP 프로그램 rs24.asp는 클라이언트측 브라우저를 사용하여 실행 결과를 검색하고 점수가 Zhang San보다 크거나 같은 산술 테스트의 산술 기록을 표시합니다.
어느
ANY 키워드는 하위 쿼리와 일치하는 모든 레코드의 비교 조건을 선택하는 데 사용됩니다. 예를 들어 ASP 프로그램 rs24.asp는 다음과 같습니다. [SELECT 이름, 주제, 점수 From Exam 여기서 주제 = '산술' 및 점수 >= Any (SELECT Score From Exam Where Subject='Arithmetic' and Name='Zhang San')] 분수가 Zhang San의 산술 분수보다 크거나 같은 레코드를 찾습니다.
<%
conn1 = Server.CreateObject("ADODB.Connection") 설정
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver(*.mdb)};DriverId=25;FIL=MS Access;"
rs2 = Server.CreateObject("ADODB.Recordset") 설정
SqlStr = "이름, 과목, 시험 점수 선택 주제 = '산술' 및 점수 >= 임의(시험 점수 선택, 주제 = '산술' 및 이름 = '장산')"
rs2.Open SqlStr,conn1,1,1
응답."<p>장산(Zhang San)의 산술보다 큰 분수"라고 쓰세요.
rs2.EOF가 아닌 동안 수행
Response.Write "<BR>" & rs2("이름") & " " & rs2("제목") & " 점수: " & rs2("점수")
rs2.다음으로 이동
고리
rs2.닫기%>
위의 ASP 프로그램 rs24.asp는 클라이언트측 브라우저를 사용하여 실행 결과를 찾아보고 점수가 Zhang San의 산술 분수보다 크거나 같은 레코드를 표시합니다.
일부
SOME과 ANY 키워드는 동일한 의미를 가지며 하위 쿼리와 일치하는 모든 레코드의 비교 조건을 선택하는 데 사용됩니다. 예를 들어 ASP 프로그램 rs24.asp는 다음과 같습니다. [SELECT Name, Subject, Score From Exam Where Subject = '산술' 및 점수 >= 일부(제목='산술' 및 이름='장산'인 시험에서 점수 선택)] 점수가 장산의 산술 분수보다 크거나 같은 기록을 찾습니다.
<%
conn1 = Server.CreateObject("ADODB.Connection") 설정
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={Microsoft Access Driver(*.mdb)};DriverId=25;FIL=MS Access;"
rs2 = Server.CreateObject("ADODB.Recordset") 설정
SqlStr = "선택 이름, 과목, 시험 점수 여기서 주제 = '산술' 및 점수 >= 일부(시험에서 점수 선택, 주제 = '산술' 및 이름 = 'Zhang San')"
rs2.Open SqlStr,conn1,1,1
응답."<p>장산의 산수보다 약간 높은 분수"라고 쓰세요.
rs2.EOF가 아닌 동안 수행
Response.Write "<BR>" & rs2("이름") & " " & rs2("제목") & " 점수: " & rs2("점수")
rs2.다음으로 이동
고리
RS2.닫기
%>
위의 ASP 프로그램 rs24.asp는 클라이언트측 브라우저를 사용하여 실행 결과를 찾아보고 점수가 Zhang San의 산술 분수보다 크거나 같은 레코드를 표시합니다.
선택...들어가기
Select...Into는 쿼리 결과를 기반으로 생성된 테이블을 생성합니다.
구문은 다음과 같습니다.
SELECT 필드 1[,필드 2[, ...]] INTO 새 테이블[IN 외부 테이블]
테이블에서
새 테이블의 이름은 기존 테이블의 이름과 같을 수 없습니다. 그렇지 않으면 오류가 발생합니다.
Select...Into로 생성된 새 테이블은 쿼리된 테이블과 동일한 필드 데이터 유형 및 크기를 갖습니다.
ASP 프로그램에서 이 SQL 명령을 사용하는 예를 살펴보겠습니다.
예를 들어, ASP 프로그램 rs9.asp는 다음과 같습니다. [Select * Into Computer From Product Where Type = 'Computer']는 [Product] 테이블의 모든 [Type] 레코드에 대해 새로운 [Computer] 테이블을 [Computer]로 생성합니다. ]:
<%
conn1 = Server.CreateObject("ADODB.Connection") 설정
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver(*.mdb)};DriverId=25;FIL=MS Access;"
sql = "범주 = '컴퓨터'인 제품에서 *를 컴퓨터로 선택"
a = conn1.Execute(sql) 설정
rs3 = Server.CreateObject("ADODB.Recordset") 설정
sql = "컴퓨터에서 * 선택"
rs3.SQL 열기, conn1,1,1,1
%>
<테이블 COLSPAN=8 셀 패딩=5 테두리=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">코드</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">이름</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">가격</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">수량</FONT></TD>
</TR>
<% rs3.EOF가 아닌 동안 수행 %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("코드 이름")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("name")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("price")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3("수량")%></TD>
</TR>
<%
rs3.다음으로 이동
고리
rs3.닫기
%>
</TABLE>
위의 ASP 프로그램 rs9.asp는 클라이언트의 브라우저를 사용하여 실행 결과를 찾아보고 새 [컴퓨터] 테이블의 레코드를 표시합니다.