SQL 쿼리에서 시작 전 선택이 왜 필요한가요? [닫은]


67

이것은 학교에서 나를 많이 괴롭힌 것입니다.

5 년 전, SQL을 배울 때 항상 원하는 필드를 지정한 다음 원하는 위치를 지정해야하는 이유가 항상 궁금했습니다.

내 생각에 따르면 다음과 같이 작성해야합니다.

From Employee e
Select e.Name

그렇다면 왜 표준이 다음을 말합니까?

Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is

SQL을 이해하는 데 몇 주가 걸렸으며 잘못된 순서의 요소가 많은 시간을 소비했다는 것을 알고 있습니다.

C #으로 작성하는 것과 같습니다.

string name = employee.Name;
var employee = this.GetEmployee();

따라서 역사적인 이유가 있다고 가정합니다. 왜?


64
OO 원숭이를 제자리에 두는 것이 DBA 음모입니다.
gbn

3
불행히도, SEQUEL을 소개논문 에서 관련 정보를 찾을 수 없으며 , 귀하의 질문에 대한 구체적인 인용이 있다고 생각하지 않습니다. gnat의 대답은 아마도 가장 좋은 설명 일 것입니다. 그러나 음모 이론을 무시하지는 않을 것입니다.
yannis

2
개인적으로, 나는 항상 Linq표준화 된 SQL구문 을 사용할 수 없었 으면 좋겠다 .
jp2code

4
SELECT 문의 절 은 작업 순서 가 아닙니다 .
S.Lott

8
좋은 질문. 다음은 INSERT 및 UPDATE 쿼리가 (field1, field2) VALUES (f1, f2)와 (field1 = f1, field2 = f2)와 같은 다른 구문 모델을 사용해야하는 이유입니다.
LarsTech

답변:


86

원래 SQL 언어는 속편 불렀다 서에 대한

  • 구조적 영어 쿼리 언어는
    온 강조와 함께 영어 로 철자 가까이 그것을 가정, 자연 언어.

이제 영어 문장을 철자 할 때이 두 문장의 철자를 쓰십시오.

  1. "직원 테이블에서 e 열 이름 선택"
  2. "열 e.Name from Employee 테이블 e"를 선택하십시오.

두 번째는 자연 영어에 가깝게 들리므로 표준으로 설정됩니다.

BTW 같은 추론 Where등-SQL 문은 의도적으로 자연어에 가깝게 들리도록 설계되었습니다.


7
물론 마이크로 소프트는 FROM이 먼저 나올 때 LINQ를 무시했다!

27
영어에는 많은 예견 논리가 있습니다 : /
Michael K

15
@Digger-의도적으로 설계된 것입니다. 선택이 처음이면 선택 부분에서 인텔리전스를 지원하지 못했습니다.
Scott Whitlock

6
@Digger : LINQ는 OO / 현대 Object.Method 또는 Object.Property를 따릅니다. SQL이 40 년 동안 존재 해 왔음을 잊지 마십시오
gbn

7
대신 english.stackexchange.com 에이 질문을 게시해야 합니다. :)
Cyril Gandon

37

SELECT 문에 SELECT가 필요하고 FROM이 필요하지 않기 때문입니다.

Select 'This String'

물론 SQL 문을 구문 분석하여 FROM 이후에 SELECT, DELETE, UPDATE를 찾을 수는 있지만 실제로 그렇게 큰 문제입니까?

이것은 모두 지능 이전에 수행되었다는 것을 기억하십시오. 그렇게 복잡하지 않습니다.

편집 : 아마도 SQL 인터프리터가 두 가지를 모두 수행 할 수있는 이유는 없습니다.


2
그러나 FROM myTable;대신에 쓸 수도 있습니다 FROM myTable SELECT *. 이것은 예전처럼 요구 사항처럼 보입니다.
user606723

13
그것이 필수라고해서 그것이 먼저 와야한다는 것을 의미하지는 않습니다.
LarsTech

8
ANSI SQL FROM에서는 필수입니다. 그렇기 때문에 많은 RDBMS에 테이블 DUAL 또는 다른 단일 행 더미 테이블이 있습니다.
Martin Smith

@LarsTech-먼저 올 필요는 없지만 복잡한 이유는 무엇입니까? 이를 select 문이라고하며 단어 select로 시작하면됩니다.
JeffO

3
@JeffO : 알았어요. SELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber.
Allon Guralnek

10

내가 참조하여 백업 할 수있는 답을 알고,하지만 난 추측이 있다면하지 마십시오 : SQL이있다 선언적 언어 와 같은 언어의 문을 설명 무엇 반대로 당신이하고 싶은 방법 당신이 그것을하고 싶습니다.

따라서 "FROM Y SELECT X"를 작성하는 것과 달리 "SELECT X FROM Y"는 "데이터베이스에서 무엇을 선택하고 싶은지"라고 대답하는보다 적절한 방법으로 들립니다.

또한 SQL에서 SELECT / UPDATE / INSERT는 수행하려는 작업 유형을 지정하며 FROM은 데이터베이스의 올바른 테이블에서 선택하는 데 도움이되는 절입니다. 다시, 무엇을 당신이 데이터를하고있는 것은보다 우선 어떻게 당신이 달성하려고 정확히.


1
+1 : 필수 또는 절차가 아닙니다. 조항의 순서는 단순히 영어와 적합합니다. 더 이상 없습니다.
S.Lott

ON과 WHERE는 select 문에서 절 순서의 중요성에 대한 더 나은 예일 수 있습니다.
JeffO

5

SQL은 영어 사용자를 대상으로하는 구조화 된 쿼리 언어입니다. SELECT, INSERT, UPDATE 및 DELETE는 필수 명령입니다. 영어 명령은 문장이나 문장을 시작합니다. 비교:

West young man go!

Go west young man!

SQL은 두 번째 (제한적) 형식을 따릅니다. 또한 네 개의 명령형 명령은 세 가지 형식이 크게 다릅니다. 치다:

FROM    employees a,
        accounts b
UPDATE  ...

또는

INTO    customers a
SELECT  ...

수행중인 조치를 알고 있으면 올바른 형식을 선택하는 것이 더 쉽습니다.

선택의 경우 원하는 속성을 결정한 다음 해당 속성이있는 테이블을 추가하십시오. 선택 기준을 작성할 때 테이블을 추가 할 수 있습니다. 기준을 동적으로 추가하는 경우 일반적으로 쿼리의 정적 부분 끝에서 수행 할 수 있습니다.


7
따라서 Yoda는 SQL 개발에 관여하지 않았습니다.
adam f

UPDATE를 가져 오는 것이 흥미 롭습니다. UPDATE ... FROM영어와 같은 구조가 아닙니다. IMO. 내가 더 나은 제안을하는 것은 아닙니다 ...
Robert Brown

의도는 전치사가 동사와 일치해야 함을 지적하는 것이 었습니다.
BillThor

3

SQL 문은 동사로 시작합니다. 그것은 언어 디자이너의 선택이었고 많은 프로그래밍 언어가 그렇게 작동합니다. 의미 상 다음과 같은 프로그래밍 언어를 보는 것은 드문 일이 아닙니다.

verb(noun, noun, noun);

또한, 예를 들어 SELECT 문을 제공하는 경우 제안 된 구문은 오브젝트를 명령문에서 가장 먼저 배치합니다. VSO (동사, 주제, 객체) 문장 순서 대신 OVS를 사용하면 자연 언어와 비교할 때 매우 이상합니다. SVO (예 : 영어), VSO (예 : 아랍어) 및 SOV (예 : 라틴어)는 사람의 말에 대한보다 합리적인 근사치입니다.


2

구문 분석, 특히 하위 쿼리와 같이 구문 분석이 크게 복잡해질 것이라고 생각합니다.

  FROM Foo f
  JOIN (FROM Bar b
        WHERE b.ID = f.ID
        UPDATE b
           SET b.Wibble = 1) x
    ON x.ID = f.ID
SELECT f.XYZ

이것을 파싱하는 것이 더 복잡합니다. FROM 절을 구문 분석 할 때까지 UPDATE가 구문 오류임을 알 수 없었으며 구문 분석기는 서브 쿼리를 구문 분석하고 있음을 알기 위해 충분한 컨텍스트를 기억해야합니다. 어쨌든 하위 쿼리에서는 업데이트가 허용되지 않는다고 생각하지만 (RETURNING 절이있을 수 있음) SELECT 문을 구문 분석 할 때까지 이것이 유효하지 않다고 말할 수 없습니다.

이것은 문법에 대해 적어도 k (lookahead)를 증가시키고 최악의 상황에서는 문맥에 민감하게 만듭니다. 그러나 이것은 대학에서 다소 어둡게 기억되는 컴파일러 디자인 논문의 범위를 확장하고 있습니다.


QUEL비슷한시기에 개발 된 위키 기사를 보면 구문 절의 순서가 OP가 제안하는 것입니다.
Martin Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.