programing

Mysql 하위 쿼리 결과 "where" 절이 나타납니다.

yellowcard 2023. 11. 1. 22:15
반응형

Mysql 하위 쿼리 결과 "where" 절이 나타납니다.

mysql 쿼리를 이렇게 실행할 수 있습니까?

select (select A from B where ... ) as C from D where C like ' ... '

하위 쿼리 결과를 일반적인 "where" 절에 사용해야 합니다.

다음과 같은 하위 쿼리로 포장할 수 있습니다.

SELECT * 
FROM (
        select (select A from B where ... ) as C from D
     ) subq
WHERE 
    C like ' ... '

너 이거 읽어 본 적 있어?

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

하위 쿼리는 다른 문 안에 있는 SELECT 문입니다.

MySQL 4.1부터는 SQL 표준에 필요한 모든 하위 쿼리 형식과 작업과 MySQL 고유의 몇 가지 기능이 지원됩니다.

하위 쿼리의 예는 다음과 같습니다.

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 

이 예제에서 SELECT * FROM t1 ...는 외부 쿼리(또는 외부 문)이고 (SELECT column1 FROM t2)는 하위 쿼리입니다.하위 쿼리는 외부 쿼리 내에 중첩되며, 실제로 다른 하위 쿼리 내에 상당한 깊이로 하위 쿼리를 중첩하는 것이 가능합니다.하위 쿼리는 항상 괄호 안에 나타나야 합니다.

하위 쿼리의 주요 장점은 다음과 같습니다.

문의 각 부분을 분리할 수 있도록 구조화된 쿼리를 허용합니다.

이들은 복잡한 가입과 결합이 필요한 작업을 수행할 수 있는 대안적인 방법을 제공합니다.

많은 사람들이 복잡한 가입이나 조합보다 하위 쿼리를 더 잘 읽을 수 있다고 생각합니다.실제로 초기 SQL을 "구조화된 쿼리 언어"라고 부르는 독창적인 아이디어를 사람들에게 제공한 것은 서브쿼리의 혁신이었습니다.

SQL 표준에 의해 지정되고 MySQL에서 지원되는 하위 쿼리 구문에 대한 주요 사항을 보여주는 예문은 다음과 같습니다.

그림처럼 되지는 않지만 두 곳 모두에서 쿼리를 실행할 수 있습니다.또는 해당 결과를 사용하여 임시 테이블을 만들고 쿼리에서 사용할 수 있도록 결합합니다.

Select C from D inner join (Select A from B where...) C on C.1=D.1 where C like....

이는 실제로 유효한 SQL입니다.

select (select A from B where A = D.A ) as C 
from D

대신 JOIN을 구현하는 것이 훨씬 나은(성능 측면에서) 것입니다.

SELECT D.A
FROM D
INNER JOIN B ON B.A = D.A

하위 쿼리의 결과를 비교하는 경우 예를 수행할 수 있습니다.

select X ... where (select Y ... ) = Z

하지만, 아마 나쁜 생각일 겁니다.일반적으로 이렇게 해야 할 때는 메인 셀렉트로 간소화하는 방법을 찾는 것이 가장 좋습니다.중첩 쿼리를 피할 수 있는 매우 창의적인 방법이 있습니다.그 이유는 모든 선택이 매번 내부 쿼리를 수행해야 하기 때문입니다.

하위 쿼리에 대해 where를 수행하는 경우 모두 선택하고 where를 적용합니다.그러나 다시 한 번 다른 곳에 적용할 수 있습니다.

select X ... where Y = Z and A = B.

언급URL : https://stackoverflow.com/questions/8590421/mysql-subquery-result-in-where-clause

반응형