الانتقال إلى المحتوى

شرح بالتفصيل للأمر SELECT مع بعض الدوال الهامة


الماضي

Recommended Posts

بسم الله الرحمن الرحيم



السلام عليكم ورحمة الله وبركاته،،,
كيف الحال اخواني و اخواتي في المنتدى حبيت ابداء بعض الدروس في SQL وهيء للمبتدئين فيها وان شاء الله تحوز على رضاكم وما نريد الا الدعاء و بسم الله نبداء:


المحاضرة الأولى


اختيار جدول باستخدام جملة SELECT

SQL> select * from emp;


EMPNO 	NAME      JOB              MGR 	HIREDATE       SAL      COMM   DEPTNO                     
-----------        ----------     ---------         ---------         ------------------     ------       ----------    ------------        
    7369 SMITH      CLERK             7902 	17/12/80      	 800                  		20                     
    7499 ALLEN      SALESMAN    7698 	20/02/81      	1600       	300        	30                     
    7521 WARD       SALESMAN    7698 	22/02/81      	1250       	500        	30                     
    7566 JONES      MANAGER      7839 	02/04/81      	2975                  		20                     
    7654 MARTIN SALESMAN    7698 	28/09/81      	1250      	1400        	30                     
    7698 BLAKE      MANAGER      7839 	01/05/81      	2850                  		30                     
    7782 CLARK      MANAGER     7839 	09/06/81      	2450                  		10                     
    7788 SCOTT      ANALYST        7566 	19/04/87      	3000                  		20                     
    7839 KING          PRESIDENT           		17/11/81      	5000                  		10                     
    7844 TURNER    SALESMAN     7698 	08/09/81      	1500         	0        		30                     
    7876 ADAMS      CLERK             7788 	23/05/87      	1100                  		20                     
    7900 JAMES       CLERK             7698 	03/12/81       	950                  		30                     
    7902 FORD         ANALYST       7566 	03/12/81      	3000                  		20                     
    7934 MILLER    CLERK            7782 	23/01/82      	1300                  		10                     
تم اختيار 14 صف



اختيار عمود باستخدام جملة SELECT

SQL> select ename from emp;



ENAME                                                                                               
------ 
SMITH                                                                                               
ALLEN                                                                                               
WARD                                                                                                
JONES                                                                                               
MARTIN BLAKE                                                                                               
CLARK                                                                                               
SCOTT                                                                                               
KING                                                                                                
TURNER                                                                                              
ADAMS                                                                                               
JAMES                                                                                               
FORD                                                                                                
MILLER                                                                                              
تم اختيار 14 صف


اختيار عمود باستخدام SELECT مع وضع عنوان للعمود (ALIASES)

SQL> select ename employee from emp;



EMPLOYEE                                                                                            
---------- 
SMITH                                                                                               
ALLEN                                                                                               
WARD                                                                                                
JONES                                                                                               
MARTIN BLAKE                                                                                               
CLARK                                                                                               
SCOTT                                                                                               
KING                                                                                                
TURNER                                                                                              
ADAMS                                                                                               
JAMES                                                                                               
FORD                                                                                                
MILLER                                                                                              
تم اختيار 14 صف


إجراء عمليات حسابية ( + و - و * و / )على عدة أعمدة

SQL> select sal+comm salary from emp;



SALARY                                                                                           
-------
        
    1900 
    1750 
                                                                                                   
    2650 
                                                                                                   
                                                                                                   
                                                                                                   
                                                                                                   
    1500 
                                                                                                   
                                                                                                   
                                                                                                   
                                                                                                   
تم اختيار 14 صف



الأماكن الخالية (التي ليس فيها قيمة) تسوي NULL وذلك لأنه عند إجراء أي عملية على الـNULL يكون الناتج هو NULL وقيمة الـNULL موجودة في حقل COMM وللتغلب على هذه المشكلة لابد أولا من تحويل قيمة الـNULL إلى قيمة عددية تستخدم في العمليات الحسابية ولا تؤثر على قيمة الناتج النهائي للراتب وهو الصفر وذلك باستخدام دالة nvl وتأخذ الشكل NVL(COLUMN_NAME , VALUE )

SQL> select ename,sal+nvl(comm,0) from emp;



ENAME      SAL+NVL(COMM,0)                                                                          
---------- -----   ------- 
SMITH                  	800                                                                          
ALLEN                 	1900                                                                          
WARD                  	1750                                                                          
JONES                 	2975                                                                          
MARTIN 2650                                                                          
BLAKE                 	2850                                                                          
CLARK                 	2450                                                                          
SCOTT                 	3000                                                                          
KING                  	5000                                                                          
TURNER                	1500                                                                          
ADAMS                 	1100                                                                          
JAMES                  	950                                                                          
FORD                  	3000                                                                          
MILLER                	1300                                                                          
تم اختيار 14 صف



لاحظ القيم بعد تغيير قيمة الـNULL إلى صفر
ولاختيار صف أو عدة صفوف تستخدم جملة WHERE مع جملة SELECT لتحديد الشرط الذي بناءاً عليه سيتم اختيار الصفوف .

SQL> select * from emp where sal=800;



EMPNO 	ENAME      JOB 	MGR 	HIREDATE       SAL      COMM    	DEPTNO                     
       7369 SMITH      CLERK     7902 	   17/12/80             800                  	     20



SQL> select * from emp where sal > 800;



EMPNO 	NAME      JOB              MGR 	HIREDATE       SAL      COMM    DEPTNO                     
-----------        ----------     ---------         ---------         ------------------     ------       ----------    ------------        
    7499 ALLEN      SALESMAN    7698 	20/02/81      	1600       	300        	30                     
    7521 WARD       SALESMAN    7698 	22/02/81      	1250       	500        	30                     
    7566 JONES      MANAGER      7839 	02/04/81      	2975                  		20                     
    7654 MARTIN SALESMAN    7698 	28/09/81      	1250      	1400        	30                     
    7698 BLAKE      MANAGER      7839 	01/05/81      	2850                  		30                     
    7782 CLARK      MANAGER     7839 	09/06/81      	2450                  		10                     
    7788 SCOTT      ANALYST        7566 	19/04/87      	3000                  		20                     
    7839 KING          PRESIDENT           		17/11/81      	5000                  		10                     
    7844 TURNER    SALESMAN     7698 	08/09/81      	1500         	0        		30                     
    7876 ADAMS      CLERK             7788 	23/05/87      	1100                  		20                     
    7900 JAMES       CLERK             7698 	03/12/81       	950                  		30                     
    7902 FORD         ANALYST       7566 	03/12/81      	3000                  		20                     
    7934 MILLER    CLERK            7782 	23/01/82      	1300                  		10                     
تم اختيار 13 صف



ولعرض الصفوف مرتبة يستخدم لذلك جملة ORDER BY ويمكن أن يكون الترتيب تصاعديا ASC أو ترتيب تنازلياً DESC بعد تحديد العمود الذي سيتم الترتيب بناءا عليه .

SQL>  select * from emp where sal > 800
 order by sal;



EMPNO 	ENAME      	JOB             	MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7900 	JAMES      	CLERK          7698 	03/12/81       		950                  	30                     
    7876 	ADAMS      	CLERK          7788 	23/05/87      		1100                  	20                     
    7521 	WARD       	SALESMAN 	7698 	22/02/81      		1250           500        	30                     
    7654 	MARTIN SALESMAN 	7698 	28/09/81      		1250          1400        	30                     
    7934 	MILLER     	CLERK          7782 	23/01/82      		1300                  	10                     
    7844 	TURNER     	SALESMAN  7698 	08/09/81      		1500            0        	30                     
    7499 	ALLEN      	SALESMAN  7698 	20/02/81      		1600         300        	30                     
    7782 	CLARK      	MANAGER   7839 	09/06/81      		2450                  	10                     
    7698 	BLAKE      	MANAGER   7839 	01/05/81      		2850                  	30                     
    7566 	JONES      	MANAGER   7839 	02/04/81      		2975                  	20                     
    7788 	SCOTT      	ANALYST    7566 	19/04/87      		3000                  	20                     
    7902 	FORD       	ANALYST    7566 	03/12/81      		3000                  	20                     
    7839 	KING       	PRESIDENT           	17/11/81      		5000                  	10                     
تم اختيار 13 صف



ولترتيب الصفوف تنازليا كما يلي :

SQL>   select * from emp where sal > 800
  order by sal desc;



EMPNO 	ENAME      JOB             MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7839 	KING       PRESIDENT           	17/11/81      		5000                  	10                     
    7788 	SCOTT   ANALYST        7566 	19/04/87      		3000                  	20                     
    7902 	FORD      ANALYST       7566 	03/12/81      		3000                  	20                     
    7566 	JONES    MANAGER      7839 	02/04/81      		2975                  	20                     
    7698 	BLAKE    MANAGER     7839 	01/05/81      		2850                  	30                     
    7782 	CLARK   MANAGER     7839 	09/06/81      		2450                  	10                     
    7499 	ALLEN    SALESMAN   7698 	20/02/81      		1600       	300       30                     
    7844 	TURNER  SALESMAN  7698 	08/09/81      		1500         	0        	30                     
    7934 	MILLER   CLERK          7782 	23/01/82      		1300                  	10                     
    7521 	WARD       SALESMAN  7698 	22/02/81      		1250       	500      30                     
    7654 	MARTIN SALESMAN  7698 	28/09/81      		1250      	1400    30                     
    7876 	ADAMS     CLERK          7788 	23/05/87      		1100                  	20                     
    7900 	JAMES      CLERK           7698 	03/12/81       		950                  	30                     

تم اختيار 13 صف



ولحساب الراتب السنوي يكون بالجملة التالية :

SQL> select ename,(sal+nvl(comm,0))*12 “ANNUAL SALARY ” , ename EMPLOYEE
from emp;



ENAME      ANNUAL SALARY 		EMPLOYEE                                                              
SMITH                     9600 			SMITH                                                               
ALLEN                     22800 			ALLEN                                                               
WARD                     21000 			WARD                                                                
JONES                      35700 			JONES                                                               
MARTIN 31800 			MARTIN BLAKE                     34200 			BLAKE                                                               
CLARK                    29400 			CLARK                                                               
SCOTT                     36000 			SCOTT                                                               
KING                        60000 			KING                                                                
TURNER                  18000 			TURNER                                                              
ADAMS                    13200 			ADAMS                                                               
JAMES                      11400 			JAMES                                                               
FORD                       36000 			FORD                                                                
MILLER                   15600 			MILLER                                                              
تم اختيار 14 صف



SQL> select * from emp where job='CLERK';



EMPNO 	ENAME      JOB             MGR 	HIREDATE      	 SAL      COMM    DEPTNO                     
    7369 	SMITH      CLERK          7902 	17/12/80      		 800                 	 20                     
    7876 	ADAMS      CLERK          7788	 23/05/87     		 1100                	  20                     
    7900 	JAMES      CLERK          7698	 03/12/81     		  950                 	30                     
    7934 	MILLER     CLERK          7782 	23/01/82      		1300                  	10



تطبيق شرطين بعد جملة WHERE باستخدام المعامل AND

SQL> SELECT * FROM EMP WHERE JOB='CLERK' AND SAL>1000;



EMPNO 	ENAME      JOB             MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7876 	ADAMS      CLERK          7788	 23/05/87      		1100                  	20                     
    7934 	MILLER     CLERK          7782	 23/01/82      		1300                  	10


استخدام دالة BETWEEN AND حيث يتم كتابة الحد الأصغر قبل AND وكتابة الحد الأصغر بعد AND ويتم أخذ الحدين الأصغر والأكبر في البيانات وإظهارهما حيث أن فترة BETWEEN مغلقة

SQL> SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 1200;



EMPNO 	ENAME      JOB             MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7876 	ADAMS      CLERK          7788	 23/05/87      		1100                 	 20



استخدام NOT مع دالة BETWEEN AND لا يتم أخذ الحدين الأصغر والأكبر في البيانات

SQL> SELECT * FROM EMP WHERE SAL NOT BETWEEN 800 AND 1200;



EMPNO 	ENAME      JOB                   MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7499 	ALLEN      SALESMAN       7698 	20/02/81      		1600       	300        30                     
    7521 	WARD       SALESMAN       7698 	22/02/81      		1250       	500        30                     
    7566 	JONES      MANAGER        7839 	02/04/81      		2975                 	 20                     
    7654 	MARTIN SALESMAN       7698 28/09/81      		1250      	1400      30                     
    7698 	BLAKE      MANAGER        7839 	01/05/81      		2850                  	30                     
    7782 	CLARK      MANAGER        7839 	09/06/81      		2450                  	10                     
    7788 	SCOTT      ANALYST        7566 	19/04/87      		3000                  	20                     
    7839 	KING       PRESIDENT           	17/11/81      		5000                  	10                     
    7844 	TURNER     SALESMAN   7698 	08/09/81      		1500         	0        30                     
    7902 	FORD       ANALYST        7566 	03/12/81      		3000                  	20                     
    7934 	MILLER     CLERK          7782 	23/01/82      		1300                  	10                     
تم اختيار 11 صف



استخدام علامة % مع دالة LIKE لتحل محل عدة حروف لتطبيق شرط محدد على حقل حرفي أو رقمي أو تاريخ بينما استخدام علامة ( _ ) لتحل محل حرف واحد فقط . مثلاً في المثال التالي يتم استعراض كل الصفوف التي حقل الاسم فيها يبدأ بحرف A وتم التعبير عن ذلك بـ WHERE ENAME LIKE 'A%'

SQL> SELECT * FROM EMP WHERE ENAME LIKE 'A%';



EMPNO 	ENAME      JOB             	MGR 	HIREDATE       SAL      COMM    DEPTNO                     
    7499 	ALLEN      SALESMAN      7698 	20/02/81      	    1600       300        	30                     
    7876 	ADAMS     CLERK            	7788 	23/05/87      	    1100                  	20


وفي المثال التالي يتم عرض الصفوف التي تتكون من خمسة حروف وتبدأ بحرف A وتم التعبير عن ذلك بكتابة حرف A ثم أربع علامات من العلامة ( _ ) .


SQL> SELECT * FROM EMP WHERE ENAME LIKE 'A____';



EMPNO 	ENAME          JOB             MGR 	HIREDATE       SAL      COMM    DEPTNO                     
    7499 	ALLEN      SALESMAN   7698 	20/02/81      	   1600          300        	    30                     
    7876 	ADAMS      CLERK          7788 	23/05/87      	   1100                  	   20


ولعرض كل الصفوف التي يكون فيها حقل COMM له القيمة NULL تستخدم دالة IS NULL كما يلي :-

SQL> SELECT * FROM EMP WHERE COMM IS NULL;



EMPNO 	ENAME      	JOB            	 MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7369 	SMITH      CLERK          	7902 	17/12/80       		800                  	20                     
    7566 	JONES      MANAGER        7839 	02/04/81      		2975                  	20                     
    7698 	BLAKE     MANAGER        7839 	01/05/81      		2850                  	30                     
    7782 	CLARK    MANAGER        7839 	09/06/81      		2450                  	10      	               
    7788 	SCOTT    ANALYST        	7566 	19/04/87      		3000                  	20                     
    7839 	KING       PRESIDENT           	17/11/81      		5000                  	10                     
    7876 	ADAMS    CLERK          	7788 	23/05/87      		1100                  	20                     
    7900 	JAMES     CLERK          	7698 	03/12/81       		950                  	30                     
    7902 	FORD       ANALYST        	7566 	03/12/81      		3000                  	20                     
    7934 	MILLER    CLERK          	7782 	23/01/82      		1300                  	10                     
تم اختيار 10 صف



ولنفي جملة IS NULL تستخدم دالة IS NOT NULL كما في المثال التالي :

SQL> SELECT * FROM EMP WHERE COMM IS NOT NULL;



EMPNO 	ENAME      JOB             	MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7499 	ALLEN      SALESMAN      7698 	20/02/81      		1600       300        	30                     
    7521 	WARD       SALESMAN      7698 	22/02/81      		1250       500        	30                     
    7654 	MARTIN SALESMAN     7698 	28/09/81      		1250      1400        	30                     
    7844 	TURNER    SALESMAN     7698 	08/09/81      		1500         0        	30



استخدام دالة IN(list) للسؤال هل بيانات الحقل المراد السؤال عنه موجودة في القائمة داخل IN وهذه القائمة يمكن أن تكون رقمية أو حرفية بناءً على نوع الحقل المراد السؤال عنه .

SQL> SELECT * FROM EMP WHERE DEPTNO IN(10,20);



EMPNO 	ENAME      JOB             	MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7369 	SMITH      CLERK          	7902 	17/12/80       		800                  	20                     
    7566 	JONES      MANAGER        7839 	02/04/81      		2975                  	20                     
    7782 	CLARK     MANAGER       7839 	09/06/81      		2450                  	10                     
    7788 	SCOTT     ANALYST        	7566 	19/04/87      		3000                  	20                     
    7839 	KING       PRESIDENT           	17/11/81      		5000                  	10                     
    7876 	ADAMS    CLERK          	7788 	23/05/87      		1100                  	20                     
    7902 	FORD       ANALYST        	7566 	03/12/81      	    	3000                  	20                     
    7934 	MILLER    CLERK          	7782 	23/01/82      	    	1300                  	10                     
تم اختيار 8 صف



استخدام المعامل OR وهو يتطلب فقط تنفيذ أحد الشرطين الموجودين مع المعامل .

SQL> SELECT * FROM EMP WHERE DEPTNO=10 OR DEPTNO=20;



EMPNO 	ENAME      JOB             	MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7369 	SMITH      CLERK         	7902 	17/12/80       		800                  	20                     
    7566 	JONES      MANAGER        7839 	02/04/81      		2975                  	20                     
    7782 	CLARK      MANAGER      7839 	09/06/81      		2450                  	10                     
    7788 	SCOTT      ANALYST        7566 	19/04/87      		3000                  	20                     
    7839 	KING         PRESIDENT           	17/11/81      		5000                  	10                     
    7876 	ADAMS    CLERK          	7788 	23/05/87      		1100                  	20                     
    7902 	FORD       ANALYST        	7566 	03/12/81      		3000                  	20                     
    7934 	MILLER   CLERK          	7782 	23/01/82      		1300                  	10                     
تم اختيار 8 صف




استخدام دالة NOT مع المعامل OR أي نفي الشرط المطبق في المثال السابق وذلك بوضع دالة OR وشرطيها داخل قوسين ثم دالة NOT قبل القوسين ليتم تطبيق النفي على الشرطين .


SQL>  SELECT * FROM EMP WHERE NOT(DEPTNO=10 OR DEPTNO=20);



EMPNO 	ENAME      	JOB             	MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7499 	ALLEN      SALESMAN       7698 	20/02/81      		1600       300        	30                     
    7521 	WARD       SALESMAN       7698 	22/02/81      		1250       500        	30                     
    7654 	MARTIN SALESMAN       7698 	28/09/81      		1250      1400        	30                     
    7698 	BLAKE      MANAGER        7839 	01/05/81      		2850                  	30                     
    7844 	TURNER   SALESMAN       7698 	08/09/81      		1500         0        	30                     
    7900 	JAMES      CLERK          	7698 	03/12/81       		950                  	30                     
تم اختيار 6 صف



ويمكن النفي بطريقة أخرى وذلك بتطبيق دالة NOT بتطبيق على العوامل الموجودة داخل القوسين أي تحويل علامة يساوي (=) إلى لا يساوي (=!) وكذلك نفي المعامل OR إلى المعامل AND وإلغاء القوسين .

SQL> SELECT * FROM EMP WHERE DEPTNO!=10 AND DEPTNO!=20;



EMPNO 	ENAME      JOB             	MGR 	HIREDATE       	SAL      COMM    DEPTNO                     
    7499 	ALLEN      SALESMAN       7698 	20/02/81      		1600       300        	30                     
    7521 	WARD       SALESMAN       7698 	22/02/81      		1250       500        	30                     
    7654 	MARTIN SALESMAN     7698 	28/09/81      		1250      1400        	30                     
    7698 	BLAKE      MANAGER        7839 	01/05/81      		2850                  	30                     
    7844 	TURNER     SALESMAN    7698 	08/09/81      		1500         0        	30                     
    7900 	JAMES      CLERK          	7698 	03/12/81       		950                  	30                     
تم اختيار 6 صف



وللخروج من SQL/PLUS يستخدم أمر الخروج EXIT .

SQL> EXIT


ملاحظات :
الفرق بين يأخذ الحقل قيمة الـ NULL أو يأخذ قيمة الصفر هو أن الحقل الذي يأخذ قيمة الـNULL لا يمكن تغيير هذه القيمة أي أنها له لا تتغير أما قيمة الصفر فيمكن أن تتغير إلى قيمة أخرى مثال ذلك حقل COMM في جدول EMP فإن الموظف الذي يأخذ في حقل COMM قيمة NULL فهو أن طبيعة عمله لا يأخذ أي نسبة (COMMISION) على الإطلاق أما الموظف الذي يأخذ قيمة الصفر فهو أن الموظف لم يحقق النسبة ولم يحقق أي COMMISION ويمكن أن يحقق فيما بعد فتتغير قيمة الصفر إلى القيمة المحققة .
عند استخدام دالة NOT مع دالة IN فإن ذلك يتطلب من ORACLE SERVER أن يبحث في كافة صفوف الجدول وبالتالي يتم تضييع وقت كبير جداً أثناء تنفيذ هذه الدالة خاصة اذا كان هناك صفوف كثيرة جداً لذلك لا ينصح بها برمجياً .
استخدام المعامل != بدلاً من المعامل <> وذلك لأن المعامل != عبارة عن عملية واحدة فقط أما المعامل <> عبارة عن معاملين ولذلك فاستخدام المعامل الأول.

وبهذا نكون انتهينا من المحاضرة الاولى

اتمنى عدم نقل الموضوع الى منتديات اخرى الى بوضع الوصله في اي منتدى

تحياتي،،،

تم تعديل بواسطة الماضي
رابط هذا التعليق
شارك

  • الردود 36
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • الماضي

    5

  • amdabd

    2

  • TALAL

    1

  • AL®NE

    1

شكرا ياأخى على هذا الدرس الرائع والذى أوضحت به الكثير وأتمنى استكمال هذه الحلقات وجزاء الله عنا خير الجزاء
لى سؤالين لو تكرمت الاجابه عنهم
1- هل توجد داله انتاج رقم عشوائي يمكن استخدامها فى الاوراكل
2- هل يمكن اختيار سجل معين عشوائيا أو بناء على رقم السجل (الثالث ،العشرين ، الخمسون)
يعنى تطبيقا على الجمله الاخيره والذى انتج 6 سجلات هل يمكن عرض او اختيار سجل واحد منهم فقط عشوائيا


وجزاكم الله خيرا ، واللام عليكم ورحمه الله وبركاته ،،

رابط هذا التعليق
شارك

العفو اخوي طلال وانا ماسويت الى الواجب
واجبتك هي
1- انت تقصد في هذي SEQUENCE اتوقع انشاء الله جايه بالدروس
2- ابشوفلك الفكره بس ماتوقع فيه امر لهشيء هذا

تحياتي،،،

رابط هذا التعليق
شارك

بسم الله الرحمن الرحيم



السلام عليكم ورحمة الله وبركاته،،

الأخت نوير
العفو اختي العزيزة وانشاء الله يفيدك في دراستك :D

تقبلي تحياتي,,,
====================================
الأخ Oracle
العفو اخوي العزيز :D

تقبل تحياتي,,,
====================================
الأخ عمر باعقيل
وعليكم السلام ورحمة الله وبركاته،،
العفو اخوي وانا لا اريد الا الدعاء لي بتوفيق و ان يستفيد الجميع منها واشكرك على مرورك
تقبل تحياتي,,,
====================================


تحياتي للجميع,,,

رابط هذا التعليق
شارك

مشكور أخوي الماضي مجهود ممتاز وشرح واضح ,,,,,,

لكن عندي سوال ... أنت تقول


عند استخدام دالة NOT مع دالة IN فإن ذلك يتطلب من ORACLE SERVER أن يبحث في كافة صفوف الجدول وبالتالي يتم تضييع وقت كبير جداً أثناء تنفيذ هذه الدالة خاصة اذا كان هناك صفوف كثيرة جداً لذلك لا ينصح بها برمجياً

سوالي هو أن كل عمليات الاستعلام تتطلب البحث في جميع الصفوف ,,,, ممكن توضح لي أكثر ولا عليك أمر :D

شكرا لك

رابط هذا التعليق
شارك

اخي العزيز AL®NE العفو اخوي وهذا واجبي

والجواب على سؤلك هو اذا استخدمنا جملة NOT IN هذه الجمله تسبب التئخير في الاستعلام عن المطلوب اذا كانت السجلات كثيرة فيفضل التحديد على الامر المطلوب ولكن الجمله صحيحه ويمكن استخدامها هذا المقصود واذا كان احد من الاخوان يعرف السبب الاكيد فئتمنا ان يفيدنا بهذه النقطه

تحياتي،،،

رابط هذا التعليق
شارك

تـــــــــــابــــــــــــــــــع



معليه اخواني ما دريت انه انقطع الشرح :D


===========================================================



دالة القطع( SUBSTR(Column_name , start , number of character وهي اختصار لـ SUBstitute STRing تستخدم هذه الدالة لقطع عدد من حروف العمود أو النص, بداية من الحرف رقم start وبعدد حروف برقم number of character وهذه الدالة هامة جدا عندما تحتاج إلى قطع عدد محدد من حروف العمود كله بأمر واحد وهذا عندما يوجد خطأ في بيانات عمود محدد وتحتاج إلى تعديله بقطع جزء محدد من حروف العمود كما في المثال التالي فإنه سيتم قطع ثلاثة حروف من عمود الإسم اعتباراً من الحرف رقم 2 من اليسار اذا كان رقم البداية موجب والثاني من اليمين اذا كان رقم البداية سالب والقطع من اليسار أيضاً .

SQL> SELECT SUBSTR(ENAME,2,3) FROM EMP;


SUB                                                                                                 
MIT                                                                                                 
LLE                                                                                                 
ARD                                                                                                 
ONE                                                                                                 
ART                                                                                                 
LAK                                                                                                 
LAR                                                                                                 
COT                                                                                                 
ING                                                                                                 
URN                                                                                                 
DAM                                                                                                 
AME                                                                                                 
ORD                                                                                                 
ILL                                                                                                 
تم اختيار 14 صف



في هذا المثال عدد البداية سالب لذلك بدأ العد من اليمين وقطع إلى اليسار .

SQL> SELECT ENAME,SUBSTR(ENAME,-2,3) FROM EMP;


ENAME      	SU                                                                                       
SMITH      	TH                                                                                       
ALLEN      	EN                                                                                       
WARD       	RD                                                                                       
JONES      	ES                                                                                       
MARTIN IN BLAKE      	KE                                                                                       
CLARK      	RK                                                                                       
SCOTT      	TT                                                                                       
KING       	NG                                                                                       
TURNER     	ER                                                                                       
ADAMS      	MS                                                                                       
JAMES      	ES                                                                                       
FORD       	RD                                                                                       
MILLER     	ER                                                                                       
تم اختيار 14 صف



في المثال التالي سيتم القطع بداية من الحرف رقم 3 من اليمين وقطع فقط حرفين .

SQL> SELECT ENAME,SUBSTR(ENAME,-3,2) FROM EMP;


ENAME      	SU                                                                                       
SMITH      	IT                                                                                       
ALLEN      	LE                                                                                       
WARD       	AR                                                                                       
JONES      	NE                                                                                       
MARTIN TI                                                                                       
BLAKE      	AK                                                                                       
CLARK      	AR                                                                                       
SCOTT      	OT                                                                                       
KING       	IN TURNER     	NE                                                                                       
ADAMS      	AM                                                                                       
JAMES      	ME                                                                                       
FORD OR MILLER     	LE                                                                                       
تم اختيار 14 صف



دالة البحث عن حرف أو حروف متتالية(INSTR(Column_name , string وهي اختصار لـ IN STRing وهي تستخدم للبحث عن حرف أو حروف string في العمود أو النص المكتوب . ويتم عرض رقم الحرف او رقم الحروف في العمود من اليسار.

SQL> SELECT INSTR('ABCD','B') FROM DUAL;


INSTR('ABCD','B')                                                                                   
               2



ويمكن البحث عن أكثر من حرف (سلسلة حرفية)

SQL> SELECT INSTR('ABCD','BC') FROM DUAL;


INSTR('ABCD','BC')                                                                                  
                2


SQL> SELECT INSTR('ABCD','BD') FROM DUAL;


INSTR('ABCD','BD')                                                                                  
                0



في المثال السابق تم البحث عن حرفي BD ككلمة واحدة وبالتالي لا يوجد فكان الناتج 0 .

في المثال التالي سيتم البحث عن العلامة ( _ ) داخل السلسلة الحرفية (XYZ-ABC) وذلك باستخدام دالة INSTR ثم أخذ ناتج هذه الدالة وهو ترتيب هذا الرمز وإضافة عليه الرقم 1 ثم تطبيق دالة SUBSTR والقطع بدءاً من الرقم الناتج +1 .

SQL> SELECT SUBSTR('XYZ-ABC',INSTR('XYZ-ABC','-')+1) FROM DUAL;


SUB                                                                                                 
ABC



ويمكن تحديد عدد الحروف التي يتم قطعها وهنا عدد الحروف المراد قطعها هو ثلاثة حروف .

SQL> SELECT SUBSTR('XYZ-ABC',INSTR('XYZ-ABC','-')+1,3) FROM DUAL;


SUB                                                                                                 
ABC     
                                                                                           
========================================

SQL> SELECT SUBSTR('XYZ-ABC',INSTR('XYZ-ABC','-')+1,2) FROM DUAL;


SU                                                                                                  
AB



في دالة INSTR بعد كتابة الرمز المراد البحث عنه اذا كتبنا الرقم (1) فهذا يعني أن البحث يبدأ من اليسار إلى اليمين أما اذا كان سالب فإن البحث سيبدأ من اليمين إلى اليسار أما الرقم بعد (1) فهو يعني هل الرمز الأول أو الثاني أو الثالث وهكذا لأنه يمكن أن يكون هناك اكثر من رمز . كما في المثال التالي فإن البحث بدأ من اليسار إلى اليمين والرمز الثاني الذي بعده مباشرة حروف MNO .

SQL>SELECT SUBSTR('XYZ-ABC-MNO',INSTR('XYZ-ABC-MNO','-',1,2)+1,3) FROM DUAL;


SUB
MNO



في هذا المثال البحث بدأ من اليمين إلى اليسار لأن الرقم (1) أمامه إشارة سالبة والرمز الثاني من اليمين ولكن قطع الحروف من اليسار إلى اليمين وهنا الحروف المقطوعة هي ABC .

SELECT SUBSTR('XYZ-ABC-MNO',INSTR('XYZ-ABC-MNO','-',-1,2)+1,3) FROM DUAL;


SUB
ABC



دالة ROUND(Column_name/number , digit) تقوم هذه الدالة بتقريب محتويات العمود الرقمية أو الرقم المكتوب في الدالة إلى الرقم المكتوب بعد الفاصلة . واذا كان هذا الرقم سالب فإن التقريب سيطبق على ما قبل العلامة أي أن التقريب سيكون لأقرب عشرة أو لأقرب مائة أو لأقرب ألف وهكذا .

SQL> SELECT ROUND(55.623,1) FROM DUAL;


ROUND(55.623,1)                                                                                     
          55.6


SQL> SELECT ROUND(55.623,2) FROM DUAL;


ROUND(55.623,2)                                                                                     
         55.62


SQL> SELECT ROUND(55.623,0) FROM DUAL;


ROUND(55.623,0)                                                                                     
            56


SQL> SELECT ROUND(55.623,-1) FROM DUAL;


ROUND(55.623,-1)                                                                                    
             60



تقوم دالة TRUNC بقطع التقريب فإذا كان الرقم المراد التقريب إليه موجب سيكون التقريب للأرقام بعد العلامة (الأجزاء العشرية) واذا كان الرقم بالسالب فإن القطع سيكون لأقرب عشرة أو مائة أو ألف .

SQL> SELECT ROUND(55.623,-1),TRUNC(55.623) FROM DUAL;


ROUND(55.623,-1) 	TRUNC(55.623)                                                                      
             60            		55


SQL> SELECT ROUND(55.623,-1),TRUNC(55.623,-1) FROM DUAL;


ROUND(55.623,-1) 	TRUNC(55.623,-1)                                                                   
             60               		50


SQL> SELECT ROUND(55.623,-2),TRUNC(55.623,-2) FROM DUAL;


ROUND(55.623,-2) 	TRUNC(55.623,-2)                                                                   
            100                		0


SQL> SELECT ROUND(49.623,-2),TRUNC(49.623,-2) FROM DUAL;


ROUND(49.623,-2) 	TRUNC(49.623,-2)                                                                   
              0                		0


SQL> SELECT ROUND(55.623,0),TRUNC(55.623,0) FROM DUAL;


ROUND(55.623,0) 	TRUNC(55.623,0)                                                                     
            56              		55


SQL> SELECT ROUND(55.623,1),TRUNC(55.623,1) FROM DUAL;


ROUND(55.623,1) 	TRUNC(55.623,1)                                                                     
          55.6            		55.6


SQL> SELECT ROUND(55.623,-1),TRUNC(55.623,-1) FROM DUAL;


ROUND(55.623,-1) 	TRUNC(55.623,-1)                                                                   
             60               		50



دالة MOD تقوم بحساب باقي قسمة رقم أو عمود على رقم أو عمود آخر.

SQL> SELECT MOD(8,3) FROM DUAL;


MOD(8,3)                                                                                           
       2


SQL> SELECT MOD(8,4) FROM DUAL;


MOD(8,4)                                                                                           
       0



أمر DESC table_name يقوم هذا الامر بعرض توصيف للبرنامج وعرض لأنواع الحقول في هذا الجدول .

SQL> DESC EMP;


Name                               Null?      Type
--------------------------- ---------------- -------------
EMPNO                    NOT NULL NUMBER(4)
ENAME                                          VARCHAR2(10)
JOB                                                VARCHAR2(9)
MGR                                               NUMBER(4)
HIREDATE                                    DATE
SAL                                                NUMBER(7,2)
COMM                                           NUMBER(7,2)
DEPTNO                                       NUMBER(2)



دالة TO_NUMBER تقوم هذه الدالة بتحويل الأرقام التي في صورة حرفية إلى أرقام في صورة عددية يمكن إجراء جميع العمليات الحسابية عليها .

SQL> SELECT TO_NUMBER('12')+10 FROM DUAL;


TO_NUMBER('12')+10                                                                                  
               22



دالة TO_CHAR تقوم هذه الدالة بتحويل الأرقام التي في صورة رقمية إلى أرقام في صورة حرفية .

SQL> SELECT TO_CHAR(TO_NUMBER('12')+10) FROM DUAL;


TO                                                                                                  
22


SQL> SELECT TO_CHAR(TO_NUMBER('12')+10)+10 FROM DUAL


TO_CHAR(TO_NUMBER('12')+10)+10                                                                      
                           32


SQL> SELECT TO_CHAR(TO_NUMBER('12')+10)+10 FROM DUAL;


TO_CHAR(TO_NUMBER('12')+10)+10                                                                      
                           32




اذا اردنا تغيير شكل الاستعلام لتاريخ توجد طريقة لهذه وهي كما يلي

SQL> select sysdate from dual;


SYSDATE
---------
23-JUL-04



في المثال السابق استعلامنا عن تاريخ اليوم سوف نغير في شكل التاريخ في المثال القادم

ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY';


SQL> select sysdate from dual;


SYSDATE
----------
23/07/2004



طريقة اخرى

SQL> SELECT TO_CHAR(SYSDATE,'DD.MM.YYYY') FROM DUAL;


TO_CHAR(SY
----------
25.07.2004


SQL> SELECT HIREDATE,TO_CHAR(HIREDATE,'DD.MONTH.YYYY') FROM EMP; HIREDATE   TO_CHAR(HIREDATE,
---------- -----------------
17/12/1980 17.DECEMBER .1980
20/02/1981 20.FEBRUARY .1981
22/02/1981 22.FEBRUARY .1981
02/04/1981 02.APRIL    .1981
28/09/1981 28.SEPTEMBER.1981
01/05/1981 01.MAY      .1981
09/06/1981 09.JUNE     .1981
19/04/1987 19.APRIL    .1987
17/11/1981 17.NOVEMBER .1981
08/09/1981 08.SEPTEMBER.1981
23/05/1987 23.MAY      .1987
03/12/1981 03.DECEMBER .1981
03/12/1981 03.DECEMBER .1981
23/01/1982 23.JANUARY  .1982


SQL> SELECT HIREDATE,TO_CHAR(SYSDATE,'DD-MON-YYYY') FROM EMP;


HIREDATE   TO_CHAR(SYS
---------- -----------
17/12/1980 23-JUL-2004
20/02/1981 23-JUL-2004
22/02/1981 23-JUL-2004
02/04/1981 23-JUL-2004
28/09/1981 23-JUL-2004
01/05/1981 23-JUL-2004
09/06/1981 23-JUL-2004
19/04/1987 23-JUL-2004
17/11/1981 23-JUL-2004
08/09/1981 23-JUL-2004
23/05/1987 23-JUL-2004
03/12/1981 23-JUL-2004
03/12/1981 23-JUL-2004
23/01/1982 23-JUL-2004



وبهذا نكون انتهينا من المحاضرة الثانية

اتمنى عدم نقل الموضوع الى منتديات اخرى الى بوضع الوصله في اي منتدى

وتقبلو تحياتي،،،

رابط هذا التعليق
شارك

  • بعد 1 شهر...
  • بعد 2 شهور...

السلام عليكم و رحمة الله و بركاته
شكرا ياخي على هذه المعلومات القيمة انا عندي سؤال ممكن اجد اجابة عليه من اي اخ له دراية بالموضوع
انا عندي مجموعة سجلات بها بيانات و اريد عرض هذه السجلات من تاريخ معين الى تاريخ اخر او عدد السجلات بين تاريخين؟
set get_sum_vote=conn.execute(" select count(*) as total_poll from cathodic_cables where cath_date between # to_date('" & Request.Form("startdate") & "', 'dd/mm/yyyy') & # and # to_date('" & Request.Form("enddate") & "', 'dd/mm/yyyy') # " )

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

شكرا لك أيها الاخ الكريم ..

ولكن هل لي باستفسار بسيط ...

في دالة التاريخ .. عند طرح hiredate من sysdate ستأتي النتيجة في صورة أيام ..

هل من سبيل لعرضها بالشكل التالي ..

ان تكون المدة المنقضية هي كذا سنة , كذا شهر , كذا يوم ؟؟؟

وكل الشكر ...

رابط هذا التعليق
شارك

مشكور اخى على الموضوع

ولكن عندما جربت الداله NVL ظهرتلى رساله تقول Undefiend function 'Nvl' ex

مع العلم انى استخدمت اكسيس 2000 ...

انا قمت بالبحث فى البرنامج عن الداله التى تجعل NULL بقيمه ادخلها بنفسى

فوجدت داله باسم NZ وصيغه كتابتها

Nz([subtotal],0+Nz([Freight],0) .. ok

ولكنى لا استطيع استخدامها

ارجو المساعده بأى داله تحول Null لقيمه اقوم بادخالها سواء كانت NVL او NZ او غيرهم

شكرا مقدما

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...
  • بعد 2 شهور...

بسم الله الرحمن الرحيم


السلام عليكم ورحمة الله وبركاته،،
اخي العزيز بارك الله فيك على الكنز الذي تهديتني اياه انا وبقية الاعضاء ,
اخي انا طالبة في دبلوم برمجة اواجة هذه السنة عدة مشاريع , فها يمكنك مساعدتي ؟
عندي سؤال هو ماهي الDATA DICTINARY اريد القليل من المعلومات عنها.
اما السوال الثاني فهل لديك فكرة عن الSYSTEM ANALYSES او كيفية بدء المشاريع فيها مع العلم ان المشروع في الهيئة العامة للمياة وبالتحديد قسم الاستهلاك ،،،
اذا استطعت مساعدتي او لم تستطع فلك مني جزيل الشكر,,,[
والسلام عليكم ورحمة الله وبركاته

رابط هذا التعليق
شارك

  • بعد 1 شهر...
  • بعد 3 شهور...
  • بعد 3 شهور...
  • بعد 5 شهور...
  • بعد 9 شهور...
  • بعد 2 شهور...
  • بعد 4 شهور...

بعد ثلاث سنوات من المشاركه بهذة الدروس او اكثر
والله يا اخى قمت بالدعاء لك على معلومه بسيطه كانت واقفه قدامى وعملت بحث
ولقيتها فى دروسك
سبحان الله
جزاك الله عنا خيرا ووفقك الله ونجاك من كل هم وغم وبلاء

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية