mysql에서 중첩 쿼리는 SELECT 문의 WHERE 절 또는 HAVING 절에 다른 SELECT 문을 중첩하는 쿼리를 의미하며 구문은 "SELECT 문 WHERE 조건(SELECT 문)"이라고도 합니다.
이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.
중첩 쿼리
정의: 내부 쿼리 문(select-from-where) 블록은 다른 외부 쿼리 블록의 where 절에 중첩될 수 있습니다. 여기서 외부 레이어 쿼리는 호출이라고도 합니다. 상위 쿼리, 기본 쿼리. 쿼리에서는 내부 쿼리를 하위 쿼리라고도 합니다. 하위 쿼리는 일반적으로 order by 절을 사용하지 않으며 최종 쿼리 결과만 정렬할 수 있습니다.
또 다른 정의: SELECT 문의 WHERE 절 또는 HAVING 절에 다른 SELECT 문을 중첩하는 쿼리를 중첩 쿼리라고 하며 하위 쿼리라고도 합니다.
중첩 쿼리가 작동하는 방식은 내부 쿼리가 먼저 처리되고 외부 쿼리가 내부 쿼리의 결과를 사용하는 것입니다. 중첩 쿼리는 상위 쿼리 select 문에서만 사용할 수 없습니다. 삽입, 업데이트, 삭제 문 또는 기타 하위 쿼리에도 사용할 수 있습니다.
1. 표준 선택 목록 구성 요소를 포함하는 표준 선택 쿼리입니다.
2. 하나 이상의 테이블 또는 뷰 이름이 포함된 절의 표준입니다.
3. 선택적 where 절.
4. 절별 선택 그룹.
5. 선택 사항입니다.
1. 하위 쿼리의 선택 쿼리는 항상 괄호 안에 표시됩니다.
2. Compute 또는 for.browse 절을 포함할 수 없습니다.
3. 상위 절을 동시에 지정하는 경우 order by 절만 포함될 수 있습니다.
4. 하위 쿼리는 최대 32개 수준까지 중첩될 수 있습니다. 일부 쿼리는 32개 수준의 중첩을 지원하지 않을 수 있습니다.
5. 하위 쿼리는 단일 값을 반환하는 한 표현식을 사용할 수 있는 모든 곳에서 사용할 수 있습니다.
6. 테이블이 하위 쿼리에만 나타나고 외부 쿼리에는 나타나지 않는 경우 테이블의 열은 출력에 포함될 수 없습니다.
하위 쿼리가 하나의 값만 반환하는 경우 =,, >=, <=, != 등과 같은 비교 연산자를 사용하여 리치 쿼리와 하위 쿼리를 연결할 수 있습니다. . 예시는 다음과 같습니다.
3.1 단순 하위 쿼리
select name,age from person where age > ( select age from person where name = '张三');
3.2 중첩 쿼리와 같은
select count(distinct(Tname)) --查询姓“张”的老师的个数 from Teacher where Tname like '张%';
서브 쿼리가 두 개 이상의 값을 반환하지만 집합을 반환하는 경우 직접 사용할 수 없습니다. 연산자의 경우 비교 연산자와 하위 쿼리 사이에 ANY, SOME 또는 ALL을 삽입할 수 있습니다. 등가 관계에서는 IN 연산자를 사용할 수 있습니다.
4.1 in 중첩 쿼리
in 키워드는 쿼리 표현식이 여러 값 목록에 있는지 확인하기 위해 where 절에 사용됩니다. in 목록의 조건을 만족하는 레코드를 반환합니다.
select name from person where countryid in ( select countryid from country where countryname = '中国');
4.2 일부 중첩 쿼리
some은 SQL의 논리 연산 기호입니다. 일련의 비교에서 일부 값이 True이면 결과도 True입니다. some 구문은 다음과 같습니다.
select name from person where countryid = some ( select countryid from country --用等号和以下查询到的值比较,如果与其中一个相等,就返回 where countryname = '中国');
4.3 allnested query
all은 SQL의 논리 연산자입니다. 일련의 비교가 참이면 결과도 참일 수 있습니다.
select name from person where countryid > all ( select countryid from country --当countryid大于以下返回的所有id,此结果才为True,此结果才返回 where countryname = '中国');
4.4 존재 중첩 쿼리
exists는 SQL의 논리 연산 기호입니다. 하위 쿼리가 결과 집합을 반환하면 참입니다. 존재한다는 것은 '존재한다'는 의미를 나타내며, 조건에 맞는 레코드만을 찾는다. 일치하는 첫 번째 레코드가 발견되면 검색이 중지됩니다.
exists Subquery
서브 쿼리는 첫 번째 Select 문이므로 계산 절과 into 키워드는 허용되지 않습니다.
exists는 하위 쿼리가 결과 집합을 반환하는지 여부를 의미합니다.
SELECT * FROM Person WHERE exists ( SELECT 1); --SELECT 0 SELECT NULL 返回结果都一样,因为这三个子查询都有结果集返回,因此总是True,SELECT * FROM Person照常执行
그러나 하위 쿼리에 추가된 조건으로 인해 결과 집합이 반환되지 않으면 기본 문이 실행되지 않습니다.
SELECT * FROM Person WHERE exists ( SELECT * FROM Person WHERE Person_Id = 100); --如果不存在Person_Id的记录,则子查询没有结果集返回,主语句不执行
5.1 "001" 코스 비율 "002" 쿼리 높은 점수를 받은 모든 학생의 학생 수
Select a.Sno from (select Sno,score from SC where Sno='001') a, (select Sno,scorefrom SC where Cno='002') b Where a.score>b.score and a.Sno=b.Sno;
추천 학습: mysql 비디오 튜토리얼
위 내용은 mysql 중첩 쿼리 문이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!