2011-10-26 3 views
1

나는 무료 스탠포드 데이터베이스 과정을 온라인으로 수강하고 있습니다. DB 경험이 없지만 오랜 세월의 OS 프로그래밍 경험이 있습니다. 일반적으로 특정 알고리즘에 대한 의사 코드를 작성하기 전에 플로우 차트를 작성하거나 의사 코드를 작성합니다. 이 기술이 흐름도 또는 의사 코드에서 SQL 문으로 이동하는 데 사용될 수 있는지 궁금합니다.의사 코드를 SQL 문으로 변환하는 방법은 무엇입니까?

집합을 반복하는 루프가 WHERE 절과 일치합니까? 이것은 대부분 (?) 또는 항상 (?) 사실입니까?

이중 중첩 루프를 SQL에 어떻게 매핑합니까?

+1

기본 SQL은 절차 적 이진 않습니다. 루프에 대한 개념이 없으며 동등한 것도 없습니다. 따라서 이중 중첩 루프가 매핑되는 것에 대해 이야기하는 것은 실제로 의미가 없습니다. –

답변

2

SQL은 집합 기반 논리 (관계형 대수/미적분)를 사용하지만 대부분의 프로그래밍 언어는 명령형/절차 형 (예 : C#, Java 등)입니다.

집합 기반 논리 의사 코드를 작성하는 경우 명령형 의사 코드는 C#으로 변환해야하므로 SQL로 변환하는 것이 간단해야합니다.

세트 기반의 로직 의사 코드의 예는 다음과 같이 수 있습니다 :

1.Join book stores and titles over the BookstoreID. 
2.Restrict the result of that join to tuples for the book Some Sample Book. 
3.Project the result of that restriction over StoreName and StorePhone. 

당신이 (또는 의사 코드의 C#으로 설정 기반) 그건 SQL에 필수적 의사 코드를 변환하려는 경우 훨씬 더 고통 스러울 것입니다.

+1

나는 그것이 고통스러운 것 이상이라고 주장한다. 나는 그것이 의미가 없다고 말하고 싶다. –

+0

글쎄, 만약 당신이 C#으로 변환하는 LINQ 연산자를 사용할 수있는 설정 기반 의사 코드가 있다고 생각합니다. 그러나 명령형 의사 코드를 SQL로 변환하는 것은 의미가 없다는 것에 동의합니다. 당신은 set-based 알고리즘을 가졌거나 그렇지 않다. SQL을 사용해서는 안된다. –

0

Dylan은 SQL이 세트 기반 논리를 위해 설계되었다고 전했습니다. 그러나 실제 상황에서는 종종 이러한 세트를 반복 할 수 있습니다.

기본적으로 대상 결과 집합을 임시 테이블에 저장합니다. 그런 다음 필요한 모든 프로세스를 수행하는 임시 테이블의 각 레코드를 반복합니다.

작업이 끝나면 임시 테이블을 삭제하여 정리합니다.

일반 프로그래밍 언어 (파스칼, C 등)와 같이 간단하지 않습니다.

+0

enh ... SQL (OP의 의도)을 배우거나 SQL의 힘을 활용할 수는 있지만 가능하면 루프 된 코드를 사용하지 마십시오. 그렇지 않으면, 커서가 평범한 SQL을지지하는 버팀대가 될 수 있습니다. –

관련 문제