13.2.10.1 스칼라 피연산자로 서브 쿼리
가장 간단한 형태의 서브 쿼리는 단일 값을 반환 스칼라 서브 쿼리입니다. 스칼라 서브 쿼리는 간단한 피연산자이기 때문에 단일 컬럼 값 또는 리터럴이 정당 곳이면 거의 어디에서나 사용할 수 있으며, 데이터 유형, 길이, NULL
할 수있는 표시 등의 모든 피연산자가 가지고 있는 특성을 가진 것을 기대할 수 있습니다. 예 :
CREATE TABLE t1 (s1 INT, s2 CHAR (5) NOT NULL); INSERT INTO t1 VALUES (100, 'abcde'); SELECT (SELECT s2 FROM t1);
이 SELECT
내의 서브 쿼리는 CHAR
데이터 유형 5의 길이, CREATE TABLE
시점에서 유효한 기본에 동일한 캐릭터 셋과 콜레 션 및 컬럼의 값을 NULL
할 수있는 표시를 가진 단일 값 ( 'abcde'
)을 반환합니다. 서브 쿼리 결과가 비어 있으면 그 결과는 NULL
이되기 때문에 스칼라 서브 쿼리에 의해 선택된 값 NULL 가능성은 복사되지 않습니다. 지금 나타낸 서브 쿼리에서 t1
이 비어있을 경우, s2
가 NOT NULL
임에도 불구하고 그 결과는 NULL
이됩니다.
스칼라 서브 쿼리를 사용할 수없는 상황이 일부 존재합니다. 문에서 리터럴 값 만 허용되는 경우 하위 쿼리를 사용할 수 없습니다. 예를 들어, LIMIT
리터럴 정수의 인수가 필요하며, LOAD DATA INFILE
리터럴 문자열의 파일 이름이 필요합니다. 서브 쿼리를 사용하여 이러한 값을 지정할 수 없습니다.
다음의 각 섹션에서 다소 간소 한 구조 구문 (SELECT column1 FROM t1)
가 포함 된 예를 볼 때 훨씬 다양하며 복잡한 구조 구문을 포함한 자신의 코드가 있다고 생각 바랍니다.
다음 두 테이블을 만들려고합니다.
CREATE TABLE t1 (s1 INT); INSERT INTO t1 VALUES (1); CREATE TABLE t2 (s1 INT); INSERT INTO t2 VALUES (2);
다음은 SELECT
를 실행합니다.
SELECT (SELECT s1 FROM t2) FROM t1;
t2
는 2
의 값을 가지는 컬럼 s1
이 포함 된 행이 존재하기 때문에 그 결과는 2
가됩니다.
스칼라 서브 쿼리 표현식의 일부가 될 수 있지만, 그 서브 쿼리가 함수에 인수를 제공하는 피연산자 인 경우에도 괄호를 잊지 마세요. 예 :
SELECT UPPER ((SELECT s1 FROM t1)) FROM t2;