0

관계형 대수학을 살펴보면서 "프로 시저 쿼리 언어"라는 용어를 발견했습니다. 절차 적 쿼리 언어와 비 절차 적 쿼리 언어의 차이점은 무엇입니까?절차 및 비 프로 시저 쿼리 언어 차이점

+1

프로 시저에는 루프, 팁, whiles이 있으며, 일반적으로 코드 행은 특정 순서로 차례로 실행됩니다. 비 절차 적 (데이터베이스를 말하는 경우이를 "집합 기반"이라고 부름) 절차 적 코드가 없으면 어떤 테이블과 조인 방법을 말해줍니다. 레코드 등을 반복하도록하는 프로그램을 작성하지 마십시오. –

+0

일부 견적을 제공해주십시오. 미적분이 아니라는 것을 대수학이 절차 적이라는 신화가 있기 때문입니다. 그게 무슨 뜻 이냐면 당신의 질문은 [duplicate] (https://stackoverflow.com/a/32841232/3404097)입니다. 반면에 루프와 트리를 걷는 것은 실제로 절차 적입니다. 그러나 이것은 모든 언어가 절차 적이라는 정상적인 의미입니다. 그래서 당신의 질문은 중복됩니다. [ask] & downvote 화살표 마우스 오버 텍스트를 읽으십시오. 인터넷 검색 및 참조 문헌에서 무엇을 말 했습니까? 약간의 노력/연구를 보여주십시오. – philipxy

답변

0

관계형 대수학과 같은 절차 형 쿼리 언어에서 조인, 교차 곱, 투영, 제한 등과 같은 관계 및 대수 이상으로 구성된 표현식으로 쿼리를 작성합니다. 수학적 표현식 (예 : 2/(3 + 4))과 마찬가지로, 연산자는 순서가 있습니다 (이 예에서는 나누기 전에 더하기가 수행됩니다). 그래서 예를 들어 두 개의 다른 투영 결과를 합친 다음 제약 등을 수행하십시오. 각 표현식이 해당 연산자를 수행하는 특정 순서를 설정하기 때문에 이와 같은 언어를 절차 적이라고합니다.

반대로 Relational Calculus와 같은 쿼리 언어와 잘 알려진 SQL SQL 쿼리 언어는 프로덕션을 수행하기 위해 수행 할 연산자 순서가 아닌 속성을 통해서만 예상 결과를 표현하기 때문에 "비 절차 적"이라고합니다 그것. 예를 들어, 같은 SQL 표현식 :

SELECT t1.b 
FROM t1 
WHERE t1.b > 10 

우리는 우리가 t1.b > 10가 true 인 관계 t1의 모든 튜플을 원하고, 이들로부터 우리가 t1.b의 값을 원하는를 지정하지만, 우리는 첫 번째 경우 지정하지 않은 투영을 수행 한 다음 제한 또는 제한을 먼저 수행 한 다음 프로젝션을 수행해야합니다. 많은 조인, 조건, 제한 등으로 복잡한 SQL 쿼리를 상상해보십시오. 쿼리를 실행하는 순서가 다양 할 수 있습니다 (실제로 쿼리 최적화 프로그램의 작업은 이러한 작업을 수행하기위한 효율적인 순서를 고안하는 것입니다. 이 선언적 쿼리를 절차 적 쿼리로 변환).

+0

대수학은 절차 상 아닙니다. 모든 관계 표현식은 어떤 미적분 표현식에 해당합니다. 따라서 미적분이 아닌 경우 절차가 될 수 없습니다. 표현식 트리마다 구현할 수도 있고 그렇지 않을 수도 있습니다. ('2/(3 + 4)'procedural ??) 대수적 절차 성은 명백한 것을 모르는 [신화] (https://stackoverflow.com/a/32841232/3404097)입니다.루핑 또는 재귀를 필요로하는 비 관계형 표기법은 절차 적입니다. 모든 연산식이 표준 연산자를 사용하여 트리를 따라 실행될 수있는 것은 아닙니다. 그러나 - 각각은 여전히 ​​대수 표현 (prenex normal form)에 해당합니다. – philipxy

1

관계형 대수 표기법은 절차 및 관계 계산법 표기법이 아니라는 것을 myth이 있습니다. 그러나 모든 관계 표현은 동일한 나무 구조를 가진 어떤 미적분 표현과 일치합니다. 따라서 미적분이 아닌 경우 절차가 될 수 없습니다. 표현식 트리마다 표기법으로 쿼리를 구현하거나 실행할 수 있습니다.

A (쿼리) 언어 은 루핑을 사용해야하거나 그렇지 않으면 상태에 의존 할 때 절차가입니다. 대안은 종종 선언적 또는 기능적이라고합니다.

데이터베이스를 업데이트하는 데이터베이스 표기법은 SQL을 비롯하여 절차 적입니다. 그러나 그것은 "질의하는"것이 아닙니다. 일반적으로 DBMS에는 SQL에 대한 확장 기능이있어 구현 개념 측면에서 쿼리 실행 및/또는 데이터 저장 순서를 부분적으로 제어 할 수 있습니다. 그건 절차가 없어요. 그러나 그것은 SQL이 아닙니다.