Oracle Syntax Vs ANSI/ISO Syntax

مقایسه (Oracle Syntax(CONVENTIONAL با ANSI/ISO Syntax
.سال ۱۹۹۱ استاندارد شد 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 امتیاز)

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

نشانی ایمیل شما منتشر نخواهد شد.

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

فهرست
Oracle APEX Capabilities (OAC)