کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

دستورات زبان دستکاری و مدیریت داده(DML)

دستورات زبان دستکاری و مدیریت داده (DML)

DML سرواژه ی Data Manipulation Language است که عمليات پردازشی و دستکاری اشيای پايگاه داده مانند: insert(درج)، select (گزینش)، update (بروز رسانی) را پشتيبانی می کند.
DML به عنوان زبان پرسمان (SQL) هم شناخته می شود و اغلب دارای قابلیت انجام محاسبات ریاضی
و آماری است كه عملیات گزارش گیری از پايگاه داده را آسان تر می کند.
دستورات DML از داده ها query گرفته و آن ها را در schema object جاری دستکاری می کند. این دستورات به طور صریح تراکنش (transaction) جاری را اجرا و ثبت نمی کنند.
دستورات DML موجود در oracle عبارتند از


  • Insert: به وسیله ی این دستور می توان سطر جدید در جدول مورد نظر وارد (درج) کرد.
  • Update: به منظور بروز رسانی و ویراست سطرهای موجود در جدول بکار می رود.
  • Delete: جهت حذف سطرهای موجود در یک جدول بکار می رود.
  • Merge: برای بروز رسانی یا درج سطر جدید در صورت برقرار بودن شرط مشخص بکار می رود.

دستور Insert

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


مثال:

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


Insert into emp values (101,’Sami’,’G.Manager’,‎

        ‎             ’8-aug-1998’,2000);‎

اگر می خواهید یک سطر جدید با ارائه ی مقادیری برای برخی از ستون ها و نه همه ی آن ها ایجاد کنید، باید اسم ستون را در دستور SELECT ذکر کنید. دستور زیر با ارائه ی مقادیری تنها برای ستون های empno، ename و sal سطر جدید در جدول emp درج می کند. دو ستون Job و Hiredate خالی (null) خواهد ماند.


Insert into emp (empno,ename,sal) values (102,’Ashi’,5000);‎

فرض بگیرید می خواهیم از یک ستون به ستونی دیگر سطر اضافه کنیم که این دو ستون دارای نام و ساختار زیر هستند.





Old_emp
Datatype & Width
Column Name
Number(5)
Empno
Varchar2(20)
Ename
Number(10,2)
Sal
Date
Tdate


Emp
Datatype & Width
Column Name
Number(5)
Empno
Varchar2(20)
Ename
Number(10,2)
Sal
Date
Hiredate
Varchar2(20)
Job


حال می خواهیم از جدول old_emp به جدول emp، سطر اضافه کنیم. برای این منظور، دستور insert زیر را می نویسم.


Insert into emp (empno, ename, sal)‎

        ‎      select empno, ename, sal from old_emp;‎

افزودن چندین سطر از یک جدول به جدول دیگر»

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


Sales

Sat_Amt
Fri_Amt
Thu_Amt
Wed_Amt
Tue_Amt
Mon_Amt
Prodname
Prodid
2100
3000
2900
2230
2500
2000
AIWA
101
2120
2800
3100
2130
2100
1900
AKAI
102

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


Amount
WeekDay
Prodname
Prodid
2000
Mon
AIWA
101
2500
Tue
AIWA
101
2230
Wed
AIWA
101
2900
Thu
AIWA
101
3000
Fri
AIWA
101
2100
Sat
AIWA
101
1900
Mon
AKAI
102
2100
Tue
AKAI
102
2130
Wed
AKAI
102
3100
Thu
AKAI
102
2800
Fri
AKAI
102
2120
Sat
AKAI
102

جهت نیل به این هدف می توان از دستور multi table INSERT بهره جست.


Insert all

        ‎     Into week_sales(prodid,prodname,weekday,amount)‎

        ‎     Values (prodid,prodname,’Mon’,mon_amt)‎

        ‎     Into week_sales(prodid,prodname,weekday,amount)‎

        ‎     Values (prodid,prodname,’Tue’,tue_amt)‎

        ‎     Into week_sales(prodid,prodname,weekday,amount)‎

        ‎     Values (prodid,prodname,’Wed’,wed_amt)‎

        ‎     Into week_sales(prodid,prodname,weekday,amount)‎

        ‎     Values (prodid,prodname,’Thu’,thu_amt)‎

        ‎     Into week_sales(prodid,prodname,weekday,amount)‎

        ‎     Values (prodid,prodname,’Fri’,fri_amt)‎

        ‎     Into week_sales(prodid,prodname,weekday,amount)‎

        ‎     Values (prodid,prodname,’Sat’,sat_amt)‎

        ‎  Select prodid,prodname,mon_amt,tue_amt,wed_amt,thu_amt

        ‎          Fri_amt,sat_amt from sales;‎

دستور UPDATE

دستور UPDATE برای بروز رسانی سطرهای جدول موجود که یا در schema شما قرار دارد و یا مجوز و امتیاز بروز رسانی (update privilege) آن ها را دارید، بکار می رود.
به عنوان مثال، به منظور افزایش درآمد کارکنانی که شماره ی آن در جدول 104 می باشد، به مقدار Rs.500، می توان دستور زیر را نوشت.


update emp set sal=sal+500 where empno = 104;‎

در دستور بالا، چنانچه از عبارت WHERE استفاده نمی کردیم، درآمد تمامی کارکنان به اندازه ی Rs.500 افزایش می یافت. بنابراین، چنانچه نمی خواهید تمامی فیلدها بروز رسانی شوند، باید از شرط مناسب WHERE استفاده کنید.
برای مثال، اگر بخواهیم اسم کارمند شماره ی 102 را از ‘Sami’ به ‘Mohd Sami’ تغییر داده و نیز درآمد وی را تا %10 افزایش دهیم، باید دستور زیر را بنویسیم.


update emp set name=’Mohd Sami’, ‎

        ‎  sal=sal+(sal*10/100) where empno=102;‎

حال می خواهیم درآمد تمامی کارکنان را به میزان 5% افزایش دهیم.


update emp set sal=sal+(sal*5/100);‎

برای تبدیل اسم تمامی کارکنان از حروف کوچک به حروف بزرگ، دستور زیر را می نویسیم.


update emp set name=upper(name);‎

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


Average
Total
Chem
Phy
Maths
Name
Rollno
89
90
99
Sami
101
56
77
34
Scott
102
43
82
45
Smith
103

حال به منظور محاسبه و بدست آوردن مقدار کل که مربوط به ستون Total می باشد.


update student set total=maths+phy+chem,‎

        ‎    average=(maths+phy+chem)/3;‎

استفاده از subquery در عبارت ثابت UPDATE

فرض بگیرید ستونی به نام city را به داخل جدول employee وارد کرده و اکنون می خواهیم این ستون را با ستون متناظر (city) در جدول department که با جدول employee متصل هست راست کنیم.


update emp set city=(select city from dept

        ‎                          where deptno= emp.deptno);‎

دستور DELETE

دستور DELETE برای حذف سطرهای جداول موجود که یا در schema ی شما هستند و یا مجوز و امتیاز حذف آن ها را دارید، استفاده می شود. به عبارتی دیگر از اين دستور برای حذف اطلاعات يک رکورد در جدول استفاده می شود.
به عنوان مثال، برای حذف کارکنی که شماره ی آن 102 می باشد.


delete from emp where empno=102;‎

چنانچه شرط WHERE را ذکر نکنید، تمامی سطرهای جاری حذف می گردند.
فرض بگیرید می خواهیم تمامی کارکنانی که درآمد آن ها بالغ بر 2000 می باشد، را پاک کنیم. برای این منظور دستور delete زیر را می نویسیم.


delete from emp where salary > 2000;‎

مثال زیر دقیقا کار دستور بالا را انجام می دهد، با این تفاوت که برای نیل به این هدف از یک sub query بهره می گیرد.


DELETE FROM (SELECT * FROM emp)‎

        ‎    WHERE sal > 2000;‎

حال جهت حذف تمامی سطرها از جدول emp

delete from emp;‎

دستور MERGE

دستور Merge به ما این امکان را می دهد تا محتویات دو جدول را به صورت دلخواه و با شروطی که مد
نظرمان است به هم متصل کنیم. به عبارتی دیگر از دستور مزبور می توان به منظور انتخاب سطرهایی از یک جدول برای انجام عملیات بروز رسانی یا درج در جدول دیگر بهره گرفت. این تصمیم که آیا عملیات بروز رسانی یا درج سطر جدید در جدول مقصد صورت گیرد، همگی بستگی به شرطی دارد که در عبارت ON مشخص می شود. این دستور یکی از قابلیت های نوین ORACLE است که در ویرایش 9i ارائه گردیده. دستور نام برده تحت عنوان UPSERT نیز شناخته می شود که در واقع ترکیبی از UPDATE و INSERT می باشد.
در نظر بگیرید دارای جداولی با نام های sales_history و sales هستیم که ساختار زیر را دارند.


SALES

Amount
Month
Prod
2200
JAN
SONY
3000
FEB
SONY
2500
MAR
SONY
3200
APR
SONY
3100
MAY
SONY
5000
JUN
SONY

SALES HISTORY

Amount
Month
Prod
2000
JAN
SONY
2500
MAR
SONY
3000
APR
SONY
3200
JAN
AKAI

حال می خواهیم جدول sales_history را بر اساس جدول sales بروز رسانی کنیم؛ به عبارت دیگر می خواهیم سطرهایی که از پیش در جدول sales_history هستند بروز رسانی شده و آن سطرهایی که در جدول ذکر شده موجود نیستند،
به این جدول تزریق شوند.


merge into sales_history sh
        ‎   using sales s
        ‎   on (s.prod=sh.prod and s.month=sh.month)‎
        when matched then update set sh.amount=s.amount
        when not matched then insert values (prod,month,amount);‎

پس از اینکه دستور MERGE اجرا گردید، جدول مورد نظر بدین شکل درخواهد آمد.


SALES_HISTORY

Prod
Month
Amount
SONY
JAN
2200
SONY
FEB
3000
SONY
MAR
2500
SONY
APR
3200
AKAI
JAN
3200
SONY
MAY
3100
SONY
JUN
5000
1394/07/27 9975 1472
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...