خوب در جلسه قبلی با in , not داشتیم استفاده میکردیم ولی به جاش میتونیم از exist استفاده کنیم چون که سرعت بیشتری دارد و همون کار رو هم داره انجام میده

در موارد خاصی هم اصلا از in , not in نمیتونیم استفاده کنیم

نکته in , not سرعتش کمه چون operator هستن و exist ولی فانکشن هستش و سرعتش زیاده

اینجا اومدیم برای این که رکورد شماره 3 رو بدست بیاریم اومدیم به صورت متناظر فیلد fno رو در دو تا select مقایسش رو انجام دادیم

خوب برای exist وقتی که میخوایم به صورت متناظر ارتباط برقرار کنیم میایم در داخل select دومی با where این کار رو انجام میدیم و اونجا هم داریم میگیم که select کن اون رکورد هایی که هم در داخل factor detail هستند و هم در داخل factor و بعد در select خارجی گفتیم که به جز این هایی که بدست آوردی بقیه رو بیار

خوب حالا فرض کنید که بخوایم به طور مثال در سال جدید شماره فاکتورمون دوباره از صفر شروع بشه ولی چون pk هستش نمیشه ، برای همین باید یه تغییری در ساختار به وجود بیاریم

به همین دلیل میایم هم در factor و هم در factor detail میایم یه فیلد جدید به عنوان year درست میکنیم و میگیم که دیتاهایی که موجود هستند برای سال 1401 هستند

حالا اگر بخوایم از in , not استفاده کنیم نمیشه ، وقتی که p.k و f.k بیشتر از یک فیلد باشه ، نمیتونیم از in , not in استفاده کنیم ، اینجاست که باید از exist استفاده کنیم

نکته : اینجا وقتی که داخل پرانتز چون که where داریم و جوابش true باشه میره دیتا رو میاره و بعد exist توش چک میشه ولی اگر false باشه که هیچی

خوب حالا میخوایم همین رو تبدیل به not exist کنیم :

ناشرینی رو پیدا کنیم که هیچ کتاب بیزینسی ندارند

این رو میخوایم تبدیلش کنیم به not exist

تایم 43:03 از قسمت اول

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

هر چیزی که در پرانتز هست optinal هستش

توی حالت اول فقط میتونیم از operator مساوی استفاده کنیم مثلا اگر نوع جنسیت آقا یا خانوم بود

ولی در پایینی میتونیم از operator های دیگه هم استفاده کرد مثل بزرگتر و کوچکتر و …

خوب اینجا برای این که اون no column name رو درست کنیم میایم از end new type استفاده میکنیم که اینطوری اون رو تبدیل میکنیم به new type و بعد داریم با Else میگیم که هر کدوم که mod cook و trad cook نبود بیا و اسم همون type رو بزار توی new type که خالی و null نباشه

نام کتاب ، قیمت کتاب و قیمت جدید کتاب رو از فرمولی که گفته میشه بدست بیاریم : فرمول : اگر کتاب بیشتر از 20 دلار قیمت داشت 10 درصد افزایش قیمت در غیر این صورت 5 درصد کاهش قیمت

اگر قیمت رو 1 فرض کنیم و 5 درصد ازش کم کنیم میشه 0.95 برای همین در حالت دومی ضرب در 0.95 کردیم

حالا میخوایم فرمول رو تغییر بدیم: اگر ناشر کتاب کایفرنیایی باشد 10 درصد افزایش قیمت ، در غیر این صورت 5 درصد کاهش قیمت :

توی این مورد داریم اول برای رسیدن به state نویسنده ها بیایم و join بزنیم روی جدول publishers و بعد گفتیم که اگر state برابر باشه با CA اون فرمول رو بیا و حساب کن و بیا توی new price قرارش بده و برای چک کردن هم state هم اوردیم

در این مورد پایین میخوایم بریم اول pub id هایی که توی CA هستند رو بیاریم و ازش استفاده کنیم

در اینجا تمامشون 33 درصد رو نشون میده ولی در دیتاهای بزرگ exist از همه بهتره

از تابع هایی که خودشون پیاده سازی کردن بیشتر استفاده کنیم

مثلا window function از 2008 به قبل وجود نداشت

یکی از قابلیت های oracle اینه که درخواست هایی که از کاربر ها میاد رو پیاده سازی میکنه مثلا تقویم شمسی داره

اتمام قسمت 1

فرمول جدید : اگر مبلغ فروش کتاب بیش از 500 دلار باشد 10 درصد افزایش قیمت در غیر این صورت 5 درصد کاهش قیمت

خوب حالا از یه راه دیگه میخوایم کار رو جلو ببریم : میایم titles رو با sales رو join میزنیم و بعد میایم group by اش میکنیم چون که از aggrigate function ها اومدیم استفاده کردیم

حالا میایم و اون هایی رو جدا میکنیم که مبلغ مجموع فروش شون بیشتر از 500 تا شده است :

اینجا برای این که فقط همون هایی رو که میخوایم رو بیاریم دیگه اون tp رو پاک میکنیم

نکته : با shift tab پاک میکنه و با Tab میبره جلو و چند تایی هم میخواستیم با alt این کار رو میکنیم

حالا اونی که اون بالا درست کردیم رو میاریم میزاریم داخل این in که در این کوئری تعریف کردیم

فرمول جدید : اگر ناشر کتاب CA بود 10 درصد افزایش قیمت در غیر این صورت اگر کتاب بیشتر از یک نویسنده داشت 5 درصد افزایش قیمت در غیر این صورت اگر مبلغ فروش کتاب بیشتر از 500 دلار داشت 2 درصد افزایش قیمت و در غیر این صورت ها 1 درصد افزایش قیمت

رتبه بندی به لحاظ سرعت اینطوریه که اول اونی که Exist داره و بعد اونی که in داره و بعد هم اونی که join زدیم و در آخر اونی که کمترین سرعت رو داره اونیه که اولیه و از drived table اومدیم استفاده کردیم و سرعتش از همه کمتره و به خاطر اینه که کل دیتا رو در هر مرحله اوردیم

نکته اگر موردی باشه که هر سه شرط که در فرمول بود رو داشت فقط یک بار روش اعمال میشه در case when و اونی روش اعمال میشه که بالاتر هستش و شرایطش رو داره

اگر بخوایم دو تا شرط روش اعمال بشه باید توی case when بیایم و از and استفاده کنیم یا از or استفاده کنیم

اتمام قسمت دوم

در اینجا mars اتفاق افتاده که میشه multiple active result set

اگر بخوایم دیتا ها در امتداد هم نمایش داده شوند

خوب union میاد اجتماع دیتا ها رو نشون میده ولی اشتراکاتات رو حذف میکنه

خوب union all همه رو میاره

خوب باید ستون هاشون باید تعدادشون باید با هم یکی باشند :

خوب اینجا هم به این شکل نمیشه :

نکته : هم data type و هم تعداد ستون ها باید با هم یکسان باشند و ترتیبشون هم درست باشه

خوب یه نکته ی دیگه اینه در خروجی دیتایی که بدست میاد data type هاش رو از روی کوئری اول میگیره

منظور select اولی هستش یعنی به طور مثال code از جنس int باشه و select بعدی از نوع small int باشه کوئریمون درسته ولی اگر برعکس باشه اشتباهه

خوب intersect میاد اشتراکات رو میده

خوب مورد بعدی except که میشه تفاضل یعنی اون چیزهایی که در t1 هست ولی در t2 نیست

در validation check به کار میاید

نوشتن Validation check برای تست

نکته with هم داره

حالا اگر بخوایم CTE استفاده کنیم : این قابلیت از 2012 به بعد اضافه شده است

این برای فرمول جدید است که با cte نوشته شده است ، این روش با drived table ها تفاوتی نداره

قسمت سوم 1:03:00 شروع آموزش export گرفتن از excel

اگر بخوایم دیتایی رو کپی کنیم میایم میزنیم رو copy with headers و بعد میریزیم توی excel

اگر بخوایم export کنیم دیتا رو بهتره که از طریق خوده Sql اقدام کنیم چون اون خودش میتونه بیاد و دیتا ها رو توی چند تا sheet بیاریم

خوب حالا اگر بخوایم یه دیتایی رو ببریم توی چند ورژن پایین تر از sql که الان هست میتونیم از این روش استفاده کنیم که بیایم دیتا رو از اینجا اول export بگیریم و بعد بریم در اون sql ورژن پایین تر import کنیم و دیتا ها رو انتقال بدیم چون به هیچ طریقی اون ورژن پایین تر نمیتونه بک آپ و دیتا رو بخونه

یه فرمتی داریم به اسم flat file destination که میشه همون csv