مقایسه (Oracle Syntax(CONVENTIONAL با ANSI/ISO Syntax
.سال ۱۹۹۱ استاندارد شد ANSI/ISO SQL
در جاهای مختلفی بیان کردند که اوراکل پیشنهاد می دهد که از 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
امیدوار هستم به دوستان کمک کرده باشد.
جستجو
مطالب اخیر
نظرات اخیر
- مهرسا سعادت در نقشه راه اوراکل APEX برای نسخه بعدی
- سعید حسن پور در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- حسین ابراهیم زاده در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- مهدی جوینی در رفع مشکل Persian Date Picker برای اوراکل ایپکس(اپکس) ۲۱
- محمد در نصب و راه اندازی (Standalone) اوراکل APEX
بایگانی
- اردیبهشت ۱۴۰۱ (۱)
- مرداد ۱۴۰۰ (۱)
- شهریور ۱۳۹۹ (۱)
- بهمن ۱۳۹۸ (۱)
- دی ۱۳۹۸ (۶)
- آذر ۱۳۹۸ (۲۰)
- آبان ۱۳۹۸ (۱۶)
- مهر ۱۳۹۸ (۲۲)
- شهریور ۱۳۹۸ (۲)
- مرداد ۱۳۹۸ (۷)
- تیر ۱۳۹۸ (۹)
- فروردین ۱۳۹۸ (۳)