mysql에서 in은 특정 범위 내의 데이터를 쿼리하는 where 표현식에 자주 사용됩니다. 구문은 "select*from where field in(value1,value2,..)"입니다. , 이는 in과 달리 해당 목록 항목 내에서 선택이 이루어지지 않음을 의미합니다.
이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.
mysql에서 쿼리에 사용하는 방법
1. 기본 사용법
mysql에서는 where 표현식에서 in을 자주 사용하는데, 그 기능은 특정 범위 내의 데이터를 쿼리하는 것이다.
select * from where field in (value1,value2,value3,…)
IN 앞에 NOT 연산자가 있으면 IN과 반대되는 의미, 즉 목록 항목 내에서 선택하지 않음을 의미합니다.
select * from where field not in (value1,value2,value3,…)
2. IN 하위 쿼리
더 많은 경우 IN 목록의 값 항목은 불분명하지만 하위 쿼리를 통해 얻을 수 있습니다:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)
이 SQL 예에서는 상태가 0(금지됨)인 모든 사용자의 모든 기사를 찾는 방법을 구현합니다. 먼저 쿼리를 통해 상태=0인 모든 사용자를 가져옵니다.
SELECT uid FROM user WHERE status=0
그런 다음 쿼리 결과를 IN의 목록 항목으로 사용하여 최종 쿼리 결과를 얻습니다. 하위 쿼리에 반환되는 결과는 필드 목록 항목이어야 합니다.
in 하위 쿼리에서 쿼리 효율성이 낮은 문제가 자주 발생합니다.
1. 여전히 in 하위 쿼리를 사용하고 한 번 더 쿼리하세요
SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )
2. LEFT JOIN
SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode
3. IN 연산자를 위한 추가 지침
IN 목록 항목은 숫자뿐만 아니라 문자, 시간 및 날짜 유형 등도 지원할 수 있으며 이러한 다양한 유형의 데이터 항목은 열 유형과 일치하지 않고 혼합 및 정렬될 수 있습니다.
SELECT * FROM user WHERE uid IN(1,2,'3','c')
하나의 IN만 가능 필드에 대한 범위 비교를 수행하기 위해 더 많은 필드를 지정하려면 AND 또는 OR 논리 연산자를 사용할 수 있습니다.
SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','manong')
AND 또는 OR 논리 연산자를 사용한 후 IN도 결합할 수 있습니다. LIKE, >=, = 등의 연산자와 함께 사용됩니다.
4. IN 연산자의 효율성에 관하여
IN의 목록 항목이 확실하면 대신 여러 OR을 사용할 수 있습니다.
SELECT * FROM user WHERE uid IN (2,3,5) // 等效为: SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)
일반적으로 다음을 사용합니다.
1. OR은 IN보다 효율적이지만 목록 항목이 불확실한 경우(예: 하위 쿼리 결과가 필요한 경우) IN 연산자를 사용해야 합니다. 또한, 서브쿼리 테이블의 데이터가 메인쿼리보다 작은 경우에도 IN 연산자를 적용할 수 있다.
또는 필드가 인덱싱되지 않은 경우 더 많은 필드가 연결될수록(1 또는 2 또는 3 또는 4 또는...) or의 쿼리 효율성은 in
권장 학습: mysql보다 훨씬 낮습니다. 비디오 튜토리얼
위 내용은 mysql에서 쿼리에 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!