آموزش sql

دستورات SQL، نمونه کدها و کوئری ها

دستورات SQL برای ارتباط زبانهای برنامه نویسی با پایگاه داده های رابطه ای مثل MySQL و SQLServer و… به کار میرود. از این دستورات برای درج، حذف، ویرایش و استخراج داده ها از پایگاه داده به کار می رود.

انواع دستورات SQL

انواع دستورات SQL به چهار بخش تقسیم می شود که به طور مختصر به آن CRUD گفته می شود. یعنی

  • درج داده در پایگاه داده
  • ویرایش داده در پایگاه داده
  • حذف داده از پایگاه داده
  • استخراج داده های پایگاه داده

در این قسمت مثالهای هر کدام را خواهیم گفت.

مثالهای دستورات و کوئری های SQL

ثبت داده در پایگاه داده

INSERT INTO table (column1, column2, column3, ...) VALUES ("value1","value2",value3,...)

یا

INSERT INTO table VALUES ("value1","value2",value3,...)

برای درج داده در پایگاه داده از کد بالا استفاده می کنیم که table نام جدولی که می خواهیم داده ها در آن ذخیره شود، columnها نام ستونهای جدول و valueها هم مقادیری که باید ذخیره شود.

نکته ای که اینجا باید به آن توجه داشت این است که اگر مقدار از نوع رشته ای باشد حتما باید داخل کوتیشن نوشته شود اما برای مقادیر عددی اجباری نیست.

نکته ی بعدی اینکه اگر ستون از نوع Auto Increment باشد، نام و مقدار آن وارد نمی شود.

حذف داده از پایگاه داده

DELETE FROM table WHERE id=1

برای حذف داده از پایگاه داده از کوئری بالا استفاده می کنیم. نکته ی مهمی که باید در نظر بگیرید این است که اگر شرط WHERE تعیین نشود، تمامی داده ها و اطلاعات از جدول حذف خواهند شد.

ویرایش داده در پایگاه داده

UPDATE table SET column1_name='value1', column2_name=value2 WHERE id=1

در نمونه کد بالا در حال ویرایش رکوردی هستیم که id آن یک(1) می باشد. داده ستون اول و ستون دوم رکورد مورد نظر در جدول table ویرایش خواهد شد.

نکته ای که اینجا باید به آن توجه داشت این است که اگر مقدار از نوع رشته ای باشد حتما باید داخل کوتیشن نوشته شود اما برای مقادیر عددی اجباری نیست.

استخراج تعداد رکوردهای مشخص با استفاده از LIMIT

SELECT * FROM table WHERE id=10 LIMIT 5

در کد بالا از جدول table نتیجه Select فقط 5 رکورد از اول را باز میگرداند.

SELECT * FROM user WHERE username='admin' AND password='*****' LIMIT 1

از این روش می توان برای ورود (Login) نیز استفاده کرد. بدین صورت که در هنگام استخراج کاربر بر اساس نام کاربری و رمز عبور، Limit آن را یک در نظر می گیریم. این روش بخاطر مسائل امنیتی استفاده می شود.

SELECT * FROM table WHERE id=10 LIMIT 5 OFFSET 10

یا

SELECT * FROM table WHERE id=10 LIMIT 10, 5

در این مثال رکوردها از سطر یازدهم و به تعداد 5 رکورد بازگردانده خواهد شد. از این روش می توان برای صفحه بندی نتایج استفاده کرد.

استخراج داده های 24 ساعت اخیر

SELECT * FROM table WHERE register_date >= now() - INTERVAL 1 DAY

در این بخش قصد داریم رکوردهای 24 ساعت اخیر را از پایگاه داده استخراج کنیم. برای این کار از کد استفاده می کنیم.

در اینجا table نام جدول و register_date نام فیلدی است که تاریخ ثبت رکورد در آن قرار دارد.

ثبت داده در پایگاه داده براساس شرط

فرض کنید نیاز هست که اگر شرطی برقرار باشد، رکوردی در دیتابیس insert شود در غیر این صورت عمل insert انجام نگیرد. برای مثال شما قصد دارید محصولی را برای فروشگاه ثبت کنید، شناسه (ID) فروشگاه مورد نظر را از سمت کد دریافت کرده اید اما باید چک کنید ببینید که آیا این فروشگاه در پایگاه داده وجود دارد یا نه.

INSERT INTO products (product_id, store_id, product_name) SELECT 1,store.store_id,'My Product' FROM store WHERE store.store_id=4

در مثال بالا ما شناسه محصول را وارد میکنیم (عدد 1) سپس شناسه فروشگاه (برای مثال عدد 4) را از سمت کد دریافت کرده ایم (اما مطمئن نیستیم که این شناسه وجود دارد یا نه) و نام محصول را از کاربر گرفته ایم.

در قسمت داده ها ما به جدول store برای اعتبار سنجی شناسه فروشگاه select میزنیم و داده ها را وارد می کنیم و سپس در قسمت WHERE چک میکنیم که آیا فروشگاهی با شناسه عدد 4 وجود دارد یا نه.

اگر فروشگاهی با شناسه عدد 4 وجود داشته باشد چون شناسه فروشگاه منحصر بفرد هست فقط یک رکورد بازگشت داده میشود که داده های بازگشتی داده هایی است که ما وارد کرده ایم. در اینجا عدد یک به عنوان شناسه محصول، شناسه فروشگاه و نام محصول.

اگر شرط ما درست باشد و رکورد بازگشت داده شود، در جدول products عمل insert انجام داده خواهد شد اما اگر قروشگاهی با این شناه وجود نداشته باشد پس رکوردی بازگشت داده نخواهد شد و عمل insert بر روی جدول products هم اجرا نخواهد شد.

JOIN جداول

گاهی نیاز هست که برای استخراج داده ها، داده های چند جدول را باهم ادغام کنیم.

نام کاربرنام محصول
کاربر اولمحصول اول
کاربر دوممحصول دوم
کاربر سوممحصول سوم

برای مثال می خواهیم لیست بالا را نمایش دهیم. در این لیست نام کاربران در جدول user و نام محصولات در جدول product می باشد و این دو از طریق user_id با هم ارتباط دارند. برای این کار از JOIN جداول user و product استفاده می کنیم.

برای join جداول چند نوع وجود دارد که در زیر به آنها اشاره می کنیم.

برای مثال جداول زیر را داریم

شناسه مشتری (CustomerID)نام مشتری (CustomerName)شماره تماس (Contact)محل سکونت (Address)
1علی علیزاده09000000000تبریز
2حامد قربانی09111111111تهران
جدول Customers

و

شناسه سفارش (OrderID)شناسه مشتری (CustomerID)تاریخ سفارش (OrderDate)
1030821996-09-18
10309371996-09-19
جدول Orders

SQL JOIN یا همان INNER JOIN:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
JOIN یا همان INNER JOIN
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

خروجی به شکل زیر خواهد بود

شناسه سفارشنام مشتریتاریخ سفارش
10308حامد قربانی1996-09-18

همان طور که مشاهده می کنید شناسه سفارش و تاریخ سفارش از جدول سفارش ها و نام مشتری از جدول مشتری ها می باشد.

می توان چندین جدول را با هم join کرد که برای مثال برای سه جدول مانند زیر خواهد بود

SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID); 

SQL LEFT JOIN:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
SQL LEFT JOIN
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
نام مشتریشناسه سفارش
علی علیزادهNULL
حامد قربانی10308

کلمه کلیدی LEFT JOIN تمام رکوردها را از جدول سمت چپ (جدول اول) و رکوردهایی که با عبارت مساوی برابر باشد (اینجا Customers.CustomerID = Orders.CustomerID) را از جدول سمت راست (جدول 2) برمی گرداند. در صورت عدم تطابق ، هیچ رکوردی از سمت راست برگردانده نمی شود.

SQL RIGHT JOIN:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
SQL RIGHT JOIN
SELECT Orders.OrderID, Customers.CustomerName 
FROM Orders 
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID 
شناسه سفارشنام مشتری
10308حامد قربانی
NULLعلی علیزاده

کلمه کلیدی RIGHT JOIN تمام رکوردها را از جدول سمت راست (جدول دوم) و رکوردهایی که با عبارت مساوی برابر باشد (اینجا Customers.CustomerID = Orders.CustomerID) را از جدول سمت چپ (جدول اول) برمی گرداند. در صورت عدم تطابق ، هیچ رکوردی از سمت چپ برگردانده نمی شود.

SQL FULL OUTER JOIN یا FULL JOIN:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition; 
SQL FULL OUTER JOIN

کلمه کلیدی FULL OUTER JOIN هنگامی که در رکوردهای جدول سمت چپ (جدول اول) یا راست (جدول دوم) مطابقت داشته باشد ، تمام رکوردها را برمی گرداند.

نکته: برخی پایگاه داده ها از جمله MySQL از این دستور SQL پشتیبانی نمی کند بنابراین برای انجام این دستور از کوئری زیر استفاده می شود.

SELECT column_name(s) 
FROM table1
LEFT JOIN table2 
ON table1.column_name = table2.column_name
UNION ALL
SELECT column_name(s) 
FROM table1
RIGHT JOIN table2 
ON table1.column_name = table2.column_name

برای پایگاه داده MySQL از UNION ALL استفاده می کنیم

SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers 
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID 
UNION ALL 
SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers 
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID 
نام مشتریشناسه سفارش
حامد قربانی10308
علی علیزادهNULL
حامد قربانی10308
NULL10309

SQL SELF JOIN:

این نوع ادغام یک ادغام معمولی است که جدول با خودش join می زند.

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

منابع

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *