آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تاپیک مرجع اصلی دستورات SQL و مباحث طراحی و پیاده سازی دیتابیس

hamid_sub7  10 سال پیش  10 سال پیش
+5 0

سلام دوستان قصد دارم این تاپیک رو با توجه به عنوانی که انتخاب کردم به موضوعاتی با توجه به اینکه در طول طراحی و پیاده سازی پروژه وب در بعضی مواقع حتی ما Select هایی رو که در باطن خیلی ساده هستن اما با توجه به خستگی و گسترده شدن پروژه دیگه ذهن اجازه فکر کردن نداره و همین باعث میشه روزها وقت بخاطر همین موضوع بگذره...

اما هدف بنده اینه که ما با هر مشکلی در زمینه طراحی و پیاده سازی بانک اطلاعات و نرمال سازی و دستورات DDL و DML مواجه میشیم اینجا مطرح کنیم و تا بتونیم هر چه سریع تر مشکلات خودمون رو حل کنیم.

و من در ادامه یکسری موضوعات در رابطه با دستورات DML رو قرار میدم و قصد دارم از مباحث مبتی تا مباحث پیشرفته رو همگی با هم اینجا مطرح کنیم و بعد از دستورات SQL به طراحی و پیاده سازی بانک و نرمال سازی و StoreProcedure ها و Triger ها البته انشاله اگه خدا بخواد %

دوستان هر گونه انتقاد و پیشنهادی رو دارید لطفا به عنوان نظر در همین جا درج کنید تا اگر دوستان خواستند این تاپیک ادامه پیدا کنه نظم تاپیک بهم نخوره و در صورت رضایت از این پیشنهاد تاپیک رو پسند نماید % با تشکر از همه دوستان

 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
hamid_sub7  10 سال پیش
+1 0

در ابتدا لازمه بدونیم که ما در SQL دو نوع دستورات داریم DDL و DML که دستورات DDL  به دستورات مبدا sql معروف هستند مانند دستور Create و Drop اما دستورات DML به دستورات پردازشی معروف اند و بیشتر کار ما با این دستورات است مانند Select و Insert و Update و غیره... که ما در زیر به انواع مدل های استفاده دستور Insert میپردازیم :

 INSERT INTO students (`Number`,FName,LName,`Status`,Field) VALUES(1,'علی','مرادی',1,2);

دستور فوق همانطور که مشاهده میکنید به ترتیب ابتدا نام فیلدهای موجود در جدول ذکر گردیده شده و سپس بعد از کلمه کلیدی VALUES مقادیر آورده میشود. اما در قسمت فیلدها عبارت Number و Status در کاراکتر backtick که در کیبرد بالای دکمه tab قرار دارد آورده شده است و دلیل آن این میباشد که این کلمه های در SQL رزرو شده هستند و با قراردادن backtick به SQL میفهمانیم که به ما اجازه استفاده از این کاراکتر را بدهد البته بعضی از کلمه ها مانند name در sql رزرو شده است اما با توجه به اینکه کاربرد آن زیاد میباشد sql به کاربران اجازخ میدهد بدون backtick نیز از آن استفاده کنند اما در قراردادها آمده است که استفاده از backtick در این موارد بهتر است.


 

INSERT INTO students (FName,`Status`,Field) VALUES('محسن',5,1);

در دستور Insert بالا همانطور که مشاهده میکنید ما دیگر نامی از Lname نیاوردیم و مقداری را برایش ارسال نکردیم بنابراین با null مقداردهی خواهد شد.


INSERT INTO students VALUES('مریم','شکوهی',2,3);

در دستور Insert فوق ما دیگر نام فیلدها رو ذکر نکردیم و تنها مقدار ارسال کردیم باید توجه داشت که حتما در اینصورت باید مقادیر به ترتیب و تمام فیلدها برایشان مقدار ارسال شود.


 

 INSERT INTO students VALUES
(1,'احسان','احمدی',3,4),
(2,'هاشم','نورعیسی',3,3);

همانطور که در دستور فوق مشاهده میکنید ما میتوانیم در این روش حتی چند رکورد ارسال کنیم و سپس در دیتابیس درج شود %

پاسخ به سوال 
hamid_sub7  10 سال پیش
0 0

انواع مدل های استفاده از دستور Select  سری اول:


SELECT * FROM city;

دستور Select فوق با استفاده از کاراکتر * تمام فیلدهای موجود در جدول city را نمایش میدهد.


SELECT * FROM city WHERE Population > 80000;

دستور Select فوق تمام مشخصات شهرهایی که بالای 80000 نفر جمعیت دارند را نمایش میدهد


 

SELECT * FROM city WHERE Population > 80000 ORDER BY Population;

دستور Select فوق تمام مشخصات شهرهایی که بالای 80000 نفر جمعیت دارند را نمایش میدهد و با دستور ORDER BY تمام رکورد ها براساس Population که جمعیت میباشد بصورت صعود مرتب میکند.


 

 SELECT * FROM country ORDER BY Name ASC , Population DESC;

دستور Select فوق تمام مشخصات شهرها را نمایش میدهد اما ابتدا تمام رکوردها را بر اساس Name بصورت صعودی و سپس شهرهایی که از نظر Name نسبت به هم اولویت یکسان دارند را براساس Population بصورت نزولی نمایش میدهد. یعنی در دستورات Sql پارامتر سمت چپ دارای اولویت بیشتر نسبت به پارامتر سمت راست هستند.

* توجه داشته باشید همانطور که در یک مثال قبلتر هم مشاهده فرمودید اگر برای دستور ORDER BY پارامتری ارسال نشود بصورت صعودی مرتب خواهد کرد.


SELECT * FROM city LIMIT 5;

دستور Select فوق تمام مشخصات 5 شهر بالاتر در جدول city را نمایش میدهد.


 

SELECT * FROM city WHERE Population BETWEEN 80000 AND 200000;

دستور Select فوق تمام مشخصات شهرهایی که جمعیت آنها بین 80000 نفر تا 200000 نفر است را نمایش میدهد.


 

SELECT * FROM city WHERE Population > 80000 AND `Name` BETWEEN 'آستارا' AND 'شیراز';

دستور Select فوق تمام مشخصات شهرهایی را که جمعیت آنها بیش از 80000 نفر است و نام آنها بین شهرهای آستارا و شیراز قرار دارد را نمایش میدهد.


 

 SELECT * FROM city WHERE Name IN ('آستارا' , 'رشت' , 'شیراز');

دستور Select فوق تمام مشخصات شهرهایی را که نام آنها آستارا ، رشت ، شیراز است را نمایش میدهد.


 

SELECT * FROM city WHERE Population IS NULL;

دستور Select فوق تمام مشخصات شهرهایی که جمعیت آنها null است را نمایش میدهد و اگر بخواهیم بالعکس این قضیه عمل کنیم از عبارت NOT IS NULL استفاده میکنیم.


 

SELECT * FROM city WHERE `Name` LIKE '%کر%';

دستور Select فوق تمام مشخصات شهرهایی را که در نامشان عبارت (کر) وجود دارد را نمایش میدهد کاراکتر % در اول و آخر باعث میشود که فرقی نداشته باشد عبارت (کر) در کجای اسم قرار دارد مانند کرمانشاه و کرمان و غیره. اما حال اگر بخواهیم بگویم که شهرهایی را که حتما با عبارت (کر ) شروع شود را نمایش دهد باید کاراکتر % را از اول عبارت برداریم.


 

SELECT * FROM city WHERE `Name` LIKE '_ر';

در دستور Select فوق تمام مشخصات شهرهایی را که نامشان فرقی ندارد با چه حرفی شروع شود اما حرف دوم (ر) باشد شروع میشود. باز مانند کرمان. باید بگویم که _ این کار را انجام داد.


 

توجه داشته باشد که ما در حالی نام جدول مانند city را آوردیم و ازش استفاده کردیم که در دیتابیس آن قرار داریم اما در بعضی موقع ما در یک دیتابیس دیگر هستم مثلا University اما میخواهیم به جدول city در یک دیتابیس دیگر دسترسی پیدا کنیم برای این منظور نام دیتابیس باید قبل از نام جدول با . بیاید. اما بهتر است که همیشه عادت کنیم نام جدول ها را با نام بانک استفاده کنیم.

بزودی سری دوم از دستورات Select گذاشته خواهد شد  %

+1 0
Population > 3000000 توو متن اشاره شده بیش از 80 هزار (10 سال پیش)
پاسخ به سوال 
hamid_sub7  10 سال پیش
+1 0

انواع مدل های استفاده از دستور Select  سری دوم:

در این سری از دستورات Select میخواهم به مباحث پیشرفته تر از دستورات Select بپردازم و البته هنوز حرفی از Join کردن ها زده نخواهد شد.

SELECT 2 + 3 * 2;

همانطور که در مثال فوق مشاهده میکنید با دستورات Select براحتی میتوان عبارات محاسباتی را انجام داد.


 

SELECT POW(2 , 3) AS Result;

در مثال فوق با استفاده از تابع POW خود Sql عدد 2 را به توان 3 میرسانیم و سپس با کلمه کلیدی As یک ستون بصورت مجازی ایجاد میکنیم که اسمش Result میباشد باید بدانید که ستون هایی که با کلمه کلیدی As ایجاد میشوند در دنیای دیتابیس ها وجود واقعی ندارند اما در آینده مشاهده خواهید کرد که بسیار کاربر دارند.


 

SELECT DISTINCT cityName FROM student;

در مثال فوق با استفاده از تابع معروف و پرکاربرد DISTINCT ما نام شهرهایی را بدست می آوریم که یک دانشجو از آنجا دارد. بزارید ساده تر بگم مثلا تو جدول Student ما 20 دانشجو از تهران و 10 دانشجو از شیراز و 15 دانشجو از همدان و غیره حال میخواهیم ببینیم از چه شهرهایی دانشجو داریم وقتی بدون کلمه ی کلیدی DISTINCT ما Select میگیریم شهر تهران 20بار و شیراز 10بار و همدان 15بار نمایش داده خواهد شد که اصلا خوشایند نیس و ما نمیتوانیم مثلا بفهمیم از چند شهر دانشجو داریم. در واقع کلمه ی DISTINCT از تکرار جلوگیری میکند و نام هر شهر را یک بار نمایش خواهد داد.


 

SELECT @tp := Population FROM city WHERE `Name` = 'آستارا';
SELECT * FROM city WHERE Population > @tp;

در مثال فوق ما میخواهیم مثلا شهرهایی را که جمعیت آنها بالاتر از شهر آستارا است را نمایش دهد. اما میدانیم که نمیشود در شرط اسم شهر ا بگذاریم. بنابراین در دستور اول ابتدا جمعیت شهری را که اسمش آستارا است را در متغیری بنام tp بریز. بنابراین متوجه شدیم که برای تعریف و مقداردهی چگونه عمل خواهیم کرد و سپس در دستور بعد میگویم تمام مشخصات شهرهایی را که جمعیت آنها بیشتر از مقدار متغیر tp است را نمایش دهد.


 

SELECT AVG(Population) AS Average FROM city;

در مثال فوق با استفاده از تابع پرکاربرد AVG میانگین جمعیت تمام شهرهای را بدست آورده ایم و سپس یک ستون با کلمه کلیدی AS ایجاد میکنیم و مقدار را در آن ستون نمایش میدهیم.


 

SELECT FLOOR(AVG(Population)) AS Average FROM city;

در مثال فوق چون در مثال قبل تابع میانگین یک عدد اعشار را نمایش میداد اما در این مثال فوق با کمک تابع FLOOR مقدار میانگین را رند یا کف بدست آورده ایم.

 


 

SELECT SUM(Population) AS Total FROM city WHERE Population > 80000;

در مثال فوق مجموع جمعیت شهرهایی را که جمعیتشان بالای 80000 نفر است را بدست میاورد و در یک ستون مجازی بنام Total قرار میدهد.


 

SELECT COUNT(*) AS Records FROM city WHERE Population > 80000;

در مثال فوق با استفاده از دستور COUNT با پارامتر * میگویم تعداد تمام رکوردهایی را که جمعیت شهرشان بالاتر از 80000 نفر است را نمایش دهد.


 

SELECT MIN(Population) AS MIN , MAX(Population) AS MAX FROM city;

در مثال فوق با استفاده از تابع MIN شهری را که کمترین جمعیت دارد را در ستونی بنام MIN و شهری را که بیشترین جمعیت را دارد در ستونی بنام MAX نمایش میدهد.

 

بزودی سری سوم از دستورات Select گذاشته خواهد شد %

پاسخ به سوال 
hamid_sub7  10 سال پیش
0 0

انواع مدل های استفاده از دستور Select سری سوم :

SELECT CONCAT(FName, ' ' , LName) AS FullName FROM students;

در دستور بالا هدف آموزش CONCAT کردن میباشد یعنی الحاق رو رشته به یکدیگر مثلا در دستور بالا ما FName و LName رو بدست می آوریم و باید کاراکتر فاصله بهم میچسبانیم و در آخر بوسیله AS در یک ستون مجازی بنام FullName نمایش میدهیم.


 

SELECT LOWER(`Name`) AS LName , UPPER(`Name`) AS UName FROM city;

در دستور بالا دستور LOWER نام شهرها را به کوچک و دستور UPPER نام شهرها را به بزرگ تبدیل میکند و در ستونهای مجازی UName و LName نمایش میدهد.


 

SELECT LENGTH(`LName`), `LName` FROM students;

در دستور بالا تابع LENGTH طول کاراکتر ها را بر حسب بایت نمایش میدهد. اما این تابع برای کاراکترهایی که یونیک نیستند 2بایت نمایش میدهد. مثلا :  ali---> 3byte و علی--->6byte


 

SELECT CHAR_LENGTH(LName), LName FROM students;

دستور فوق بوسیله تابع CHAR_LENGTH طول کاراکترها را بر اساس تعداد کاراکترها نمایش میدهد و بین کاراکترهای یونیک و غیریونیک فرقی قائل نیست.


 

SELECT LEFT(`Name` , 2) AS lft , RIGHT(`Name` , 3) AS rgt , `Name` FROM city;

دستور فوق بوسیله تابع LEFT به تعداد 2 کاراکتر از چپ و تعداد 3 کاراکتر از راست را نمایش میدهد.


 

بزودی سری چهارم از دستورات Select که کار با زمان و تاریخ میباشد ارائه خواهد شد %


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .