문제

공식적으로 구조화된 모든 정보 집합에서는 처음부터 끝까지 읽기 시작하거나 때로는 끝에서 시작까지 읽기 시작합니다(예: 거리 주소). 그러나 SQL에서는 특히 SELECT 쿼리를 올바르게 이해하기 위해 이는 FROM 절의 중간에서 시작해야 한다는 의미입니다.이로 인해 긴 쿼리를 읽기가 매우 어려워질 수 있으며, 특히 중첩된 SELECT 쿼리가 포함된 경우 더욱 그렇습니다.

일반적으로 프로그래밍에서는 뭔가 말이 안 되는 것처럼 보일 때 그 뒤에는 역사적인 이유가 있습니다.FROM 대신 SELECT로 시작하는 것은 의미가 없습니다.왜 그렇게 되었는지 아는 사람 있나요?

도움이 되었습니까?

해결책

그만큼 SQL Wikipedia 항목 몇 가지 역사를 간략하게 설명합니다.

1970년대 IBM San Jose Research Laboratory의 한 그룹은 Edgar F.가 도입한 모델을 기반으로 System R 관계형 데이터베이스 관리 시스템을 개발했습니다.Codd는 자신의 영향력 있는 논문 "대규모 공유 데이터 뱅크를 위한 데이터의 관계형 모델"에서 이렇게 말했습니다.도널드 D.체임벌린과 레이먼드 F.Boyce of IBM은 이후에 구조화된 영어 쿼리 언어(SEQUEL) System R에 저장된 데이터를 조작하고 관리합니다."SEQUEL"은 영국에 본사를 둔 Hawker Siddeley 항공기 회사의 상표였기 때문에 약어 SEQUEL은 나중에 SQL로 변경되었습니다.

원래 이름이 명시적으로 언급됨 영어, 구문을 설명합니다.

조금 더 깊이 파고들어가면, 흐름매틱 프로그래밍 언어.

원래 B-0(비즈니스 언어 버전 0)으로 알려진 FLOW-MATIC, 아마도 영어와 유사한 최초의 데이터 처리 언어일 것입니다..이는 Grace Hopper에 의해 발명 및 지정되었으며 1955년 Remington Rand에서 UNIVAC I을 위한 상용 변형 개발이 시작되었습니다.1958년에는 컴파일러와 해당 문서가 일반에 공개되어 상업적으로 사용되었습니다.

FLOW-MATIC은 다음의 영감을 주었습니다. 일반적인 비즈니스 지향 언어, 여전히 활발하게 사용되고 있는 가장 오래된 프로그래밍 언어 중 하나입니다.그 정신을 이어받아, 계속 영어와 유사한 구문으로 디자인되었습니다(1950년대와 1960년대에 비해 1970년대는 현대적입니다).

관점에서 보면 "현대" 프로그래밍 시스템은 여전히 ​​낡은 아이디어를 사용하여 데이터베이스에 액세스합니다.

MULTIPLY PRICE BY QUANTITY GIVING COST.

다른 팁

SQL 문이 구성되는 방식은 영어 문장이 구성되는 한 논리적으로 의미가 있다고 생각합니다. 원래

I WANT THIS
FROM HERE
WHERE WHAT I WANT MEETS THESE CRITERIA

적어도 영어로 말하기에는 의미가 없다고 생각합니다.

FROM HERE
I WANT THIS
WHERE WHAT I WANT MEETS THESE CRITERIA  

나는 동의하지 않아야한다. SQL 문법은 내부 아웃이 아닙니다.

로부터 첫 번째 모습 쿼리가 데이터를 선택, 삽입, 업데이트 또는 삭제하는지 여부를 알 수 있습니다 (나머지 SQL, 예를 들어 DDL, 의도적으로 생략).


Select 문으로 돌아 가기 혼란 : SQL의 목표는 다음과 같습니다. 선언. 그것은 당신이 원하는 것을 표현하고 원하는 방식이 아니라는 것을 의미합니다. 그래서 그것은 모든 의미가 있습니다 첫 번째 당신이 원하는 것을 진술하십시오 (속성 목록 고르다ing) 및 그 다음에 DBMS에 어디에서 찾아야하는지에 대한 추가 정보를 제공하십시오.

Where 절을 마지막에 배치하는 것은 큰 의미가 있습니다. 위쪽에 넓은 깔때기를 상상해보십시오. 명세서의 끝에 WHER 절을 추가하면 결과 데이터의 양을 질식하게됩니다. 하단에있는 다른 곳에서는 쿼리에 제한을 적용하려면 개발자가 머리를 돌려야합니다.


끝에있는 절로 주문 : 데이터가 깔때기를 통과하면 정렬하십시오.

조인 (조인 기준)은 실제로 From Clause에 속합니다.

그룹화 : 기본적으로 다른 깔때기에 들어가기 전에 깔때기를 통해 데이터를 실행합니다.

SQL sytax는 달콤합니다. 그것에 대해 안에는 아무것도 없습니다. 어쩌면 그것이 수십 년이 지난 후에도 SQL이 인기있는 이유 일 것입니다. 이해하기 쉽고 이해하기가 쉽습니다. (한 번은 7 페이지 (A4 사이즈) SQL 문에 직면했지만 머리를 잡는 데 꽤 오랜 시간이 걸렸습니다.)

영어처럼 설계되었습니다. 나는 그것이 주된 이유라고 생각합니다.

참고로, LINQ의 초기 미리보기가 직접 모델링 된 것을 기억합니다.select ... from ...). 이것은 나중에 미리보기에서 더 많은 프로그래밍 언어로 변경되었습니다 (스코프가 하향화되도록). Anders Hejlsberg는 SQL (Intellisense가 더 어렵고 C# 스코프 규칙과 일치하지 않음)에 대한이 이상한 사실을 그들이이 결정을 내린 이유로 구체적으로 언급했습니다.

어쨌든, 좋든 나쁘 든, 그것은 그것이 무엇인지, 그리고 아무것도 바꾸기에는 너무 늦었습니다.

SQL의 조항의 순서는 절대적으로 논리적입니다. SQL은 자신이 원하는 것을 선언하는 선언 언어이며 시스템은 자신을 위해 최선을 다하는 방법을 알아냅니다. 첫 번째 절은 결과 테이블에 원하는 열을 나열하는 선택 절입니다. 이것이 쿼리의 주요 목적입니다. 결과가 원하는 것을 언급 한 결과, 데이터가 나오는 다음 주에 있습니다. WHERE 절은 반환되는 데이터 금액을 제한합니다. 데이터가 어디에서 왔는지 알지 않는 한 데이터를 제한하는 방법에 대해 생각할 필요는 없으므로 From Clause 이어집니다. Clause By Clause는 Select 절에서 집계 연산자와 함께 작동하며 From Clause 이후 어디서나 갈 수 있지만 필터링 된 데이터의 집계에 대해 생각하는 것이 좋습니다. 조항은 절에 의해 그룹을 따라 와야합니다. 순서 별 절은 데이터가 어떻게 제시되는지에 관한 것이며 선택 후 어디서나 갈 수 있습니다.

모든 진술이 동사로 시작하도록하는 SQL의 나머지 SQL 구문과 일치합니다 (CREATE, DROP, UPDATE, 등.).

열 목록을 먼저 갖는 주요 단점은 자동 완성에 불편하다는 것입니다 (Hejlsberg가 언급했듯이). 1970 년대에 구문이 설계되었을 때 문제가되지 않았습니다.

우리는 다음과 같은 구문을 가진 두 세계의 최고를 가질 수있었습니다. SELECT FROM SomeTable: ColumnA, ColumnB, 그러나 지금 바꾸기에는 너무 늦었습니다.

어쨌든, SQL SELECT 명세서 명령은 독특하지 않습니다. Python 목록 이해력과 정확히 일치합니다.

[(rec.a, rec.b) for rec in data where rec.a > 0]

언어의 역사를 제쳐두고 (매혹적이지만) 나는 당신이 놓친 것이 SQL이 시스템에 무엇을 해야하는지, 무엇을 원하는지만큼 어떤 결과를 얻는 지 (그리고 그것을 수행하는 방법을 알아 낸 것)를 알려주는 것이 아니라는 것입니다.

'그 선반으로 가서 모자 밴드, 블루 모자로 모자를 집어 들고 녹색, 빨간색으로 데려오고'라고 말합니다. 어떻게 당신이 원하는 것을 할 수 있습니다. 이것의 프로그래머는 생각합니다 우리가 노동자가 매우 어리 석고 미세한 상세한 지침이 필요하다고 가정합니다.

SQL은 먼저 최종 결과, 원하는 데이터, 열 순서 등으로 시작합니다. 보고서를 작성하는 사람의 관점입니다. "나는 FirstName, LastName, 그리고 나이, ....."를 원합니다. "그것은 모든 요청을 할 목적입니다. 그래서 그것은 당신이 원하는 결과의 형식으로 시작합니다. 그런 다음 데이터를 찾을 것으로 예상되는 위치, 데이터를 찾는 기준, 제시 순서 등으로 이동합니다.

따라서 SQL은 작업자가 원하는 일을 세부적으로 지정하는 대안으로 시스템이 그렇게하는 방법을 알고 있으며 원하는 것을 더 많이 중심으로 가정합니다.

따라서 노동자에게 여기로 가라고 말하는 대신, 이것을 가져 와서 거기로 가져 가십시오. "나는"모자를 원한다 "고 말하는 것과 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top