سلام
پيشنهاد به آقا فرهاد:
برايJoin كردن اگه Left Join ، Right Join , Inner Join رو هم بگيد خوبه
Printable View
سلام
پيشنهاد به آقا فرهاد:
برايJoin كردن اگه Left Join ، Right Join , Inner Join رو هم بگيد خوبه
سلامنقل قول:
همونطور که DrXoX عزیز هم گفته، JOIN در sql موارد INNER JOIN , LEFT JOIN , RIGHT JOIN رو داره که توضیح میدم:
شکل کلی دستور در INNER JOIN :
شکل کلی دستور در LEFT JOIN :کد:
SELECT field1, field2, field3
FROM first_table
INNER JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield
شکل کلی دستور در RIGHT JOIN :کد:
SELECT field1, field2, field3
FROM first_table
LEFT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield
مثال برای Inner Join :کد:
SELECT field1, field2, field3
FROM first_table
RIGHT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield
تفاوت inner , left , right :کد:
with adoquery1 do begin
close;
sql.Clear;
sql.Add('select inventory.name, inventory."cost", orders.fname, orders.lname');
sql.Add('from inventory');
sql.Add('inner join orders');
sql.Add('on inventory.no=orders.no');
open;
end;
در Inner join تمام رکوردهای دو جدول، هر جا که شرط مطابقت داشته باشه نمایش داده میشه و اگر در جدول اول رکوردی وجود داشته باشه که با هیچ رکوردی از جدول دوم مطابقت نداشته باشه، در نتیجه نهایی نمایش داده نمیشه.
در Left join تمام رکوردها از جدول اول نمایش داده میشه، حتی اگر با هیچ رکوردی از جدول دوم مطابقت نداشته باشه.
Right join برعکس left join عمل میکنه و تمام رکوردهای جدول دوم رو نمایش میده، حتی اگر با هم مطابقت نداشته باشند.
با روش آزمون و خطا و مثالهای مختلف میتونین دقیقا متوجه شین که کار این دستورات چی هست.
پیروز باشید
دستت درد نكنه خيلي عالي بود:10:
دوست عزیز.
من متوجه نشدم.
چرا یاید از Left Join یا Right Join استفاده کرد.
چون اینجوری که انگار فقط یکی از تیبلها رو فراخوانی کردیم و اونوفق Join کجاست ؟
با اجازه استادنقل قول:
هنگامي از inner join استفاده مي کنيم که کليد در هر دو جدول مقدار داشته باشد و فقط در اين صورت رکوردهاي متناظر با هم Join مي شوند اما در Left Join يا Right Join يکي از جدولهاي چپ يا راست فقط کافي است حاوي شرط تلفيق باشد (خيلي خلاصه گفتم)
با تشکر از MasterData عزیز.
با مثال توضیح میدم:
زمانی که از inner join استفاده میشه تمام رکوردهایی لیست میشه که با شرط ما مطابقت داشته باشه. یعنی در جدول orders کالایی سفارش داده شده که در جدول inventory موجود هست.
اگر از left join استفاده کنیم علاوه بر لیست شدن رکوردهایی که با شرط مطابقت دارند، بقیه رکوردهای جدول اول هم در نتیجه نهایی هست. یعنی کالاهایی که کسی اونها رو سفارش نداده.
و در صورتی که از right join استفاده کنیم، باز هم علاوه بر لیست شدن رکوردهایی که با شرط مطابقت دارند، بقیه رکوردهای جدول دوم هم در نتیجه نهایی هست. یعنی سفارشاتی که کالای مورد سفارش در جدول inventory معرفی نشده.
پیروز باشید
مثال فرهاد جان کاملا درسته
برای درک بهتر مطلب شکل زیر فکر کنم خوب باشه
DrXoX عزیز مثال خیلی خوبی هست و برای درک کامل مطلب کمک زیادی میکنه.
مر30 به خاطر همکاری دوستان عزیز
یکی دیگه از توابعی که میتونه مفید باشه IS NULL هست.
این تابع زمانی کاربرد داره که شما میخوای تمام فیلدهای null (خالی) رو پیدا کنی.
شکل کلی دستور:
کد زیر تمام رکوردهایی رو برمیگردونه که فیلد name اونها خالی هست:کد:
SELECT Column FROM table WHERE column IS NULL
توجه کنید که null با space (" ") تفاوت داره.کد:
with adoquery1 do begin
close;
sql.Clear;
sql.Add('select * from inventory where name is null');
open;
end;
اگر خواستید رکوردهای پر شده رو پیدا کنید، دستور رو به صورت زیر تغییر بدید:
پیروز باشیدکد:
select * from table where FieldName is not null
دوستان.
من نتوستم فرق "" با Null رو پیدا کنم ولی در بعضی مسائل تفاوت دارند.
میشه لطفا توضیح بدید ؟