SQL 의 having, distinct, exists 용법 소개

있다
SQL 에 HAVING 자 구 를 추가 한 이 유 는 WHERE 키 워드 를 합산 함수 와 함께 사용 할 수 없 기 때 문 입 니 다.
HAVING 자구 가 GROUP BY 자구 에 조건 을 설정 하 는 방식 은 WHERE 와 SELECT 의 상호작용 방식 과 유사 하 다.WHERE 검색 조건 은 그룹 작업 을 진행 하기 전에 적 용 됩 니 다.HAVING 검색 조건 은 그룹 작업 후 적 용 됩 니 다.HAVING 문법 은 WHERE 문법 과 유사 하지만 HAVING 에는 취 합 함 수 를 포함 할 수 있다.HAVING 자 구 는 선택 목록 에 표 시 된 임의의 항목 을 참조 할 수 있 습 니 다.
참고 할 만하 다http://blog.csdn.net/wozeze1/article/details/6031318
제품 ID 에 따라 SalesOrder Detail 을 그룹 으로 나 누 었 고 주문 합계 가 $1, 000, 000 이상 이 며 평균 주문 수량 이 3 이하 인 제품 그룹 만 포함 되 어 있 습 니 다.
SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3 ;
WHERE, GROUP BY, HAVING 자구 의 정확 한 순 서 는 효율 적 인 조회 코드 를 작성 하 는 데 도움 이 될 것 입 니 다.
WHERE 자 구 는 FROM 자구 에서 지정 한 동작 이 발생 하 는 줄 을 선별 하 는 데 사 용 됩 니 다. 
GROUP BY 자 구 는 WHERE 자 구 를 나 누 어 출력 하 는 데 사 용 됩 니 다.
HAVING 자 구 는 그룹 을 나 눈 결과 에서 줄 을 고 르 는 데 사 용 됩 니 다.
그룹 작업 을 하기 전이 나 그 후에 적용 할 수 있 는 모든 검색 조건 에 대해 서 는 WHERE 자구 에서 지정 하 는 것 이 더 효과 적 입 니 다.이렇게 하면 반드시 그룹 을 나 누 어야 하 는 줄 수 를 줄 일 수 있다.HAVING 자구 에서 지정 해 야 할 검색 조건 은 그룹 작업 을 수행 한 후에 적용 해 야 할 검색 조건 일 뿐 입 니 다.
where 자구, group by 자구, having 자구 및 집합 함 수 를 동시에 포함 할 때 실행 순 서 는 다음 과 같다.
-- where 자 구 를 실행 하여 조건 에 맞 는 데 이 터 를 찾 습 니 다.
-- group by 자구 로 데 이 터 를 묶 기;group by 자구 로 구 성 된 그룹 실행 집합 함수 에 대해 각 그룹의 값 을 계산 합 니 다.마지막 으로 having 자구 로 조건 에 맞지 않 는 그룹 을 제거 합 니 다.
한 마디 로 where 구문 에 집합 함 수 를 사용 할 수 없 기 때문에 having 을 사용 합 니 다.
뚜렷 하 다
키워드 distinct 는 유일 하 게 다른 값 selectinct userid from sales 를 되 돌려 주 는 데 사 용 됩 니 다.
select distinct username,userid from sales;각각 username 과 userid 열 에 작용 합 니 다.
select count(distinct name) from A;
select id, distinct name from A;   --distinct 를 시작 에 두 어야 하기 때문에 오류 가 발생 할 수 있 습 니 다.
존재 하 다
레 퍼 런 스http://www.cnblogs.com/mytechblog/articles/2105785.html
exists: 강조 하 는 것 은 결과 집합 을 되 돌려 주 는 지 여부 입 니 다. 무엇 을 되 돌려 주 는 지 요구 하지 않 습 니 다. 예 를 들 어:  select name from student where sex = 'm' and mark exists (select 1 from grade where...), exists 가 이 끄 는 자구 에 결과 집합 이 있 으 면 exists 라 는 조건 이 성립 된 것 으로 간주 합 니 다. 되 돌아 오 는 필드 는 항상 1 입 니 다. 'select 2 from grade where...' 로 바 뀌 면 되 돌아 오 는 필드 는 2 입 니 다. 이 숫자 는 의미 가 없습니다.그래서 exists 자 구 는 무엇 을 되 돌려 주 는 것 이 아니 라 결과 집 이 돌아 오 는 지 에 달 려 있다.한편, exists 와 in 의 가장 큰 차 이 는 in 이 인도 하 는 자구 가 한 필드 만 되 돌아 갈 수 있다 는 것 이다. 예 를 들 어:  select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...)   ,in 자 구 는 세 필드 를 되 돌려 주 었 습 니 다. 이것 은 정확 하지 않 습 니 다. exists 자 구 는 허용 되 지만 in 은 한 필드 만 되 돌려 주 고 1, 2, 3 에서 두 필드 를 마음대로 가면 됩 니 다.not exists 와 not in 은 각각 exists 와 in 의 대립면 이다.exists (sql 결과 집합 을 진짜 로 되 돌려 줍 니 다)  not exists (sql 결과 집합 을 진짜 로 되 돌려 주지 않 음)

좋은 웹페이지 즐겨찾기