source

조인 없이 여러 테이블에서 선택하시겠습니까?

gigabyte 2022. 9. 13. 22:07
반응형

조인 없이 여러 테이블에서 선택하시겠습니까?

두 테이블에서 데이터를 선택하고 조인하지 않고 개별 행으로 표시하는 가장 쉬운 방법은 무엇입니까?두 테이블 모두 필드가 비슷하거나 일치하며 두 테이블에서 같은 달에 발생한 모든 행의 avg와 같은 집계 함수를 실행하고 싶습니다.

예를 들어, 한 시스템으로부터의 트랜잭션을 보여주는 테이블과 다른 시스템으로부터의 트랜잭션을 보여주는 테이블이 있습니다.양쪽 테이블에서 모든 트랜잭션을 별도의 행으로 가져올 수 있는 방법이 있습니까?테이블 1에 20개의 레코드가 있고 테이블 2에 30개의 레코드가 있다면 반환 시 50개의 열이 있었으면 합니다.

다음과 같은 작업을 수행할 수 있습니다.

SELECT ...
FROM (
    SELECT f1,f2,f3 FROM table1
    UNION
    SELECT f1,f2,f3 FROM table2
)
WHERE ...

UNION ALLoperator는 찾고 있는 것이기도 합니다.

이 연산자를 사용하면 여러 쿼리의 결과 집합을 연결하여 각 쿼리의 모든 행을 보존할 수 있습니다.주의:UNIONoperator (미포함)ALL키워드)를 지정하면 결과 세트에 존재하는 모든 "실행" 행이 삭제됩니다.UNION ALL연산자는 각 쿼리의 모든 행을 유지합니다(또한 중복 검사 및 제거 작업을 수행하는 오버헤드가 없으므로 성능이 향상될 수 있습니다).

각 열의 열 수와 데이터 유형은 각 쿼리에서 일치해야 합니다.쿼리 중 하나에 다른 쿼리보다 더 많은 열이 있는 경우 열과 데이터 유형을 "일치"하기 위해 다른 쿼리에 더미 식을 포함할 수 있습니다.종종 리터럴을 반환하는 각 쿼리의 SELECT 목록에 식(추가 열)을 포함하면 행의 "소스" 쿼리가 무엇인지 알 수 있습니다.

SELECT 'q1' AS source, a, b, c, d FROM t1 WHERE ...
UNION ALL
SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2 JOIN t3 ON ...
UNION ALL
SELECT 'q3', '1', '2', buckle, my_shoe FROM t4

이와 같은 쿼리를 괄호 세트로 감싸 인라인 뷰(또는 MySQL 언어에서는 "파생 테이블")로 사용하여 모든 행에 대해 집계 작업을 수행할 수 있습니다.

SELECT t.a
     , SUM(t.b)
     , AVG(t.c)
  FROM (
         SELECT 'q1' AS source, a, b, c, d FROM t1
          UNION ALL
         SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2
       ) t
 GROUP BY t.a
 ORDER BY t.a

다음 각주를 시험해 볼 수 있습니다.

SELECT * from table1,table2 

더 복잡한 것:

SELECT table1.field1,table1.field2, table2.field3,table2.field8 from table1,table2 where table1.field2 = something and table2.field3 = somethingelse

질문이 이 경우 - ename, dname FROM emp, join을 사용하지 않고 dept를 선택합니다.

그러면 이렇게...

SELECT ename, (SELECT dname 
FROM dept
WHERE dept.deptno=emp.deptno)dname
FROM EMP

출력:

ENAME      DNAME
---------- --------------
SMITH      RESEARCH
ALLEN      SALES
WARD       SALES
JONES      RESEARCH
MARTIN     SALES
BLAKE      SALES
CLARK      ACCOUNTING
SCOTT      RESEARCH
KING       ACCOUNTING
TURNER     SALES
ADAMS      RESEARCH

ENAME      DNAME
---------- --------------
JAMES      SALES
FORD       RESEARCH
MILLER     ACCOUNTING

14 rows selected.

이거 드셔보세요

 SELECT t1.*,t2.* FROM t1,t2

표 1에서 *를 선택합니다. UNION 선택 * 표 2에서

Union은 컬럼이 아닌 행 단위로 데이터를 가져옵니다.따라서 당신이 관계도 없고 조인도 없는 두 개의 다른 테이블에서 컬럼 데이터를 가져오려는 나와 같은 경우.
내 경우 ID별로 주 이름과 국가 이름을 가져옵니다.두 개의 쿼리를 작성하는 대신 이 방법을 사용할 수 있습니다.

select 
   (
   select s.state_name from state s where s.state_id=3
   ) statename,
   (
   select c.description from country c where c.id=5
   ) countryname
   from dual;   

여기서 dual은 단일 컬럼이 있는 더미 테이블입니다.표만 표시하면 됩니다.

이름으로 '테스트'를 선택하고(id=1인 직원 이름 선택), 주소로(id=2인 주소에서 이름 선택),

에는 두 표가 합니다.SMPPMsgLog ★★★★★★★★★★★★★★★★★」SMSService column with with with 。serviceid:

SELECT sp.SMS,ss.CMD 
FROM vas.SMPPMsgLog AS sp,vas.SMSService AS ss 
WHERE sp.serviceid=5431 
AND ss.ServiceID = 5431 
AND Receiver ="232700000" 
AND date(TimeStamp) <='2013-08-07' 
AND date(TimeStamp) >='2013-08-06' \G;

당신은 항상 나를 위해 이 일을 시도해 볼 수 있다.

query="SELECT * from tableX,tableY,table8";

언급URL : https://stackoverflow.com/questions/12095109/select-from-multiple-tables-without-a-join

반응형