دورة sql
صفحة 1 من اصل 1
دورة sql
بسم الله الرحمن الرحيم
التوابعFunction :
هي عبارة عن توابع تسهل العمليات وتقسم لمجموعتين أساسيتين
1- توابع وحيدة السطر Single_Row function
2- توابع متعددة السطر Multiple_row function
التوابع من النوع الأول تعطي نتيجة واحدة لكل سطر واحد مثل sal+300
التوابع من النوع الثاني تعطي نتيجة واحدة لكل عدة أسطر مثل توابع avg, sum, max الخ ...
أما إذا قسمنا التوابع حسب نوع المعطيات فهي
1- توابع السلسلة تعمل على معطيات من نوع char
2- التوابع العدية تعمل على معطيات من نوع number
3- توابع التاريخ تعمل على معطيات من نوع date
4- توابع التحويل مثل to_char , to_date ,
to_number, translate ,decode
أنواع المعطيات:
الرموز تكون إما char أو varchar والفرق بينهما إذا كان لدينا عمودين طول كل واحد منهما عشرة رموز ف
الchar: يحجز دوماً عشرة فراغات حتى لو خزنا فيها قيم بطول أقل من عشرة smith تُحجز 'smith '
ال varchar: لا يحجز زيادة.حسب طول الرمز المدخل يحجز
الشكل العام للتوابع هو كالتالي :
Function_name (column/exp[ arg1,arg2,….])
ال column العمود الذي سيُطَّبق عليه التابع .
الexp هو الشيء الذي سيُطَّبق عليه التابع .
ال arg1,2…. هي بارمترات التهيئة وربما يكون ولا واحد
توابع تحويل الأحرف :
Upper(col/exp) تحويل إلى أحرف كبيرة
Lower (col/exp) تحويل إلى أحرف صغيرة
Initcap(col/exp) تحويل الحرف الأول إلى كبير والباقي إلى صغير
ملاحظة هامة : عبارة الfunction تكتب ضمن select,
where, order by
ملاحظة هامة :dual هو اسم جدول يدعى جدول ثنائي وهو جدول مساعد للSQL وفيه قيمة واحدة وهو مفيد في عمليات التواريخ و ال UPPER وال LOWER وهو يمنع عرض الكلمة أكثر من مرة .
وهو جدول بسط وحيد.
Select upper('smith') from dual
لاحظ أنه بإمكانك كتابة التعليمة التالية
Select upper('smith') from emp
سيتم عرض SMITH أربع عشرة مرة بينما في حال استخدام جدول DUAL يتم العرض مرة واحدة فقط.
مثال:
SELECT UPPER('SMITH')
,LOWER('SMITH'),INITCAP ('SMITH') FROM DUAL
التوابعFunction :
هي عبارة عن توابع تسهل العمليات وتقسم لمجموعتين أساسيتين
1- توابع وحيدة السطر Single_Row function
2- توابع متعددة السطر Multiple_row function
التوابع من النوع الأول تعطي نتيجة واحدة لكل سطر واحد مثل sal+300
التوابع من النوع الثاني تعطي نتيجة واحدة لكل عدة أسطر مثل توابع avg, sum, max الخ ...
أما إذا قسمنا التوابع حسب نوع المعطيات فهي
1- توابع السلسلة تعمل على معطيات من نوع char
2- التوابع العدية تعمل على معطيات من نوع number
3- توابع التاريخ تعمل على معطيات من نوع date
4- توابع التحويل مثل to_char , to_date ,
to_number, translate ,decode
أنواع المعطيات:
الرموز تكون إما char أو varchar والفرق بينهما إذا كان لدينا عمودين طول كل واحد منهما عشرة رموز ف
الchar: يحجز دوماً عشرة فراغات حتى لو خزنا فيها قيم بطول أقل من عشرة smith تُحجز 'smith '
ال varchar: لا يحجز زيادة.حسب طول الرمز المدخل يحجز
الشكل العام للتوابع هو كالتالي :
Function_name (column/exp[ arg1,arg2,….])
ال column العمود الذي سيُطَّبق عليه التابع .
الexp هو الشيء الذي سيُطَّبق عليه التابع .
ال arg1,2…. هي بارمترات التهيئة وربما يكون ولا واحد
توابع تحويل الأحرف :
Upper(col/exp) تحويل إلى أحرف كبيرة
Lower (col/exp) تحويل إلى أحرف صغيرة
Initcap(col/exp) تحويل الحرف الأول إلى كبير والباقي إلى صغير
ملاحظة هامة : عبارة الfunction تكتب ضمن select,
where, order by
ملاحظة هامة :dual هو اسم جدول يدعى جدول ثنائي وهو جدول مساعد للSQL وفيه قيمة واحدة وهو مفيد في عمليات التواريخ و ال UPPER وال LOWER وهو يمنع عرض الكلمة أكثر من مرة .
وهو جدول بسط وحيد.
Select upper('smith') from dual
لاحظ أنه بإمكانك كتابة التعليمة التالية
Select upper('smith') from emp
سيتم عرض SMITH أربع عشرة مرة بينما في حال استخدام جدول DUAL يتم العرض مرة واحدة فقط.
مثال:
SELECT UPPER('SMITH')
,LOWER('SMITH'),INITCAP ('SMITH') FROM DUAL
SELECT JOB , LOWER(JOB), LOWER('JOB') L2 FROM EMP
لاحظ أنه في حالة LOWER(JOB) وبما أنه لا يوجد فواصل علوية على طرفي كلمة JOB فإن القيم الموجودة في العمود JOB هي التي سيتم تحويلها بواسطة التابع LOWER
البحث ضمن عبارة WHERE :
تتذكر المثال الذي يقوم بالبحث عن العامل الذي اسمه SMITH
وكيف أننا عندما وضعنا التعليمة على الشكل التالي
SELECT * FROM EMP WHERE ENAME='smith'
لم نجد شيئاً لأن أحرف الأعمدة كانت كلها كبيرة لذلك نستخدم توابع التحويل في هذه الحالة
SELECT * FROM EMP WHERE LOWER ENAME)= 'smith')
بهذا الشكل كيفما كانت smith مكتوبة بأحرف كبيرة أو صغيرة فإنه سوف يراها ويعرفها
SELECT * FROM EMP WHERE UPPER (ENAME)= 'SMITH'
أو
SELECT * FROM EMP WHERE INITCAP (ENAME)= 'Smith'
بهذه الطرق لن نتعب في التأكد فيما إذا كانت محتويات الأعمدة أحرف كبيرة أو صغيرة لمعرفة صحة النتيجة عندي.
الاستخدام لupper, lower, initcap ضمن ال order by
قليل جدا
مثال select * from emp order by upper(ename)
بعونه تعالى انتهى الدرس الثامن نحمد الله تعالى على ما وفق و يسر ونسأله رحمةً ورضواناً وحباً لي ولكم . موعدنا بإذن الله الدرس القادم جزاكم الله كل خير ووفقكم لما يحب ويرضى
عدل سابقا من قبل في الأربعاء سبتمبر 05, 2007 4:44 pm عدل 1 مرات
رد: دورة sql
بسم الله الرحمن الرحيم
الدرس التاسع:
التابع length:
يكتب على الشكل التالي: Length (col/exp)
وهذا التابع يقوم بإعادة طول السلسلة الموجودة ضمن قوسين .
مثال:
Length ('smith')الجواب هو خمسة
Length('new york') الجواب هو ثمانية.
Length (1234) الجواب هو 4
Length (2* الجواب هو2 لأن 2*8=16
Length ('2*8') الجواب هو3
يعني ممكن أقول
Select length (1234) from dual
استخدام هذا التابع ضمن عبارة select:
مثال : إيجاد أطوال أسماء الموظفين
Select ename , length (ename)from emp
النتيجة كالتالي
استخدام هذا التابع ضمن عبارة where :
مثال : إيجاد أسماء الموظفين الذين أطوال أسماءهم أكبر من خمسة
Select ename ,length(ename) from emp where
Length (ename)>5
سيظهر لديك ثلاث أسطر أسماءهم من 6 أحرف هم
ENAME LENGTH(ENA
---------- ----------
MARTIN 6
TURNER 6
MILLER 6
3 rows selected.
مثال : إيجاد رواتب الموظفين اللذين تقل عن 1000
Select sal, length(sal) from emp where length (sal)<4
النتيجة
SAL LENGTH(SAL
---------- ----------
800 3
950 3
2 rows selected.
مثال : إيجاد الرواتب بين 100و 999
Select sal , length(sal) from emp where length(sal)=3
النتيجة
SAL LENGTH(SAL
---------- ----------
800 3
950 3
2 rows selected.
استخدام هذا التابع ضمن عبارة order by:
مثال : رتب أسماء الموظفين من الأطول اسماً على الأصغر إسماً
الجواب : select ename , length(ename) from emp
order by length (ename) desc
ENAME LENGTH(ENA
---------- ----------
MARTIN 6
TURNER 6
MILLER 6
SMITH 5
ALLEN 5
BLAKE 5
SCOTT 5
JAMES 5
ADAMS 5
CLARK 5
JONES 5
WARD 4
KING 4
FORD 4
14 rows selected.
التابع substr: يقوم هذا التابع باقتطاع جزء من السلسلة
الشكل العام له substr(string, start[length])
Length ربما تكون موجودة أو ربما لا
String تكون إما اسم عمود أو تعبير
Start: هو موقع بداية القطع وهو بارمتر من النوع number
Length: هو طول السلسلة المقتطعة وه ن النوع Number
إذا لم نكتب length عندها سيتم اقتطاع السلسة كلها من البداية للنهاية
مثال: substr(sales man, 2, 4) =ales
معنى هذا المثال أظهر السلسلة اعتبارا من الرمز الثاني بطول أربع رموز
مثال: substr(sales man, 3, 5) =les m
مثال: substr(sales man, 7, 3) =man
مثال: substr(sales man, 7) =man
استخدام هذا التابع ضمن عبارة select:
مثال:إيجاد أول ثلاثة أحرف من كل وظيفة :
Select job, substr (job,1,3)from emp
النتيجة:
JOB SUB
--------- ---
CLERK CLE
SALESMAN SAL
SALESMAN SAL
MANAGER MAN
SALESMAN SAL
MANAGER MAN
MANAGER MAN
ANALYST ANA
PRESIDENT PRE
SALESMAN SAL
CLERK CLE
CLERK CLE
ANALYST ANA
CLERK CLE
14 rows selected.
استخدام هذا التابع ضمن عبارةwhere :
ايجاد اسماء الموظفين اللذين يبدؤون بحرف الm
Select ename from emp where lower( substr(ename,1,1))='m'
النتيجة:لاحظ أني استخدمت تابعين هما lower, substr هذا ما أسميه التوابع المتداخلة التنفيذ للتابع الداخلي ثم للتابع الخارجي
أي أن التنفيذ للتابع الأعمق أولاً
أو ممكن أكتب بالطريقة التالية:
Select ename from emp where substr( lower(ename),1,1) ='m'
الدرس التاسع:
التابع length:
يكتب على الشكل التالي: Length (col/exp)
وهذا التابع يقوم بإعادة طول السلسلة الموجودة ضمن قوسين .
مثال:
Length ('smith')الجواب هو خمسة
Length('new york') الجواب هو ثمانية.
Length (1234) الجواب هو 4
Length (2* الجواب هو2 لأن 2*8=16
Length ('2*8') الجواب هو3
يعني ممكن أقول
Select length (1234) from dual
استخدام هذا التابع ضمن عبارة select:
مثال : إيجاد أطوال أسماء الموظفين
Select ename , length (ename)from emp
النتيجة كالتالي
استخدام هذا التابع ضمن عبارة where :
مثال : إيجاد أسماء الموظفين الذين أطوال أسماءهم أكبر من خمسة
Select ename ,length(ename) from emp where
Length (ename)>5
سيظهر لديك ثلاث أسطر أسماءهم من 6 أحرف هم
ENAME LENGTH(ENA
---------- ----------
MARTIN 6
TURNER 6
MILLER 6
3 rows selected.
مثال : إيجاد رواتب الموظفين اللذين تقل عن 1000
Select sal, length(sal) from emp where length (sal)<4
النتيجة
SAL LENGTH(SAL
---------- ----------
800 3
950 3
2 rows selected.
مثال : إيجاد الرواتب بين 100و 999
Select sal , length(sal) from emp where length(sal)=3
النتيجة
SAL LENGTH(SAL
---------- ----------
800 3
950 3
2 rows selected.
استخدام هذا التابع ضمن عبارة order by:
مثال : رتب أسماء الموظفين من الأطول اسماً على الأصغر إسماً
الجواب : select ename , length(ename) from emp
order by length (ename) desc
ENAME LENGTH(ENA
---------- ----------
MARTIN 6
TURNER 6
MILLER 6
SMITH 5
ALLEN 5
BLAKE 5
SCOTT 5
JAMES 5
ADAMS 5
CLARK 5
JONES 5
WARD 4
KING 4
FORD 4
14 rows selected.
التابع substr: يقوم هذا التابع باقتطاع جزء من السلسلة
الشكل العام له substr(string, start[length])
Length ربما تكون موجودة أو ربما لا
String تكون إما اسم عمود أو تعبير
Start: هو موقع بداية القطع وهو بارمتر من النوع number
Length: هو طول السلسلة المقتطعة وه ن النوع Number
إذا لم نكتب length عندها سيتم اقتطاع السلسة كلها من البداية للنهاية
مثال: substr(sales man, 2, 4) =ales
معنى هذا المثال أظهر السلسلة اعتبارا من الرمز الثاني بطول أربع رموز
مثال: substr(sales man, 3, 5) =les m
مثال: substr(sales man, 7, 3) =man
مثال: substr(sales man, 7) =man
استخدام هذا التابع ضمن عبارة select:
مثال:إيجاد أول ثلاثة أحرف من كل وظيفة :
Select job, substr (job,1,3)from emp
النتيجة:
JOB SUB
--------- ---
CLERK CLE
SALESMAN SAL
SALESMAN SAL
MANAGER MAN
SALESMAN SAL
MANAGER MAN
MANAGER MAN
ANALYST ANA
PRESIDENT PRE
SALESMAN SAL
CLERK CLE
CLERK CLE
ANALYST ANA
CLERK CLE
14 rows selected.
استخدام هذا التابع ضمن عبارةwhere :
ايجاد اسماء الموظفين اللذين يبدؤون بحرف الm
Select ename from emp where lower( substr(ename,1,1))='m'
النتيجة:لاحظ أني استخدمت تابعين هما lower, substr هذا ما أسميه التوابع المتداخلة التنفيذ للتابع الداخلي ثم للتابع الخارجي
أي أن التنفيذ للتابع الأعمق أولاً
أو ممكن أكتب بالطريقة التالية:
Select ename from emp where substr( lower(ename),1,1) ='m'
رد: دورة sql
بسم الله الرحمن الرحيم
مثال : إيجاد أسماء الموظفين اللذين تبدأ أسماءهم بحرف 'A','B','S', 'K'
الحل بطريقتين :
أولاً عن طريق التعليمة LIKE :
Select ename from emp where ename like 'A%' or
ename like 'B%' or
ename like 'S%' or
ename like 'K%'
الحل بطريقة substr:
Select ename from emp where substr(upper(ename),1,1) In ('A','B','S','K')
مثال : إيجاد أسماء الموظفين اللذين تبدأ أسماءهم بحرف 'A','B','S', 'K'
الحل بطريقتين :
أولاً عن طريق التعليمة LIKE :
Select ename from emp where ename like 'A%' or
ename like 'B%' or
ename like 'S%' or
ename like 'K%'
الحل بطريقة substr:
Select ename from emp where substr(upper(ename),1,1) In ('A','B','S','K')
سيظهر عندك نفس الجواب
التعليمة substr ضمن عبارة order by:
مثال : رتب أرقام الموظفين حسب أول رقمين ؟؟
Select ename ,substr(empno,1,2) dd
from emp Order by dd
ملحوظة هامة جدا: يمكن استخدام أعداد سالبة ضمن الstart عندها العد سيبدأ من نهاية السلسلة
مثال:أوجد أسماء الموظفين الذين تنتهي أسماؤهم بحرف ال's'
الحل:
Select ename ,substr( ename,-1) from emp where substr(ename,-1)='S'
الحل بطريقة أخرى
Select ename ,substr( ename, length(ename)) from emp where substr(ename,length(ename))='S'
لاحظ الأجوبة نفسها .
ملاحظة هناك تعليمة تصف لك الجداول تكون على الشكل التالي
Describe tablename كمثال على ذلك لاحظ
لم ينتهي الدرس العاشر بعد بإذن الله سأعود بعد قليل
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى