الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مجموعة من الاسئلة فى قواعد البيانات

بدأه shosho842000 في 12 فبراير 2012 · 8 رد · 2,076 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كان عندى بعض الاستسفارات والاسئلة على كام حاجة كدا من الاخوة الاعضاء

1- patindex دا بيرجع ليا ببداية موقع الكلمة ولو معملتش condition in select هيرجع ليا بكل مواقع الكلمات سواء كانت موجودة او مش موجودة

هو دا بيتسخدم لمعرفة موقع الكلمة كا string فقط ولا ممكن على اى نوع من البيانات

مش فاهما معنى الفقرة دى ممكن حد يوضحها

if either pattern or expression is null , patindex returns null when the database compatibility level is 70 . if the database compatibility level is 65 or earlier , patindex returns null only when both pattern and expression are null.

2- ما معنى كلمة collate

3- هو فى حالة row_number بيعمل على عمل ترقيم متسلسل للصفوف

rank هو بيعمل على ان كل رقم متكرر بياخذ رقم واحد ولما بيتغير بيتغير على حسب ترتيبه فى الصف

dense_rank بيعمل زى rank بس الرقم لما بيتغير بيتغير على حسب ترتيبه فى التسلسل

ntile(4) هو ليه بيقسم كل 3 صفوف بيديهم نفس الرقم يعنى اول 3 صفوف بتاخذ 1 وبعدها تانى 3 صفوف بتاخذ رقم 2 وهكذا

4- ممكن شرح للخاصية set ansi_nulls بس بالعربى

5- ممكن شرح للpivot and unpivot table بس بالعربى

6- هو ليه لما بعمل unique nonclustered index بعمل ignore_dup_key=on ممكن اعرف ليه انا لو اعلنت عنه كدا لوحده هيكون يمنع التكرار ايه لزمتها انى اعمل الاختيار دا

7- ممكن اعرف ايه معنى كلمة partition فى الجملة دى

rank () over (partition by type order by date asc )

شكرا ليكم

#2

السلام عليكم.

الأجوبة:

1) هذا التابع يستخدم لل string فقط و compatibility level المقصود منها رقم نسخة SQL Server المستخدمة و المقصود بالجملة هو أنه إذا كان أحد البارميترين null فإن التابع يعيد القيمة null و في النسخ القديمة يعيد null فقط في حالة كان كلا الباراميترين null.

2) collate هو نظام الترميز المعتمد لقاعدة البيانات و ذلك للبيانات التي هي ليست Unicode و يفيد أيضاً بتحديد طريقة عمل ترتيب النصوص و مقارنتها.

3) السؤال غير واضح !!

4) هذه التعليمة تستخدم لتحديد كيفية معالجة قيم ال null في جزء where من تعليمة sql.

SET ANSI_NULLS ON

و هو ISO Standard و سيكون دائماً ON في نسخ سيكوال سيرفر المستقبلية.

تعني أن تعليمة select التي فيها WHERE column_name = NULL لن تعيد أي سجل حتى ولو كانت قيمة العمود column_name هي null

وتعني أيضاً أن تعليمة select التي فيها WHERE column_name <> NULL لن تعيد أي سجل حتى ولو كانت قيمة العمود column_name هي ليست null

SET ANSI_NULLS OFF

تعني أن تعليمة select التي فيها WHERE column_name = NULL ستعيد السجلات التي تكون قيمة العمود column_name هي null

تعني أن تعليمة select التي فيها WHERE column_name <> NULL ستعيد السجلات التي تكون قيمة العمود column_name هي ليست null

5-6-7 ) سأحاول الاجابة عنها في أقرب فرصة ممكنة ( يرجى التذكير إذا نسيت )

#3

مرسى ليك بجد على الاجابة

ومنتظرة باقى الاجابات على باقى الاسئلة شكرا ليك

#4

السلام عليكم.

5) Pivot هو عملية تغيير قيم سطور جدول محدد إلى جدول آخر, بحيث يقوم بتدوير قيم عمود معين ( في كل الأسطر ) في الجدول الأول و جعلها أعمدة في الجدول الثاني و يستخدم في عمليات التقارير التجميعية, و UnPivot هو العملية المعاكسة تماماً له.

6) عند إنشاء ال unique nonclustered index هناك حالتين:

ignore_dup_key=off و تعني عند محاولة إدخال قيمة للعمود موجودة مسبقاً فإنه سيعطي "خطأ" و يمنع تنفيذ الادخال.

ignore_dup_key=on و تعني عند محاولة إدخال قيمة للعمود موجودة مسبقاً فإنه سيعطي "تحذير" و يسمح باتمام عملية الادخال.

7) ال Partition هنا تعني أنه يتم تجزئة بيانات الجدول على حسب العمود المحدد (type) و من ثم لكل جزء من الناتج يتم تطبيق التابع ( Rank ) عليه.

#5

شكرا ليك بجد

بس معذرة مفمتش حاجة ممكن توضيح مع مثال علشان افهم

اصل الحاجات دى مش فاهما خالص

#6

طيب, سأحاول شرح كل سؤال على حدة حسب التيسير.

1) PatIndex

هو تابع يستخدم لتحديد مكان ظهور أول تشابه للتعبير الذي تم تحديده.

الشكل القياسي للتابع:

PATINDEX ( '%pattern%' , expression )

حيث pattern هو شكل التعبير المراد البحث عنه

expression : هو التعبير المراد البحث ضمنه.

إذا لم يتم ايجاد التعبير, فالتابع يرجع القيمة 0

مثال:

SELECT PATINDEX (‘%amp%’, ‘It is an example’)

نتيجة التابع تكون: 12 لأن amp تم إيجادها في التعبير ‘It is an example’و في العمود 12

#7

2) collate هو نظام الترميز المعتمد لقاعدة البيانات و ذلك للبيانات التي هي ليست Unicode و يفيد أيضاً بتحديد طريقة عمل ترتيب النصوص و مقارنتها.

و هذا الترميز يمكن أن يكون على عدة مستويات: على مستوى السيرفر , و على مستوى قاعدة البيانات و على مستوى العمود.

هذا مثال عن استخدامه:

CREATE TABLE employees (surname CHAR(20) COLLATE Arabic_CI_AI_KS)
#8

3) الفرق بين Rank و Dense_Rank هو كالتالي:

لنفترض أنه لدينا جدول الموظفين و بها رواتبهم, إذا أردنا جلب قائمة الموظفين مع رواتبهم و ترتيبهم تنازلياً :

محمد - 5000

عبد الله - 7000

عمر - 7000

فالنتيجة حسب Rank تكون:

عبد الله - 7000 - 1

عمر - 7000 - 1

محمد - 5000 - 3

الفريق العربي للبرمجةد الله و عمر لهما نفس الراتب لذلك يكون ال Rank لكليهما نفس الرقم 1 و ترتيب محمد يكون 3 لأنه يوجد اثنين قبله في الترتيب.

الآن Dense_Rank تلغي هذه الفراغات في النتيجة فيظهر كالتالي:

عبد الله - 7000 - 1

عمر - 7000 - 1

محمد - 5000 - 2

4) أعتقد أنه تم شرحها بالتفصيل سابقاً.

على كل إذا كانت ماتزال غير واضحة, يمكن الطلب لتفصيلها أكثر.

#9

5) ال Pivot :

هذا مثال يستخدم قاعدة بيانات AdventureWorks الشهيرة:

USE AdventureWorks2008R2 ;
GO
SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost 
FROM Production.Product
GROUP BY DaysToManufacture;

نتيجة الاستعلام تكون كالتالي:

DaysToManufacture          AverageCost

0                          5.0885

1                          223.88

2                          359.1082

4                          949.4105

كما يظهر من الناتج: فإن العمود DaysToManufature تم استخدامه لتجميع البيانات على أساسهو يتم حساب متوسط التكلفة لكل قيمة.

الآن يتم تطبيق ال Pivot:

SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;

فيتم قلب الأسطر إلى أعمدة و تكون النتيجة:

Cost_Sorted_By_Production_Days    0         1         2           3       4       

AverageCost                       5.0885    223.88    359.1082    NULL    949.4105

هذا المثال مأخوذ من موقع MSDN.

6) أعتقد أنها واضحة !

7) ال Partition يفيد في تقسيم ناتج الاستعلام إلى أقسام حسب قيم عمود يتم تحديده و من ثم يتم تطبيق توابع ال Ranking على كل قسم على حدة.

فمثلاُ: إذا استخدمنا نفس مثال الموظفين و رواتبهم, يمكن أن نقسم الموظفين على حسب أعمارهم ( Partition by Age ) و من ثم نطبق تابع ال Rank على كل مجموعة عمرية .

مواضيع مشابهة