View Full Version : مرجع کدهای SQL
Mohammad Minaei
جمعه 06 خرداد 1384, 16:16 عصر
سلام دوستان!
دیدیم اینجا داره یواش یواش مرجع می شه! گفتیم ما هم بخش SQL شو افتتاح کنیم.
همشو تو اولین پست نمی گم!
فعلا:
SELECT * FROM Table
از جدولی به نام TABLE تمام فیلد ها را انتخاب می کند. برای انتخاب یک یا چند فیلد معین می توان بجای * نام فیلد رو گذاشت.
چون الان اشتراکم تموم می شه. بای
ولی حتما ادامشو می ذارم!
Mohammad Minaei
جمعه 06 خرداد 1384, 16:20 عصر
SELECT * FROM Authors where name="mohammad"
در اینجا ما اومدیم انتخابا رو محدود کردیم. یعنی فقط سطر هایی که نامشون محمده انتخاب می شن.
SELECT * FROM authors where description like "%cpp developer%"
اینجا ما انتخابامونو محدود به سطر هایی کردیم که توضیحاتشون شبیه cpp developer یا همون برنامه نویس C ه! :موفق:
Mohammad Minaei
شنبه 07 خرداد 1384, 11:55 صبح
:strange: با اون نوشتنمون فرومو آباد کردیم! حال درست کردنشم نداریم!
دیگه شما به بزرگی خودتون ببخشید. خوب! ادامه میدیم:
SELECT * FROM ebooks WHERE price < 100 AND price > 20
در اینجا ما از جدول ebooks یه سری سطرهارو انتخاب می کنیم که فیلد price اونها کمتر از 100 و بیشتر از 20 باشه. در اینجا می تونستیم بجای AND بذاریم OR که اونوقت تنها کتابهایی که یا قیمتشون کمتر از صد و یا قیمتشون بیشتر از 20 ه انتخاب می کنه.
حالا بعدی:
SELECT * FROM topics WHERE author not 'Mohammad Minaei'
در اینجا از جدول تاپیک ها تنها تاپیک هایی انتخاب می شن که نویسندشون محمد مینایی نباشه! عجب سلیقه ای!! :mrgreen:
SELECT name FROM users ORDER BY birthday date ASC
در اینجا ما فیلد name از جدول users رو انتخاب می کنیم. اما اونها رو مرتب سازی هم می کنیم. به طوری که از سطر های رکورد ما از اونایی که روز تولد کوچک تر (در نتیجه سن بیشتر!) دارن اول نمایش داده می شن. همین الان یه چیزی رو اضافه کنم! اونم اینه که ممکنه داخل یه جدول دو تا سطر یه فیلد مشابه داشته باشن. اونوقت ترتیب سازی به هم می خوره! اما نه!! SQL برای اینکار چاره اندیشیده :embr: شما خیلی راحت می تونین ترتیب ها رو اولویت بندی کنید. مثلا می گید بر اساس فیلد Age مرتب کنه. اگه دو تاشون مساوی بودن اونوقت اون دو تا (یا حتی چند تا رو) بر اساس تعداد پست ها مرتب کنه. ببینید:
SELECT * FROM users ORDER BY age ASC, posts DESC
عبارات SQL خیلی زیادن و بخش SELECT اونا هم در مقابل دیگر بخش ها زیاد بزرگ و گسترده نیست! ولی تا 5 ٬ 6 پست دیگه تموم می شه. بعد میریم سراغ تغییرات در جداول و ساختار اونا.
فعلا... :موفق:
Mohammad Minaei
یک شنبه 08 خرداد 1384, 14:17 عصر
خوب! دوستان عزیز. کجای کارید؟ تجربه کم من نشون میده که اگه می خوای یاد بدی٬ چند تا چیز کلیدی بگو٬ بعد بزار خودشون برن برنامه بسازن. (می خواستم اخبار سایتم دینامیک باشه!) اما نمی تونن. می رن یه برنامه مدیریت ساده پیدا می کنن (من simple news managment رو پیدا کردم.) ولی به کارشون نمی یاد! (خیلی ساده بود. قالب پذیر هم نبود. خیلی هم محدود بود!) اونوقت میان برنامه رو کامل کنن. (تصمیم گرفتم اصلاحش کنم!) متغیر ها رو تغییر می دن. (خیلی از چیزا می تونن تغییر کنن. از جمله عبارات SQL خودمون) تو این کار خیلی چیزا رو یاد می گیرن! (کاربرد بسیار زیاد کلید ثابت در جداول رو فهمیدم!) وسطش به مشکلاتی بر می خورن! (چرا اطلاعاتو تو جدول نمی ریزه؟!!) میرن دنبال یه مرجع که یعنی اینجا! (من رفتم w3schools.com)
خوب! این از تجربیات من! می خوام چند تا معمای SQL حل کنم. شما تو برنامه هاتون کدهاشو تغییر بدید و مفهوم عمیق اونارو بفهمید. خوب اینم از معما ها:
ـ می خوام یه برنامه ی مدیریت اخبار بسازم. ولی نه هچل هشت!! :mrgreen: می خوام اخبارم دسته بندی بشن. هر کی از هر دسته که خواست اخبارو ببینه. و هر دسته واسه خودش یه تصویر داشته باشه!
جواب: برای این کار ما می تونیم بجای استفاده از کدهای SQL پیچیده (ولی سریع!) ترفندی رو بکار ببریم که همه بلدن! دو تا جدول با نام Categorys و News می سازیم. اینم از ساختارشون:
---
Table: Categorys
| Field name | Field Type |
|-------------------------------------|
| CatID INT (auto) |
|-------------------------------------|
| CatName Text |
|-------------------------------------|
| CatDes Text |
|-------------------------------------|
| CatPic Text |
|-------------------------------------|
Table: News:
| Field name | Field Type |
|--------------------------------------|
| StoryID INT(auto) |
|--------------------------------------|
| StoryName Text |
|--------------------------------------|
| StoryText Text |
|--------------------------------------|
| StoryCategory Int |
|-------------------------------------|
خوب! شاید این ساده ترین بانک اطلاعاتی ای باشه که من تو عمرم دیدم! جدولی به نام Categorys داریم که شاخه ها رو در خودش ذخیره می کنه. این جدول چهار ستون داره. >>شماره شاخه که بصورت اتوماتیک مقداری براش گذاشته می شه. >>نام شاخه که از نوع متنه (تو اکسس بهش میگن memo) >>توضیحات شاخه که بازم متنه >>تصاویر شاخه که متنه و هیچ تصویری هم توش نمایش داده نمی شه! بلکه آدرس اون تصاویر نمایش داده می شه!
جدولی داریم به نام News که چهار ستون داره. >> شماره شاخه که اتوماتیک گذاشته میشه! >> نام خبر >>متنش >> شماره شاخه خبر که باید شماره ای باشه که تو جدول شاخه ها موجوده! حالا باید کارمونو بررسی کنیم که بفهمیم از اولش چیکارا باید کرد؟
1: باید یک بانک اطلاعاتی با نام News ایجاد کنیم.
2: باید دو جدول Categorys و News رو ایجاد کنیم.
3: باید بتونیم یه شاخه جدید بسازیم و اطلاعاتی رو بهش بدیم. سپس یدونه دیگه هم می سازیم.
4: باید 4 خبر جدید بذاریم تو جدول اخبار و 2 تاشو واسه جدول اولی و 2 تای دیگر را واسه دومی تعیین کنیم.
5: باید اطلاعاتو بصورت محدود (محدودیت با نام شاخه است) نمایش بدیم.
6: آخیش! تموم شد. نه :strange: ! باید اطلاعاتو حذف و بروز کنیم.
7: حالا دیگه راحت شدیم!
ساخت پایگاه:
CREATE DATABASE `news`
ساخت جدول شاخه ها:
CREATE TABLE `Categorys` (
`CatID` INT NOT NULL AUTO_INCREMENT ,
`CatName` TEXT NOT NULL ,
`CatDes` TEXT NOT NULL ,
`CatPic` TEXT NOT NULL ,
PRIMARY KEY ( `CatID` )
);
CREATE TABLE `News` (
`StoryID` INT NOT NULL AUTO_INCREMENT ,
`StoryName` TEXT NOT NULL ,
`StoryText` TEXT NOT NULL ,
`StoryCategory` INT NOT NULL ,
PRIMARY KEY ( `StoryID` )
);
ساخت اولین شاخه:
INSERT INTO `categorys` ( `CatID` , `CatName` , `CatDes` , `CatPic` )
VALUES (
'', 'ASP', 'Storys About ASP', 'http://www.barnamenevis.org/forum/images/icons/asp.gif'
);
ساخت دومین شاخه:
INSERT INTO `categorys` ( `CatID` , `CatName` , `CatDes` , `CatPic` )
VALUES (
'', 'ASP.Net', 'Storys About ASP.Net.', 'www.barnamenevis.org/forum/images/icons/asp_net.gif'
);
ساخت خبر اول:
INSERT INTO `news` ( `StoryID` , `StoryName` , `StoryText` , `StoryCategory` )
VALUES (
'', 'ASP Created', 'WOW! ASP Created', '1'
);
ساخت خبر دوم:
INSERT INTO `news` ( `StoryID` , `StoryName` , `StoryText` , `StoryCategory` )
VALUES (
'', 'ASP 3 Created', 'WOW! ASP3 Created!', '1'
);
ساخت خبر سوم:
INSERT INTO `news` ( `StoryID` , `StoryName` , `StoryText` , `StoryCategory` )
VALUES (
'', 'ASP.Net Created', 'WOW! ASP.Net Created', '2'
);
ساخت خبر چهارم:
INSERT INTO `news` ( `StoryID` , `StoryName` , `StoryText` , `StoryCategory` )
VALUES (
'', 'ASP.Net 2 Created', 'WOW! ASP.Net 2 CREATED!!!', '2'
);
نمایش اخبار مربوط به ASP:
SELECT *
FROM `news`
WHERE 1 AND `StoryCategory` = 1
ORDER BY `StoryID` DESC LIMIT 0 , 30
بروز آوری آخرین خبر:
UPDATE `news` SET `StoryText` = 'WOW! ASP.Net 2 CREATED!!! by mirosoft' WHERE `StoryID` = '10' LIMIT 1 ;
حذف اولین خبر:
DELETE FROM news WHERE StoryName = 'ASP 3 Created'
هنوز توضیحات زیادی داده نشده. فعلا برید اینا رو اجرا کنید تا بعد.
ممکنه چیزایی که من نوشتم به علت سادگی خیلی مفید نباشه ولی خود من 3 ماه پیش لنگ همینا بودم!
دوستان توجه کنند که اینجا هنوز حالت مرجع هم پیدا نکرده. داریم از پایه شروع می کنیم.
بقیه پست ها رو بعدا می نویسم. فعلا...
محمد مینایی
3nitro
یک شنبه 08 خرداد 1384, 14:46 عصر
یک سوال :
نام شاخه که از نوع متنه (تو اکسس بهش میگن memo)
یعنی منظورتون اینه که در sql که گفتید memo و text یکی هستند ؟ و هیج فرقی با هم ندارند ؟
یک مورد :
میشه یک مثال خیلی ساده تر و پایه ای تر واسه افرادی مثل من که هیچی سرشون نمیشه بزنید . من الان این پست آخر رو دیدم تعطیل کردم . :sad2:
Mohammad Minaei
دوشنبه 09 خرداد 1384, 09:20 صبح
ببخشید من برای تسریع ساخت کدها از phpMyAdmin استفاده کردم.
بله. وقتی در اکسس دارید یک پایگاه ایجاد می کنید در مقابل نام هر فیلد باید نوعشو بذارید. مثلا autonumber یا memo
Memo به اطلاعاتی می گن که هر چیزی داخلشون فقط ارزش متنی دارن و محاصباتی نیستن.
مثلا اگه بخوایم دو تا integer رو ضرب در هم کنیم میشه ولی دو تا memo نه!
به نظر من سری به سایت www.developal.com زده و یه برنامه ساده مدیریت اخبار دانلود کنید. اگه تعطیل بود بگید تا آپلودش کنم. بعد بررسیش کنید و تغییرش بدید. تا بهتر متوجه بشید.
افرادی مثل من که هیچی سرشون نمیشه بزنید
شکسته نفسی هم نفرمایید :flower:
در ضمن احتمالا در پست بعدی سینتکس کامل SELECT رو توضیح می دم تا تاپیک حالت مرجع پیدا کنه!
Mohammad Minaei
سه شنبه 10 خرداد 1384, 09:12 صبح
نام شاخه که از نوع متنه (تو اکسس بهش میگن memo)
آقا شدیدا ببخشید! نوع شاخه از نوع متنه. (اکسس memo) امتحان کنید. درست کار می کنه!
Mohammad Minaei
جمعه 13 خرداد 1384, 15:28 عصر
دوستان شرمنده که دیر شده. دارم آمادشون می کنم!
3nitro
شنبه 21 خرداد 1384, 15:02 عصر
دوستان شرمنده که دیر شده. دارم آمادشون می کنم!همچنان منتظریم . :wise1:
Mohammad Minaei
یک شنبه 29 خرداد 1384, 10:33 صبح
عصر می ذارمشون!
Mohammad Minaei
یک شنبه 29 خرداد 1384, 16:07 عصر
خوب! حالا چند تا تابع غول آسا رو توضیح می دم:
جدول فرضی:
name | price
-----------------
mamal | 100
mahdi | 50
mahdi | 150
mamal | 20
mahdi | 320
اگه این دستورو بدیم:
SELECT * FROM sells
اونوقت دقیقا همین جدول برگردونده می شه.
اما من میام از یه تابع بجای * استفاده می کنم. اسم تابع sum است و مقادیر وارده رو جمع می کنه. اگه این جدولی که دیدید جدول فروشمون باشه می تونیم با یه کد ساده کل فروشمونو بدست بیاریم! ببینید:
SELECT SUM(price) FROM sells
اینجا ما جمع فروشمونو بدست آوردیم. اما! اما شاید شما نیاز به این داشته باشید که تعداد فروش رو هم حساب کنید! اینجاست که تابع غول آسای count میاد تو کار :embr:
ببینید:
SELECT COUNT(*) FROM sells
در اینجا ما تونستیم تعداد سطر های جدولو بدست بیاریم! :موفق: اما :strange:
اگه شما بخواید تعداد و کل مبلغ فروش هر مشتری رو بدست بیارید چی؟ این دستوراتی که ما استفاده کردیم فقط یک مقدار رو می دادند و حالا ما می خوایم چند تا سطر بهمون بده. نمی دونم فهمیدید یا نه؟ (همه می گن من قدرت انتقال ندارم!)
ببینید:
SELECT COUNT(*) , SUM (price) , name FROM sells GROUP BY name
پاسخی که می بینید اینطوریه:
count - sum - name
---------------------------------
2 120 mamal
3 520 mahdi
اینارو تند نوشتم و هنوز نمی دونم عیب دارن یا نه؟!
من تاهاستم راه نیفته (1 - 4 روز دیگه) زیاد پست نمی دم! ولی سریعا بعد از این تغییر در سطر هارو آموزش می دم. دوستان اگه وقت دارن...!
فعلا... :mrgreen:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.