a쿼리검색 과정입니다 또는 데이터베이스에서 데이터를 검색하는 명령. SQL에서select명령은 쿼리를 지정하는 데 사용됩니다. 의 일반적인 구문select명령 이다
selectselect_listFromtable_expression[Sort_Specification]
다음 섹션에서는 SELECT의 세부 사항을 설명합니다
목록, 배트맨 토토 표현식 및 정렬 사양. 그만큼
가장 간단한 종류의 쿼리는 양식을 가지고 있습니다select * from table1;표 1이라는 배트맨 토토이 있다고 가정하면이 명령 표 1에서 모든 행과 모든 열을 검색합니다. (의 방법 검색은 클라이언트 응용 프로그램에 따라 다릅니다. 예를 들어,PSQL프로그램이 표시됩니다 Ascii-Art 배트맨 토토 화면에서 클라이언트 라이브러리가 제공됩니다 개별 행 및 열을 검색하는 기능.) 선택 목록 사양*| 배트맨 토토 표현식이 제공됩니다. 선택 목록도 선택할 수도 있습니다 사용 가능한 열의 하위 집합 또는 검색하기 전에 열; 보다섹션 2.2. 예를 들어, 표 1 인 경우 A, B 및 C (및 기타)라는 열이 있습니다. 다음 쿼리 :
a, b + c를 table1; 선택합니다.(B와 C가 숫자 데이터 유형이라고 가정).
From Table1특히 간단합니다 배트맨 토토 표현의 종류. 일반적으로 배트맨 토토 표현은 될 수 있습니다 기본 테이블, 조인 및 하위 쿼리의 복잡한 구성. 하지만 당신 또한 배트맨 토토 표현식을 완전히 생략하고 선택을 사용할 수 있습니다. 계산기로 명령 :
선택 3 * 4;선택 목록의 표현식이 더 유용합니다. 다양한 결과를 반환합니다. 예를 들어, 기능을 이것을 호출 할 수 있습니다 방법.
random (); 선택
a배트맨 토토 표현지정 a 테이블. 배트맨 토토 표현에는 송곳니가 포함되어 있습니다 선택적으로 그 뒤에있는 곳, 그룹에 의해, 그리고 조항이 있습니다. 사소한 배트맨 토토 표현식은 단순히 디스크의 테이블을 나타냅니다. 소위베이스 테이블이지만 더 복잡한 표현식을 사용할 수 있습니다. 기본 테이블을 다양한 방식으로 수정하거나 결합하려면
옵션은 어디에, 그 그룹에 의해, 그리고 조항을 배트맨 토토 표현식은 연속적인 파이프 라인을 지정합니다 The From에서 파생 된 테이블에서 수행 된 변환 절. 이 모든 것에 의해 생성되는 파생 테이블 변환은 출력을 계산하는 데 사용되는 입력 행을 제공합니다 열 값의 선택 목록에 지정된 행 표현.
From Clause는 하나 이상에서 테이블을 유래합니다. 쉼표로 구분 된 테이블 참조 목록에 제공된 테이블
Fromtable_reference[, table_reference[, ...]]
테이블 참조는 테이블 이름 또는 파생 된 테이블 일 수 있습니다.
하위 쿼리, 테이블 조인 또는 이들의 복잡한 조합으로. 만약에
하나 이상의 테이블 참조는 From Clause에 나열됩니다.
Cross가 결합하여 (아래 참조) 파생 된 테이블을 형성 할 수 있습니다.
Where, Group By 및
조항은 마지막으로 전체 배트맨 토토 표현식의 결과입니다.테이블 참조가 테이블의 이름을 지정할 때 테이블 상속 계층 구조의 수퍼 테이블, 테이블 참조는 그 테이블뿐만 아니라 모든 행을 생성합니다. 키워드가 이전에만 앞에 있지 않는 한, 미묘한 후계자 테이블 이름. 그러나 참조는 열만 생성합니다 이름이 지정된 테이블에 나타납니다 --- 추가 된 열 하위 테이블은 무시됩니다.
결합 된 테이블은 다른 두 가지에서 파생 된 테이블입니다 (Real 또는 파생) 특정 규칙에 따른 테이블 가입 유형. 내부, 외부 및 크로스 조인이 지원됩니다.
타입 조인
T1크로스 조인T2
각 행 조합에 대해T1andT2, 파생 된 배트맨 토토이 있습니다 모든 열로 구성된 행 포함T1T2. 테이블 인 경우 각각 N과 M 행이 있으면 결합 된 테이블이 n * m 줄이 있습니다. 크로스 조인은에 해당합니다.참으로 내부 조인.
팁 : FromT1크로스 조인T2is 동등한FromT1, T2.
T1[내부] | 왼쪽 | 오른쪽 | 가득한 [외부] joinT2onboolean_expression T1[내부] | 왼쪽 | 오른쪽 | 가득한 [외부] joinT2사용 ( 사용열 목록에 가입)T1천연 [내부] | 왼쪽 | 오른쪽 | 가득한 [외부] joinT2
단어내부and외부모두에게 선택 사항입니다 조인.내부is 기본;왼쪽, 오른쪽및Full외부 조인을 암시합니다.
the조건 조건is ON 또는 CLAUSE를 사용하거나 암시 적으로 자연스러운 단어. 조인 조건은 어느 것을 결정합니다 두 소스 테이블의 행은로 간주됩니다."매치", 설명 된 바와 같이 아래 세부 사항.
ON 절은 가장 일반적인 종류의 가입입니다. 조건 : 그것은 부울 가치 표현이 필요합니다 Where 절에서 사용되는 것과 동일한 종류. 한 쌍의 ON 표현식 인 경우 T1 및 T2의 행이 일치합니다. 그들을 위해 True로 평가합니다.
사용은 속기 표기법입니다 쉼표로 구분 된 열 이름 목록 결합 된 배트맨 토토은 공통적이어야하며 결합을 형성합니다. 조건 각 쌍의 평등을 지정합니다 열의. 또한, 결합 사용의 출력 각 동일 한 입력 쌍에 대해 하나의 열이 있습니다. 열, 다른 모든 열이 이어집니다 각 배트맨 토토. 따라서,사용 (A, B, 기음)와 동일합니다on (T1.A = t2.a 및 t1.b = t2.b 및 t1.c = t2.c)켜짐이 사용되면 두 가지가있을 것입니다. 결과에서 열 A, B 및 C 열이 사용되는 반면 각각 중 하나만있을 것입니다.
마지막으로, 자연은 다음을 사용하는 속기 형태입니다 정확히 해당 열로 구성된 사용 목록을 형성합니다 두 입력 테이블 모두에 나타나는 이름. 와 마찬가지로 사용하면이 열은 출력에서 한 번만 나타납니다 테이블.
가능한 유자격 가입 유형은 다음과 같습니다.
T1의 각 행 R1에 대해 결합 된 테이블은 T2의 각 행에 대한 행 R1과 조건에 가입하십시오.
먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2에 행이있는 상태, 결합 된 행은 T2 열에서 널 값으로 반환됩니다. 따라서 결합 된 테이블은 무조건적으로 가지고 있습니다 T1의 각 행 당 최소 한 줄.
먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T2의 각 행 T1에 행이있는 상태, 결합 된 행은 T1의 열에서 널 값으로 반환되었습니다. 이것은 왼쪽 조인의 대화입니다. 결과 테이블은 무조건적으로 각각에 행을 갖습니다 T2에서 행
먼저 내부 조인이 수행됩니다. 그런 다음 조인을 만족하지 않는 T1의 각 행 T2에 행이있는 상태, 결합 된 행은 T2 열에서 널 값으로 반환됩니다. 또한 만족하지 않는 각 T2 행에 대해 T1의 모든 행과의 조인 조건, A 조인 T1의 열에 널 값이있는 행 반품.
모든 유형의 결합은 함께 연결되거나 중첩 될 수 있습니다. 둘 중 하나 또는 둘 다T1andT2결합 된 테이블이있을 수 있습니다. 괄호는 조인 조항 주위에 사용될 수 있습니다. 주문에 가입하십시오. 괄호가 없으면 조항에 가입하십시오 왼쪽에서 오른쪽으로.
파생 된 테이블을 지정하는 하위 쿼리는 동봉되어야합니다 괄호 안에필수이름이 지정됩니다 AS 절을 사용합니다. (보다섹션 2.1.1.3.)
from (select * from table1) as alias_name
이 예제는와 같습니다.Alias_name as table1. 더 흥미로운 경우 평범한 결합으로 축소 할 수 없습니다. 하위 퀘스트가 발생하면 발생합니다. 그룹화 또는 집계가 포함됩니다.
배트맨 토토과 복합체에 임시 이름이 제공 될 수 있습니다. 파생에 대한 참조에 사용되는 배트맨 토토 참조 추가 처리의 배트맨 토토. 이것을 A라고합니다.배트맨 토토 별칭.
Fromtable_referenceasalias여기,별명일반 식별자. 별칭은 테이블의 새 이름이됩니다 현재 쿼리에 대한 참조 - 더 이상 불가능합니다. 원래 이름으로 테이블을 참조하십시오. 따라서
선택 * My_table에서 my_table.a 5;에서 my_table에서 my_table에서 my_table에서 선택하십시오.유효한 SQL 구문이 아닙니다. 실제로 일어날 일 (이것은 APostgres연장 표준)은 암시 적 테이블 참조가에서 추가된다는 것입니다. 조항, 따라서 쿼리가로 작성된 것처럼 처리됩니다.
선택 * My_table에서 my_table as where my_table.a 5;에서 my_table에서 my_table을 선택하십시오.테이블 별명은 주로 표기 적 편의를위한 것이지만 IT입니다 테이블에 결합 할 때 사용해야합니다 (예 :
선택 *에서 my_table에서 크로스 가입 my_table as b ...테이블 참조가있는 경우 별칭이 필요합니다. 하위 쿼리.
괄호는 모호성을 해결하는 데 사용됩니다. 그만큼 다음은 별명을 할당합니다B와 달리 조인의 결과에 이전 예 :
선택 *에서 (my_table as a cross join my_table) b ...
Fromtable_reference 별칭이 양식은 이전에 처리 된 것과 같습니다. 그만큼as키워드는 소음입니다.
table_reference[as]alias(컬럼 1[, 컬럼 2[, ...]])이 형식에서 설명 된대로 테이블의 이름을 바꾸는 것 외에도 위의 기둥은 또한 임시 이름이 주어집니다. 주변 쿼리에서 사용하십시오. 더 적은 열 별칭이 지정된 경우 실제 테이블에 열이있는 것보다 나머지 열에는 이름이 바뀌었다. 이 구문은 특히자가 요인에 유용합니다 하위 쿼리.
ALIA가 조인 절의 출력에 적용되는 경우, 이러한 형식을 사용하여 별명은 원본을 숨 깁니다. 가입 내 이름. 예를 들어,
선택 a.* my_table에서 a as your_table as b on ...유효한 SQL이지만
선택 a.*에서 (my_table as as your_table as b on ...) as c유효하지 않음 : 테이블 별명 A는 별명 C.
T1 내부 join t2를 사용하여 (c) T1 왼쪽 외부 OUTER 조인 T2를 사용하여 (C) DT1로 (T1 오른쪽 외부 OUT T2 ON (T1C1 = T2C1))에서) (T1 Full Outer Join T2를 사용하여 (C)) DT1 (DT1C1, DT1C2) T1 천연 내부 결합 T2에서 T1 Natural Left Outer Join T2에서 T1 Natural Right OUTER 조인 T2에서 T1 Natural Full Outer Join T2에서 (T1에서 * 선택) DT1 크로스 조인 T2, T3 (T1에서 선택 *) DT1, T2, T3위는 결합 된 테이블과 복잡한 파생의 일부 예입니다. 테이블. AS 조항이 파생 된 테이블의 이름을 바꾸거나 이름을 지정하는 방법에 주목하십시오. 그리고 옵션 쉼표로 구분 된 열 이름 목록이 다음은 열 이름을 바꿉니다. 조항에서 마지막 두 개는 T1, T2 및 T3에서 동일한 파생 테이블. AS 키워드는 생략되었습니다 서브 쿼리를 DT1로 명명 할 때. 외부 및 내부 키워드입니다 생략 할 수있는 소음.
where 절의 구문
여기서search_condition어디search_condition정의 된 가치 표현PostgreSQL : 문서 : 7.1 : 값 사설 토토 사이트식유형의 값을 반환합니다부울.
FROM 절을 처리 한 후 각 행 파생 테이블의 검색 조건에 대해 확인됩니다. 조건의 결과가 참이면 행은 출력 테이블, 그렇지 않으면 (즉, 결과가 False 인 경우 또는 null) 폐기됩니다. 검색 조건은 일반적으로 참조는 적어도 절에서; 이것은 필요하지 않으며 그렇지 않으면 어디에 있습니다 조항은 쓸모가 없습니다.
참고 :가입을 구현하기 전에 구문, 가입 조건을 내부 조항에 가입. 예를 들어,이 테이블 표현은 동일합니다 :
a, b에서 a.id = b.id 및 b.val 5에서.andA에서 B On (a.id = b.id)에서 b b.val 5에서 b on (a.id = b.id)또는 아마도자연 조인 B에서 B B.Val 5에서당신이 사용하는 이들 중 어느 것이 주로 스타일의 문제입니다. 그만큼 From Clause에서 구문에 가입하는 것은 아마도 다른 사람에게는 휴대가되지 않을 것입니다. 제품. 외부 조인의 경우 어쨌든 선택의 여지가 없습니다. From Clause에서 수행됩니다. OUTER JOIN 's ON ON/사용 절은입니다.아님위치 조건에 해당합니다. 행 추가를 결정하기 때문에 (타의 추종없는 입력을 위해 행)뿐만 아니라 최종 결과에서 행을 제거합니다.
fdt 어디에서 C1 5 FDT에서 어디에서 (1, 2, 3)의 C1 FDT에서 어디에서 C1 In (T2에서 C1 선택) FDT에서 어디에서 C1 In (T2에서 C3를 선택하여 C2 = Fdt.c1 + 10) FDT에서 어디에서 C1 사이 (T2에서 C3를 선택하여 C2 = Fdt.c1 + 10) 및 100 FDT에서 어디에서 존재합니다 (T2에서 C1을 선택하여 C2 FDT.C1)
위의 예에서 FDT는 절에서. 검색 조건을 충족하지 않는 행 WHER 절은 FDT에서 제거됩니다. 사용을 주목하십시오 값 표현식으로 스칼라 하위 쿼리. 다른 것과 마찬가지로 쿼리, 하위 쿼리는 복잡한 배트맨 토토 표현식을 사용할 수 있습니다. 하위 쿼리에서 FDT가 어떻게 참조되는지 주목하십시오. 적격 C1 fdt.c1은 C1이 서브 쿼리의 파생 입력 테이블의 열. 자격 열 이름은 필요하지 않은 경우에도 명확성을 추가합니다. 이것 외부 쿼리의 열명 범위가 어떻게 확장되는지 보여줍니다. 내부 쿼리로.
WHERE 필터를 전달한 후 파생 된 입력 배트맨 토토 그룹별로 그룹을 사용하여 그룹화 될 수 있으며 HADIE 조항을 사용하여 그룹 행 제거.
selectselect_listFrom ... [어디서 ...] 그룹 byGrouping_Column_Reference[, Grouping_Column_Reference] ...
그룹 별 그룹은 행을 함께 그룹화하는 데 사용됩니다. 나열된 모든 열에서 동일한 값을 공유하는 배트맨 토토. 열이 나열된 순서는 중요하지 않습니다 ( 절에 의한 명령에 반대). 목적은 각각을 줄이는 것입니다 공통 값을 하나의 그룹 행에 공유하는 행 그룹 그룹의 모든 행을 대표합니다. 이것은 끝났습니다 출력의 중복성을 제거하거나 집계를 얻습니다 이 그룹에 적용됩니다.
배트맨 토토이 그룹화되면 집계를 제외하고는 그룹화를 참조 할 수 없습니다 그 열의 특정 값은 표현입니다 모호한 - 그룹의 어떤 행에서 왔습니까? 그만큼 그룹화 된 열은 선택 목록 열에서 참조 할 수 있습니다 표현은 그룹당 알려진 상수 가치를 가지고 있기 때문에. 그룹화되지 않은 열의 집계 함수는 값을 제공합니다 그것은 전체 배트맨 토토이 아닌 그룹의 행에 걸쳐 있습니다. 을 위한 인스턴스, aSum (Sales)테이블에 제품 코드별로 그룹화 된 각각의 총 판매량을 제공합니다. 제품, 모든 제품의 총 판매가 아닙니다. 집계 그룹화되지 않은 열에서 계산 된 것은 The를 대표합니다 그룹, 그룹화되지 않은 열의 개별 값은 다음과 같습니다 아니다.
예 :
PID, P.Name, (sum (s.units) * P.Price)을 판매로 선택하십시오 제품 P에서 왼쪽 왼쪽에 가입 판매 (PID) PID, P.Name, P.Price;의 그룹이 예에서는 Columns PID, P.Name 및 P.Price가 쿼리에서 참조되므로 절에 의한 그룹에서 목록을 선택하십시오. 열 S.units는 그룹에있을 필요가 없습니다. 집계 표현식에서만 사용되므로 목록 (sum ()33077_33227
엄격한 SQL에서 그룹 별 그룹은 소스 테이블이지만 Postgres는 이것을 확장하여 그룹을 허용합니다. 쿼리 선택 목록에서 선택된 열별로 그룹화합니다. 그룹화 간단한 열 이름 대신 가치 표현식으로 허용된.
selectselect_listFrom ... [어디서 ...] 그룹에 의해 ...boolean_expression
group by clause를 사용하여 테이블을 그룹화 한 경우
특정 그룹 만 관심이 있고, 조항을 사용할 수 있으며,
그룹화 된 테이블에서 그룹을 제거하기 위해 WHER 절과 마찬가지로.
Postgres는 그룹없이 사용되는 조항을
이 경우는 다른 곳에서 조항처럼 작동하지만 요점은
그런 식으로 사용하는 것은 명확하지 않습니다. 경험의 좋은 규칙은 a
조건은 집계 결과를 참조해야합니다
기능. 집계를 포함하지 않는 제한은 더
WHERE 절에 효율적으로 표현.예 :
"제품"으로 PID를 선택하십시오. P.Name "5000 이상", (sum (s.units) * (P.Price -P.Cost)) "지난 달 이익"으로 제품 P에서 왼쪽 왼쪽에 가입 판매 (PID) 여기서 s.date current_date- 간격 '4 주' PID, P.Name, P.Price, P.Cost의 그룹 합계 (p.price * s.units) 5000;위의 예에서 Where 절은 a에 의해 행을 선택합니다. 그룹화되지 않은 열은 총 총 매출이 5000 이상인 그룹에 대한 생산량