زبان SQL

30
ان ب زSQL 1

description

زبان SQL. زبان بیانی SQL. زبان SQL پیاده سازی آزادی از جبر رابطه ای است این زبان اولین بار در سال 1976 پدید آمد ویک زبان بیانی است یعنی کاربر آنچه را لازم دارد با دستورات محدودی بیان می کندوسیستم آن را تفسیر می کند وروال کاررا تشخیص وانجام می دهد. - PowerPoint PPT Presentation

Transcript of زبان SQL

Page 1: زبان  SQL

SQLزبان

1

Page 2: زبان  SQL

زبانSQL است ای رابطه جبر از آزادی سازی پیاده سال در بار اولین زبان آمد 1976این پدید با دارد الزم را آنچه کاربر یعنی است بیانی زبان ویک

تفسیر را آن کندوسیستم می بیان محدودی دستورات. دهد می وانجام تشخیص کاررا وروال کند می

از کاربر،بسیاری دستورات اجرای حین در زبان اینجلوگیری آنها وازبروز دهد می تشخیص اورا خطاهای

. کند می

بیانی SQLزبان

Page 3: زبان  SQL

زبانSQL: است شده تشکیل بخش دو ازDDL :ها داده تعریف زبانDML :ها داده با کردن کار زبان. شود می بررسی جداگانه طور به بخش هر : متغیر دامنه الف وکنترل جدول ها،کلیدهای نام،صفت باید داده تعریف در

. شود مشخص ها صفت روی الزم های

داده تعریف

Page 4: زبان  SQL

◦: شود می استفاده زیر دستور از اطالعات بانک تعریف برای

CREATE DATABASE db_name AUTHORIZATION dba_name;

است : : زیر صورت به آن به دستیابی واجازه اطالعات بانک مثال

CREATE DATABASE univer AUTHORIZATION yazdani;

اطالعات بانک تعریف

Page 5: زبان  SQL

می تعریف را جدولی و گرفته نظر در را زیر درس جدولکنیم

Crs(c#,cname,unit,clg#)C : #تا کاراکتر 5کددرس

Cname :تا درس کاراکتر 30نامunit :واحددرس 4تا 1تعدادClg :#جدول به که است خارجی کند clgکلید می اشاره

است . رقمی دو که

تعریفجدول

Page 6: زبان  SQL

CREATE TABLE crs( c# char(5) NOT NULL ,

cname char(30) NOT NULL, unit Smallint NOT NULL,

clg# Smallint, PRIMARY KEY(c#),

UNIQUE(cname) , FOREIGN KEY (clg#) REFERENCES clg

ON DELETE CASCADE, ON UPDATE CASCADE,

CHECK(unit>0 AND unit<5);)

تعریفجدول

Page 7: زبان  SQL

توضیحات . برای تنها است مشخص ها صفت NOTقید# clgتعریف

NULL وارد را درسی اگر که است این معنی به نیامدهنکنیم قید را آن دانشکده توانیم می کنیم

دستورPRIMERY KEY تا است جدول اصلی کلید. است اختیاری آن وادامه اجباری جدول اینجا،تعریف

دستورUNIQUE تکراری تواند نمی است فرعی کلیدباشد.

: جدول در مثال رادارد کاربردها از برخی فرعی کلید نکتهاست اصلی کلید عنوان به دانشجویی شماره دانشجو

کلید عنوان به دیگری صفت با همراه دانشجو وناماستفاده مورد کالس لیست تهیه برای مثال است فرعی

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

Page 8: زبان  SQL

دستورFOREIGN KRY می مشخص را خارجی کلیدذکر با کلید REFERENCESکندو این که کند می تعیین

. شود می ارجاع جدول کدام به قیدهایON DELETE CASCADE وON UPDATE

CASCADE جدول در کلید این زمانی اگر گوید میجدول این کرد،در تغییر یا شد حذف خودش اصلی

از . کد اگر مثال شود انجام آن کند 30به 00مشابه تغییرجدول در که درسهایی مربوط crsتمام دانشکده این به

شود عوض شان کددانشکده نیز شوند می

دستورCHECK . است جامعیتی قواعد بیان برای

توضیحات

Page 9: زبان  SQL

جداول شکل تغییر

تغییر بخواهیم ایم کرده تعریف که جدولی است ممکندستور با که .ALTER TABLEدهیم است پذیر امکان

تغییر : ◦ را ستونهایی یا ها ستون داده نوع بخواهیم داده نوع تغییردهیم

ALTER TABLE table-name MODIFY(<col-name><new type>);

به : درس جدول در را دروس نام می 40مثال افزایش کاراکتردهد.

ALTER TABLE crs MODIFY(cname CHAR(40));

نسخه : اکثر دهیم تغییر کلی طور به را داده نوع بخواهیم اگر نکتهفاقد SQLهای مربوطه ستونهای آنکه مگر کنند می جلوگیری

. باشند داده

Page 10: زبان  SQL

صفت افزودن◦. ) افزود ) جدول به هایی صفت یا ستون صفت توان می

ALTER TABLE table-name ADD(<col-name><type>);

ستون: فرمت textمثال با جدول Char(100)را اضافه crsبه. کند می

ALTER TABLE crs ADD(text Char(100));

: ستون حذفجبران تاثیر است ممکن زیرا نشده بینی پیش مستقیم طور بهجدول . توان می بگذارد یکدیگر با جداول ارتباط روی ناپذیری

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

. کرد کپی

جداول شکل تغییر

Page 11: زبان  SQL

دستور با ها داده کردن .INSERTوارد شود می انجامINSERT INTO table-name

VALUES(list of values)مثال:

INSERT INTO crs VALUES(“10147”,”BANK”,3,10);

INSERT INTO crs VALUES(“10152”,”BANK1”,3, ) ;

. ندارد اشکالی نشده ثبت کددانشگاه

جدول درآوردن روز به

Page 12: زبان  SQL

. داریم زیر صورت به جدولی کنید فرضCREATE TABLE profession

( esg..… deg;)……

“ “ “ برداریم ” استاد جدول از را تحصیلی مدرک و تخصص ستون دو. کنیم کپی جدول این ودر

INSERT INTO profession SELECT esp,degree

FROM prof;

دیگر جدول از برداشتن با چندسطر کردن وارد

Page 13: زبان  SQL

دستور کلی شکلDELETE FROM table-name

WHERE;…….WHEREدستور رود می کار به شرط برایمثال:

DELETE FROM sec WHERE score IS NULL;

مشخص نمره آنها برای که دروسی به مربوط اطالعات تمامی. کند می حذف را است نشده

. کند می حذف مربوط اطالعات بانک از نیز را جدول کلDROP table-name

ها داده حذف

Page 14: زبان  SQL

دستور با جدول در ها داده .UPDATEتغییر شود می انجامUPDATE table-name

SET attr1=value1,attr2=value2..…,WHERE..…

“ درس: واحد تبدیل .4به“ BANK1مثال شود می تبدیلUPDATE crs

SET unit=4 WHERE cname=‘BANK1’

به گروه شماره تهی :10تبدیل موارد برای صفر به ونمرهUPDATE sec SET sec#=10,score=0 WHERE SEC# IS NULL;

جدول در ها داده تغییر

Page 15: زبان  SQL

دستور و ترکیب هم با دستور سه .SELECTاین کنند می درست راSELECT col1,……….colnFROM tab1,……….,tabm

WHERE…… کد: با مهندسی دانشکده در تبریز دانشجویان کامل اطالعات 3مثال

دستور: از جدول ستونهای تمام گرفتن برای استفده * SELECTحل. کنیم می

SELECT* FROM stud

WHERE city=‘tabriz’ AND clg#=3;

گزینشوپرتووپیوند

Page 16: زبان  SQL

. مختلف: دروس در دانشجویان ونمره نام مثال : نیازداریم جدول دو خواهیم می را کددرس اگر دو secو studحل که

در که شوند می طبیعی پیوند هم با صفات SQLجدول تساوی شرط بادراینجا ) . Sمشترک سه# ( باید بخواهیم را جدول نام اگر شود می انجام

. . آید می دو به دو مشترک صفات تساوی شرط دهیم پیوند را جدولکددرس: 1دستور فقط

SELECT sname,c#,scoreFROM stud,sec

WHERE stud.s#=sec.s;# درس: 2دستور نام

SELECT sname,cname,scoreFROM stud,crs,sec

WHERE stud.s#=sec.s# AND sec.c#=crs.c;#

گزینشوپرتووپیوند

sname Cname score

محمدی شبیه سازی

14.5

علینقی زاده

شبیه سازی

16.25

محمدی مدارمنطقی

15.75

وکیلی مدارمنطقی

12.5

جوادی شیمی آلی

17

Page 17: زبان  SQL

: سال از که دروسی وشماره نام .1375مثال اند شده ارئه بعد به . در : نیمسالی در اگردرسی یعنی داریم تکراری خروجی مثال دراین حل

5 . عینا اطالعاتش باشد شده ارائه درسی تکرار 5گروه باردرخروجیموردازکلمه بی تکرار ازاین جلوگیری شودوبرای DISTINCTمی

. وچون شود می نقطه# cاستفاده با را آن الزم آمده، جدول دو در. کنیم مشخص گذاری

SELECT DISTINCT cname,crs.c#,termFROM crs,sec

WHERE crs.c#=sec.c# AND term>750;

گزینشوپرتووپیوند

cname Crs.c# term

مدارمنطقی 10174 752

آلی شیمی 51516 752

سازی شبیه 10172 761

Page 18: زبان  SQL

ازدستور کردن مرتب . ORDER BYبرای ودر کنیم می استفاده . اگر آید می می DESCپایان مرتب نزولی کنیم اضافه را

اگر. ولی .ASCکند کند می مرتب صعودی کنیم اضافه راSELECT DISTINCT cname,crs.c#,termFROM crs,sec

WHERE crs.c#=sec.c# AND term>750;

ORDER BY cname DESC;

خروجی کردن مرتب

Page 19: زبان  SQL

وتفاضل واشتراک اجتماع دستوراتاستاد: یا دانشجو از اعم افراد همه وکددانشکده نام مثال

SELECT sname,clg# FROM stud

UNIONSELECT pname,clg#

FROM prof;کددانشکده با همراه را دانشجوواستاد از اعم ها افراددانشکده تمامی باال دستورات

. جای اگربه دهد دانشجویان INTERSECTاز UNIONمی اسامی کنیم استفادهآوردواگر می را همنام بجز EXCEPTواساتید دانشجویان اسامی بریم کار به

. ودانشکده اسامی دستورزیر دهد می را هستند همنام اساتید با که آنهایی. دهد می را هستند همنام خودشان دانشکده در دانشجویی با که آنهایی اساتید،بجزSELECT pname,clg#

FROM profEXCEPT

SELECT sname,clg# FROM stud;

EXCEPTوINTERSECTو UNIONدستور

Page 20: زبان  SQL

. واقعند: ورشت ،اصفهان،شیراز تهران شهرهای در که هایی دانشکده مثالSELECT*

FROM clgWHERE city IN(‘ ’,’ ’,’ تهران’,’ اصفهان شیراز ;(’رشت

نیست فوق های محل تولدشان شهرهای که .دانشجویانیSELECT*

FROM clgWHERE city NOT IN(‘ ’,’ ’,’ تهران’,’ اصفهان شیراز ;(’رشت

بجز سالهایی در که دروسی شده 75و71شماره اعالم .SELECT*

FROM secWHERE term NOT IN(‘711’,’712’,’751’,’752’);

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

FROM profWHERE pname IN(SELECT pname FROM sec WHERE score=20 AND pname NOT IN(‘ فتوت’,’ ;( (’مولوی

INدستور

Page 21: زبان  SQL

COUNT,MIN,MAX,AVG,SUM . تهرانی: دانشجویان تعداد مثال

SELECT COUNT(s#)FROM studWHERE city=‘تهران’;

. درس: جدول سطرهای تعداد مثالویژه است)*( COUNTتابع شده تعریف جداول سطرهای شمارش برای

از توان نمی تابع این وسطرهای DISTINCTدر کرد را NULLاستفادهشمارد می هم

SELECT COUNT)*(FROM crs;

محاسباتی توابع

Countofs#

2

CountOfCrs

6

Page 22: زبان  SQL

. : دانشجویان نمره میانگین حداقل مثالSELECT MIN(avg) AS Lowest_AvgFROM stud

است . بیشتر ها میانگین همه میانگین از آنها میانگین که دانشجویانیSELECT sname.avgFROM studWHERE avg>(SELECT AVG(avg)

FROM stud;)اجراء اصلی دستور وسپس اجرا شود می نوشته پارانتز درون که دستور زیر ابتدا

.avgومقدار شود می مقایسه صحیح عدد این با سطر هر. است : بیشتر ها میانگین همه ازمیانگین آنها میانگین دانشجویانیکه اساتید نام مثالSELECT DISTINCT pname.s#

FROM secWHERE s# IN(SELECT s#

FROM stud WHERE avg>(SELECT AVG(avg)

FROM stud ;))

محاسباتی توابع

Lowest_Avg

12.2

Page 23: زبان  SQL

در ها داده دستور SQLتفکیک انجام GROUP BYبا. شود می

.GROUP BYبخش دستوراست یک بخشهای آخرین جزو :هر در دانشجویان میانگین ومینمم ماکزیمم مثال

دانشکده.SELECT clg#,MAX(avg),MIN(avg)FROM stud

GROUP BY clg;#

بندی گروه

Clg# Max Min

1 16.42 16.42

10 17.24 14.06

4 17.56 17.56

5 16.8 15.44

6 12.2 12.2

Page 24: زبان  SQL

. قید با کار این گذاشت شرط توان می هم ها گروه درون HAVINGدرشبیه که شود می . WHEREانجام بخش در کند می عمل

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

وقتی مثال گیرند می قرار صفت آن نام تحت صفت آن به مربوط مقادیرc #به مربوط مقادیر تمامی شود می مدنطر# cبیان ها گروه داخل در

است. : نفر بیست از بیش آنها اساتید تعداد که هایی دانشکده شماره مثال

. باشد میSELECT clg#

FROM prof GROUP BY clg#

HAVING COUNT(pname)>20;

ها گروه درون شرط

Page 25: زبان  SQL

از: بیش ترمی در که واحدی سه دروس شده 5مثال ارائه گروه.اند

دیگر عملگرهای. LINKعملگر می : آن از استفاده با است ها رشته با کار برای

. کرد بررسی را رشته توان “_“کاراکتری هر جای به یعنی کاراکتر “%“کاراکنر تعداد هر جای به یعنی کاراکتر

ها گروه درون شرط

Page 26: زبان  SQL

هستند؟ : واحدی چهار یا واحدی سه که اطالعات بانک های درس ثالSELECT*

FROM crsWHERE unit=3 OR unit=4

AND cname LINK ‘% اطالعات ’%بانک “ است: ” علی آنها اول نام که اساتیدی .مثال

SELECT pnameFROM prof

WHERE pname LINK ‘%علی’ وبا : است کاراکتری سه آنها کد که دروسی مثل DBمثال شود می DB1شروع

SELECT c#,cnameFROM crs

;WHERE c# LINK ‘DB‘_مثل ’_’ DBOOکدهای کاراکتر یک جایگزینی برای کاراکتر زیرا ندارد قرار آن در

است.

دیگر عملگرهای

Page 27: زبان  SQL

کد ) کامپیوتر دانشجویان همه از آنها معدل که بیشتر( 10دانشجویانیاست.

SELECT* FROM studWHERE avg>ALL(SELECT avg

FROM stud WHERE clg#=10;)

. دارند دانشجو که هایی دانشکدهSELECT*

FROM clgWHERE clg#=ANY (SELECT clg# FROM stud);

دیگر عملگرهای

Page 28: زبان  SQL

وتامین بیشتر حساسیت باشد بیشتر آن وکاربردهای بزرگتر بانک هرچه . بخشهایی به فقط کاربران از یک وهر شود می تر پیچیده بانک امنیت

دارند نیاز ها داده از می دسترسی نیازدارد آنچه به تنها راداردیعنی خود دید فقط کاربر هر

از . وبرخی بانک مدیر تنها است ومحروم خبر بی بانک مابقی واز یابد. گذرد می چه بانک کل در دانند می سازان برنامه

شده گرفته نظر در جداول به دستیابی برای که اصلی امتیازهای: از UPDATE,DELETE,INSERT,SELECT عبارتند

امتیازREFERENCES جامعیتی های محدودیت واعمال کنترل برایروی. بتواند باید سازمان ،رئیس دولتی سازمان یک در مثال است

. ندارند حقی چنین سایرین بگذاردولی محدودیت خود دستمزدکارمندان امتیازUSAGE ازقبیل امکاناتی از استفاده گرفته VIEWبرای نظر در

. است شده چون برای INSERTوREFERENCES,UPDATEامتیازهایی توانند می

. شوند داده جدول از بخشی

در SQL2امنیت

Page 29: زبان  SQL

GRANT< امتیازها > ON <لیست اطالعات بانک از <بخشی TO< کاربران از [WITH GRANT OPTION]<لیستی

قید که WITH GRANT OPTIONاگر است این آن ذکرشود،معنای ( با کند واگذار نیز دیگر کاربران به را امتیازها این تواند می کاربر

(GRANTدستور دیگری مثال:

GRANT INSERT,SELECT,UPDATE ON crs,sec TO karimi,zamani;

GRANT UPDATE(degree,esp) ON prof TO naime;

GRANT SELECT ON iust_db TO rahmani WITH GRANT OPTION;

در SQL2امنیت

Page 30: زبان  SQL

دستور با توان می را .REVOKEامتیازها گرفت پس بازREVOKE< امتیازها >ON <لیست اطالعات بانک از <بخشی FROM< کاربران ;<لیست

دستور با را غیر به واگذاری حق توان REVOKE GRANTمیOPTION ON. گرفت پس باز

REVOKE INSERT ON src,sec FROM karimi,zamani;

REVOKE GRANT OPTION ON iust_db FROM rahmani;

در SQL2امنیت