ADO에서 SELECT 구문 4 사용
저자:Eve Cole
업데이트 시간:2009-05-30 19:54:28
가지고 있는
HAVING은 SELECT 표현식에서 GROUP BY로 계산된 레코드를 필터링하는 데 사용됩니다. GROUP BY가 레코드 수를 계산한 후 HAVING은 HAVING 절의 조건과 일치하는 레코드를 필터링합니다.
구문은 다음과 같습니다.
SELECT 필드 목록
테이블에서
어디에서 기준을 선택합니까?
GROUP BY 그룹 필드 목록
[HAVING 그룹 기준]
.groupcriteria는 필터링해야 할 항목을 결정하는 통계 기록을 나타냅니다.
HAVING은 WHERE와 유사하며 선택할 레코드를 결정하는 데 사용됩니다. GROUP BY를 사용하여 레코드 수를 계산하는 경우 HAVING은 표시되어야 하는 레코드를 결정합니다. 예를 들면 다음과 같습니다.
제품명을 선택하세요
제품에서
카테고리별 그룹
단가 > 1000
HAVING 절은 최대 40개의 연산식을 포함할 수 있으며, 연산식은 AND, OR 등의 논리 연산자로 연결됩니다.
ASP 프로그램에서 이 SQL 명령을 사용하는 예를 살펴보겠습니다.
HAVING 절을 사용하여 표시해야 하는 레코드를 결정할 수 있습니다. 예를 들어 ASP 프로그램 rs23.asp는 다음과 같습니다. [SELECT Name, Subject, Avg (Score) As Average From Exam Group By Name, Subject Have Avg ( Score) >=60], Have Avg(score) >=60을 사용하여 평균 점수가 60점 이상인 레코드를 찾습니다.
<%
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 = "이름, 과목, 평균(점수)을 이름별 시험 그룹의 평균으로 선택, 과목의 평균(점수) >=60"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>평균(점수) >=60"
rs2.EOF가 아닌 동안 수행
Response.Write "<BR>" & rs2("이름") & " " & rs2("제목") & " 평균: " & rs2("평균")
rs2.다음으로 이동
고리
RS2.닫기
%>
위의 ASP 프로그램 rs23.asp는 클라이언트의 브라우저를 사용하여 실행 결과를 찾아보고 평균 점수가 60점 이상인 레코드를 표시합니다.
HAVING 절을 사용하여 중복 레코드를 찾을 수도 있습니다. 예를 들어 ASP 프로그램 rs23.asp는 [SELECT Code From Product Group By Code Does Count (Code) > 1], Have Count (Code) > 1을 사용합니다. 중복 코드를 찾으려면 기록:
<%
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 = "개수(코드) > 1인 코드별로 제품 그룹에서 코드 선택"
rs2.Open SqlStr,conn1,1,1
Response.Write "<p>개수(코드) > 1인 중복 항목 찾기"
rs2.EOF가 아닌 동안 수행
Response.Write "<BR>" & rs2("코드명")
rs2.다음으로 이동
고리
RS2.닫기
%>
위의 ASP 프로그램 rs23.asp의 경우 클라이언트 측 브라우저를 사용하여 실행 결과를 찾아보고 중복된 코드 이름이 있는 레코드를 표시합니다.
노동 조합
Union은 여러 쿼리 집합의 결과를 결합할 수 있습니다.
구문은 다음과 같습니다.
쿼리 1 UNION [ALL] 쿼리 2 [UNION [ALL] 쿼리 3 [ ... ]]
쿼리는 SELECT 표현식입니다.
UNION 연산을 사용하면 중복된 레코드가 반환되지 않습니다. 모든 레코드를 반환하려면 UNION 뒤에 ALL을 추가하면 쿼리가 더 빠르게 실행됩니다.
UNION 작업의 모든 쿼리에는 동일한 수의 필드가 있어야 합니다. 필드 크기는 다를 수 있으며 필드 데이터 유형도 다를 수 있습니다.
별칭은 첫 번째 SELECT 표현식에만 사용할 수 있으며 다른 SELECT 표현식에서는 생략됩니다.
각 SELECT 표현식에서 GROUP BY 또는 HAVING 절을 사용하여 쿼리 결과를 계산할 수 있습니다.
마지막 SELECT 표현식에서 ORDER BY 절을 사용하여 쿼리 결과가 정렬되는 순서를 지정할 수 있습니다.
ASP 프로그램에서 이 SQL 명령을 사용하는 예를 살펴보겠습니다.
Union을 사용하여 두 쿼리 집합의 결과를 병합할 수 있습니다. 예를 들어 ASP 프로그램 rs25.asp는 다음과 같습니다. [(SELECT name, subject, Score From Exam 여기서 subject='arithmetic' 및 name='Li Si' ) Union (SELECT 이름, 과목, 점수) 시험 주제='산술' 및 이름='Zhang San')]에서 Union을 사용하여 두 세트의 SELECT 쿼리 결과를 병합하고, 한 그룹은 산술 점수 기록을 쿼리합니다. Li Si의 또 다른 하나는 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 = "(SELECT 이름, 과목, ScoreFrom Exam 여기서 주제='산술' 및 이름='Li Si') Union(SELECT 이름, 주제, ScoreFrom Exam Where 주제='산술' 및 이름='Zhang San') "
rs2.Open SqlStr,conn1,1,1
응답."<p>Union" 쓰기
rs2.EOF가 아닌 동안 수행
Response.Write "<BR>" & rs2("이름") & " " & rs2("제목") & " 점수: " & rs2("점수")
rs2.다음으로 이동
고리
RS2.닫기
%>
위의 ASP 프로그램 rs25.asp는 클라이언트의 브라우저를 사용하여 실행 결과를 찾아보고 John Doe 및 John Doe의 산술 분수 레코드를 표시합니다.