اسم | المعرف |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
اسم | المعرف |
1 | aa |
2 | bb |
3 | cc |
حدد معرفًا مميزًا، الاسم في #ر من الجدول 1 احذف الجدول 1 إدراج في الجدول 1 يختار * من #ر |
معرف | مهارات | الموظفين |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
حدد الموظف من [الجدول] حيث الموظف (اختر الموظف من [الجدول] حيث المهارة='VB') والمهارة='PHP' |
3. مشكلات دمج قاعدة البيانات
هناك جدولان في الوصول أريد دمج محتويات الجدولين.
يحتوي الجدول [أ] على البنية التالية:
[المعرف] | الرقم | التلقائي |
[الاسم] | نص | الاسم |
[السعر] | رقم | السعر |
[guige] | نص | المواصفات |
[changjia] | نص | الشركة المصنعة |
[baozhuang] | نص | التغليف |
[danwei] | نص | الوحدة |
يوجد إجمالي 900 سجل باستثناء حقول المعرف والاسم، يمكن أن تكون جميع السجلات الأخرى فارغة.
يحتوي الجدول [ب] على البنية التالية:
[المعرف] | الرقم | التلقائي |
[الاسم] | نص | الاسم |
[السعر] | رقم | السعر |
[changjia] | نص | الشركة المصنعة |
[danwei] | نص | الوحدة |
[xingzhi] | نص | الملكية |
يوجد إجمالي 800 سجل باستثناء حقلي المعرف والاسم، هناك عدد قليل من الحقول أقل من الجدول [a]، ولكن هناك حرف [xingzhi] آخر يمكن أن يكون فارغًا.
الآن أريد إنشاء جدول جديد [ج] بالبنية التالية، والمحتوى هو مجموع محتويات الجدولين.
[المعرف] | الرقم | التلقائي |
[الاسم] | نص | الاسم |
[السعر] | رقم | السعر |
[guige] | نص | المواصفات |
[changjia] | نص | الشركة المصنعة |
[baozhuang] | نص | التغليف |
[danwei] | نص | الوحدة |
[xingzhi] | نص | الطبيعة |
يمكنك استخدام عبارات SQL، أو العمليات اليدوية، أو XML. لا تقلق بشأن كيفية تنفيذها، فسوف أشعر بالاكتئاب الشديد. إذا كان علينا إدخال 800 سجل، فسوف أموت.
إجابة:
1. بهذه الطريقة
أدخل في ج (المعرف، الاسم، .....) حدد الهوية، الاسم، ..... من أ أدخل في ج (المعرف، الاسم، .....) حدد الحد الأقصى (المعرف) +1، الاسم، ..... من ب |
2. التصحيح:
إذا تم تنفيذه مباشرة في محلل الاستعلام:
أدخل في ج (الاسم،....) اختر الاسم،..... من أ أدخل في ج (الاسم،....) اختر الاسم،..... من ب |
3. استخدم طريقة الاتحاد
أدخل في [c] ([id]، الرقم، الرقم التلقائي) حدد [المعرف]، الرقم، الرقم التلقائي من [a] الاتحاد حدد [المعرف]، الرقم، الرقم التلقائي من [b] |
4.ASP الحل
<% 'الكشف عن حلقة الجدول أ تعيين rs = Server.CreateObject("ADODB.RECORDSET") rs.open "اختر * من الطلب حسب المعرف"،conn,1,1 افعل بينما لا rs.eof استدعاء actAdd(rs("name")) 'استدعاء وظيفة مثل إضافة محتوى إلى الجدول ب! rs.MoveNext حلقة إغلاق سيترز = لا شيء الفعل الفرعي Add(txt) خافت نهاية الخبر، SQL sql = "أدخل في قيم b(name)('"& txt &"')" تعيين ts = Conn.Execute(sql) ts.Close تعيين نهاية الخبر = لا شيء نهاية الفرعية %> |
5. الحل
<% خافت arr_temp1,arr_temp2,arr_data set rs=conn.execute("اختر المعرف،الاسم،السعر،guige،changjia،baozhuang،danwei من a") arr_temp1=rs.getrows rs. Close تعيين RS=لا شيء set rs=conn.execute("اختر المعرف،الاسم،السعر،guige،changjia،danwei،xingzhi من b") arr_temp2=rs.getrows rs. Close تعيين RS=لا شيء rem يبدأ المعالجة استبدل arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem ينسخ محتويات المصفوفتين. لقد كتبت هذا الجزء بنفسي، وقمت بعمل حلقتين، ثم قمت بتخزينه في قاعدة البيانات. %> |
أخيرًا قم بتحويل بعض عبارات SQL الكلاسيكية:
1. موصى به بواسطة Wawa: بعض عبارات SQL الرائعة
الوصف: انسخ الجدول (انسخ البنية فقط، اسم الجدول المصدر: أ، اسم الجدول الجديد: ب)
SQL: حدد * في b من حيث 1<>1
الوصف: نسخ الجدول (نسخ البيانات، اسم الجدول المصدر: أ، اسم الجدول الهدف: ب)
SQL: أدخل في b(a, b, c) حدد d,e,f من b;
الوصف: عرض المقالة والمرسل ووقت الرد الأخير
SQL: حدد a.title، a.username،b.adddate من الجدول أ، (حدد الحد الأقصى (adddate) adddate من الجدول حيث table.title=a.title) ب
الوصف: استعلام الانضمام الخارجي (اسم الجدول 1: اسم الجدول 2: ب)
SQL: حدد aa، ab، ac، bc، bd، bf من LEFT OUT JOIN b ON aa = bc
الوصف: جدولة التذكير قبل خمس دقائق
SQL: حدد * من الجدول حيث datediff('دقيقة',f وقت البدء,getdate())>5
الوصف: جدولان مرتبطان، احذف المعلومات الموجودة في الجدول الرئيسي غير الموجودة في الجدول الثانوي
SQL:
الحذف من المعلومات التي لا توجد (اختر * من infobz حيث info.infid=infobz.infid)
يوضح:--
SQL:
حدد A.NUM، A.NAME، B.UPD_DATE، B.PREV_UPD_DATE
من الجدول 1،
(حدد X.NUM، X.UPD_DATE، Y.UPD_DATE PREV_UPD_DATE
من (حدد NUM، UPD_DATE، INBOUND_QTY، STOCK_ONHAND
من الجدول 2
حيث TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(حدد NUM، UPD_DATE، STOCK_ONHAND
من الجدول 2
أين TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01','YYYY/MM/DD') - 1, 'YYYY/MM')) ) Y,
حيث X.NUM = Y.NUM (+)
وX.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
حيث A.NUM = B.NUM
يوضح:--
SQL:
حدد * من Studentinfo حيث لا يوجد (اختر * من Student حيث Studentinfo.id=student.id) واسم القسم ='"&strdepartmentname&"' واسم التخصص ='"&strprofessionname&"' الترتيب حسب الجنس ومكان الطالب الأصلي وإجمالي الكلية درجة امتحان القبول
يوضح:
الحصول على إحصائيات فاتورة الهاتف لكل وحدة لمدة سنة من قاعدة البيانات (حصة فاتورة الهاتف، التهاني، قائمة البرقيات والأسمدة، جدولين المصدر)
SQL:
حدد a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) في مايو،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) في سبتمبر،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) في أكتوبر،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) في نوفمبر،
SUM(فك التشفير(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
من (حدد a.userper، a.tel، a.standfee، b.telfeedate، b.factration
من TELFEESTAND أ، TELFEE ب
حيث a.tel = b.telfax) أ
المجموعة حسب a.userper، a.tel، a.standfee، TO_CHAR(a.telfeedate، 'yyyy')
الوصف: مشكلة استعلام مشترك لأربعة جداول:
SQL: حدد * من الصلة الداخلية اليسرى b على aa=bb الصلة الداخلية اليمنى c على aa=cc الصلة الداخلية d على aa=dd حيث .....
الوصف: احصل على أصغر رقم معرف غير مستخدم في الجدول
SQL:
حدد (الحالة عند وجودها (SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) كمعرف HandleID
من المقبض
أين لا يوجد معرف المقبض (حدد أ.معرف المقبض - 1 من المقبض أ)
2. إزالة البيانات المكررة
1. حالة وجود مفتاح أساسي
أ. معرف الحقل الفريد (المفتاح الأساسي الفريد)
حذف الجدول
حيث معرف ليس في
(
حدد الحد الأقصى (المعرف) من مجموعة الجدول حسب col1، col2، col3...
)
الحقل الذي يلي جملة المجموعة حسب هو الشرط الذي تستخدمه لتحديد التكرار. على سبيل المثال، إذا كان هناك col1 فقط، فطالما أن محتويات حقل col1 هي نفسها، فهذا يعني أن السجلات هي نفسها.
ب. أن يكون لديه مفتاح أساسي مشترك
افترض أن col1+','+col2+','...col5 هو المفتاح الأساسي المشترك
حدد * من الجدول حيث col1+','+col2+','...col5 في (
حدد الحد الأقصى (col1+','+col2+','...col5) من الجدول
حيث وجود العد (*)> 1
المجموعة حسب col1، col2، col3، col4
)
الحقل الذي يلي جملة المجموعة حسب هو الشرط الذي تستخدمه لتحديد التكرار. على سبيل المثال، إذا كان هناك col1 فقط، فطالما أن محتويات حقل col1 هي نفسها، فهذا يعني أن السجلات هي نفسها.
ج: القاضي في جميع المجالات
حدد * في #aa من مجموعة الجدول بواسطة id1، id2،....
حذف الجدول
أدخل في الجدول
اختر * من #أأ
2. الوضع بدون المفتاح الأساسي
ج: يتم التنفيذ باستخدام الجداول المؤقتة
حدد الهوية (int,1,1) كمعرف،* في #temp من ta
حذف #درجة الحرارة
حيث معرف ليس في
(
حدد الحد الأقصى (المعرف) من # المجموعة حسب col1، col2، col3...
)
حذف الجدول تا
أدخل في تا (...)
حدد ..... من #temp
ب: يتم التنفيذ عن طريق تغيير بنية الجدول (إضافة حقل فريد)
تغيير جدول الجدول وإضافة هوية newfield int (1،1)
حذف الجدول
حيث نيوفيلد ليس في
(
حدد min(newfield) من مجموعة الجدول بجميع الحقول باستثناء الحقل الجديد
)
تغيير الجدول إسقاط العمود نيوفيلد