Oracle Syntax Vs ANSI/ISO Syntax

مقايسه (Oracle Syntax(CONVENTIONAL با ANSI/ISO Syntax
.سال 1991 استاندارد شد ANSI/ISO SQL
اوراکل اپکس- ANSI SQL JON در اوراکل
در جاهاي مختلفي بيان كردند كه اوراكل پيشنهاد مي دهد كه از ANSI SQL استفاده نماييد  اين كاملا صحيح است ولي در خود شركت اوراكل در قسمت هاي مختلف از روش موجود (Existing Syntax) كه هست نيز استفاده مي كنند.
از لحاظ كارايي و Performance يكسان مي باشد.
هر كدام از نوع Syntaxها در بعضي از حالات گويا و راحتر مي باشد.
علامت (+) Outer joins در دستور اوراكل  استفاده مي شود.
اين امكان وجود دارد كه در هر نسخه از اوراكل يا انواع كانكشن هايي كه با ديتابيس اوراكل اتصال برقرار مي كند در بعضي از دو روش به خطا برخورد كنيد كه مسلما براي آنها Patch هايي توسط خود اوراكل ايجاد مي گردد.
حال استفاده از هر روش بصورت سليقه اي مي باشد.

براي بيان كردن مطلب، آنها را با مثال هاي ساده با هر دو روش نشان مي دهم.

**CROSS JOIN**


ANSI/ISO Syntax:
SELECT e.ename,
d.dname
FROM   emp e
CROSS JOIN dept d


Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d

**NATURAL JOIN**

ANSI/ISO Syntax:
فيلدهاي همنام رو براي پيوستن دو جدول با هم ، برابر هم قرار مي دهد. مجاز به استفاده از فيلدهاي  وابستگي جداول در شرط نمي باشيد

SELECT e.ename,
d.dname
FROM   emp e
NATURAL JOIN dept d

Existing Syntax:
معادل اين دستور وجود ندارد

**[INNER] JOIN … USING**

ANSI/ISO Syntax:
مجاز به استفاده از فيلدهاي  وابستگي جداول در شرط نمي باشيد


SELECT e.ename,
d.dname
FROM   emp e
JOIN dept d USING (deptno)

Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d
WHERE e.DEPTNO = d.DEPTNO

**[INNER] JOIN … ON**

ANSI/ISO Syntax:
SELECT e.ename,
d.dname
FROM   emp e
JOIN dept d ON e.deptno = d. deptno

Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d
WHERE e.DEPTNO = d.DEPTNO

**Multiple joins**

ANSI/ISO Syntax:
SELECT e.ename,
d.dname
FROM   emp e
JOIN dept d ON e.deptno = d. deptno
JOIN course c ON c.idcode = d. idcode


Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d, course c
WHERE e.DEPTNO = d.DEPTNO
AND    c.idcode = d.idcode

**{LEFT} [OUTER] JOIN**

ANSI/ISO Syntax:
SELECT e.ename,
d.dname
FROM   dept d
LEFT OUTER JOIN emp e ON d.deptno = e. deptno


Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d
WHERE d.DEPTNO(+) = e.DEPTNO

**{RIGHT} [OUTER] JOIN**

ANSI/ISO Syntax:
SELECT e.ename,
d.dname
FROM   emp e
RIGHT OUTER JOIN dept d ON e.deptno = d. deptno


Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d
WHERE d.DEPTNO = e.DEPTNO(+)

**{FULL} [OUTER] JOIN**

ANSI/ISO Syntax:
SELECT e.ename,
d.dname
FROM   emp e
FULL OUTER JOIN dept d ON e.deptno = d. deptno


Existing Syntax:
SELECT e.ename,
d.dname
FROM   emp e, dept d
WHERE  e.DEPTNO = d.DEPTNO(+)
UNION ALL
SELECT e.ename,
d.dname
FROM   emp e, dept d
WHERE  d.DEPTNO = e.DEPTNO(+)
AND     e.ENAME IS NULL

من خودم به شخصه از Oracle Sql استفاده می کنم. و خیلی وقت هست که قصد دارم در کارهایم از ANSI SQL نیز استفاده کنم. ولی خوب با اون روش عادت کردم . کمی سخت هست ولی به شخصه پیشنهاد می کنم که هر دو روش را باهم استفاده کنید. حال اوراکل یکی از دلایل اینکه پیشنهاد و توصیه می کند بخاطر استاندارد بودن ANSI SQL می باشد. نیز دلایل دیگری هست که نقل قول افراد حرفه ای و انجمن های بزرگی مانند Toad World می باشد که در زیر آنها را آورده ام. فقط به فارسی نگفتم چون کاملا واضح هستند.

  • Some problems cannot be answered/coded unless you use an ANSI JOIN.
  • Some things in ANSI JOIN are far superior to the non-ANSI alternative. FULL OUTTER JOIN, for example, requires two queries and UNION.
  • Once you get used to ANSI JOIN, the code is far easier to read, especially for long or complex queries.
  • Portable syntax will work on all other ANSI compliant databases, such as MS SQL Server, DB2, MySQL, PostgreSQL, et al
  • Since it’s the universally accepted standard, it’s the general target for all future database and third party vendors’ tools
  • The (+) operator can be applied only to a column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.
  • A condition containing the (+) operator cannot be combined with another condition using the OR logical operator
  • A condition cannot use the IN comparison condition to compare a column marked with the (+) operator with an expression.
  • A condition cannot compare any column marked with the (+) operator with a sub-query

حال به نکات بالا توجه کنید. چندین محدودیت در استفاده از (+) وجود دارد

 

در نتیجه:
it’s time to embrace the ANSI join syntax – and move into the 21st century

 

اميدوار هستم به دوستان كمك كرده باشد.

5/5 - (1 امتیاز)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.

keyboard_arrow_up
Oracle APEX Capabilities (OAC)