CodeCrafters
765 subscribers
92 photos
50 videos
42 files
170 links
Download Telegram
CodeCrafters
https://fa.m.wikipedia.org/wiki/%D8%A7%D8%B3%D9%BE%D8%B1%D8%A7%D9%86%D8%AA%D9%88
در خصوص یادگیری این زبان مطلب بزاریم؟؟؟

زبان اسپرانتو یک زبان بین‌الملل اینده می‌باشد راحت کاربردی با کمترین قواعد ممکن دارای جامعه بین المللی گفتار و نوشتار راحت
Anonymous Poll
43%
بله
57%
خیر
🍌13👎3🤡2🖕1
Audio
موقعیت: وقتی HR تو مصاحبه ازم میپرسه چه احساسی بابت پذیرش در شرکت ما داری؟؟؟

#fun

@code_crafters
😁7
این بازی آنلاین جالب رو انجام بدید:
https://hamed.github.io/trust/
این بازی بر مبنای نظریه بازیها طراحی شده،
ببینید اگر در واقعیت اعتماد تکامل پیدا کنه، جامعه چجوری رشد میکنه...!
بهترین خروجی چیه؟
و اگه رو به خوبی و درستی و اعتماد پیش بریم، چه رفتارهایی در بلندمدت از بین میرن...
4
https://iribnews.ir/00HLTj
تبریک به صفا صفری عزیز🤩🎉
انشالله موفقیت های بیشتر💕
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥101
از جدول "CITY"، برای تمام شهرهای ایران که جمعیت آن‌ها بیشتر از 120000 نفر است، فیلد "NAME" را استعلام کنید. کد کشور برای ایران "IR" است.

سطح : بسیار آسان

راهنمایی : استفاده از WHERE !!!
#SQL
@Code_Crafters
CodeCrafters
از جدول "CITY"، برای تمام شهرهای ایران که جمعیت آن‌ها بیشتر از 120000 نفر است، فیلد "NAME" را استعلام کنید. کد کشور برای ایران "IR" است. سطح : بسیار آسان راهنمایی : استفاده از WHERE !!! #SQL @Code_Crafters
با توجه به جدول City :

سوال :فهرست نام‌های CITY که با حروف صدادار (یعنی a، e، i، o یا u) شروع می‌شوند را از STATION جستجو کنید. نتیجه شما نمی تواند حاوی موارد تکراری باشد.

سطح : آسان

راهنمایی : جز استفاده از WHERE که برای ایجاد شرط در SQL است باید از تابع های درونی مثل RIGHT یا LEFT استفاده کنید. میتوانید در بعضی پایگاه داده ها مثل MySQL نیز از RLIKE استفاده کنید که براساس ReGex بررسی میکند البته از LIKE نیز میتواند استفاده کرد . برای بخش جلوگیری از موارد تکراری میتوانید از Distinct استفاده کنید .در کل این کوئری را به روش های زیادی میتوان نوشت !!

#SQL
@Code_Crafters
پرسش: با توجه به جداول CITY و COUNTRY، نام همه قاره‌ها (COUNTRY.Continent) و میانگین جمعیت شهر مربوطه (CITY.Population) را که به نزدیک‌ترین عدد صحیح گرد شده است، جستجو کنید.

نکته :از CITY.CountryCode و COUNTRY.Code برای JOIN زدن استفاده کنید.

سطح : متوسط

راهنمایی : استفاده از تابع های درونی AVG برای میانگین گیری و FLOOR برای گرفتن نزدیک ترین عدد صحیح و همچنین JOIN زدن بین دو جدول و در نهایت استفاده از GROUP .

#SQL
@Code_Crafters
سطح : پیشرفته - چالشی
شکل زیر :
sql 
*****
****
***
**
*


را در نظر بگیرید که تابع P(5)را نشان میدهد
شما کوئری را بنویسید که این شکل را تا ۲۰ ستاره یا P(20 )را پرینت کند


راهنمایی :می‌توان از WITH و UNION ALL برای ایجاد یک جدول مجازی استفاده کرد که حاوی تمام حالت‌های ممکن از تعداد ستاره‌ها است. سپس، می‌توان از تابع REPEAT در MySQL برای تکرار این چرخه تا زمانی که تعداد ستاره‌ها به ۲۰ برسد، استفاده کرد.
#SQL
@Code_Crafters
نکته ای باید در نظر بگیرد این است که به صورت پیشفرض پایگاه داده MySQL در نظر گرفته شده است .
و اینکه طبقه بندی ها بر اساس دانش لازم از SQL است .
جواب ها تا فردا یا اگر تعداد زیادی سوال را جواب دادند زودتر قرار خواهد گرفت .
راهنمایی ها سعی بر روشن کردن مسیر بوده و جواب نهایی نیستند!!!
جوابتون را کامنت کنید تست میکنم

#SQL
@Code_Crafters
3
CodeCrafters
با توجه به جدول City : سوال :فهرست نام‌های CITY که با حروف صدادار (یعنی a، e، i، o یا u) شروع می‌شوند را از STATION جستجو کنید. نتیجه شما نمی تواند حاوی موارد تکراری باشد. سطح : آسان راهنمایی : جز استفاده از WHERE که برای ایجاد شرط در SQL است باید از تابع…
پاسخ : چند تا از جواب های ممکن :

SELECT DISTINCT CITY FROM STATION WHERE LEFT(CITY,1) IN ('A','E','I','O','U');

SELECT DISTINCT CITY FROM STATION WHERE UPPER(CITY) RLIKE '^[AEIOU]';

SELECT DISTINCT CITY FROM STATION WHERE CITY LIKE "A%" OR CITY LIKE "E%" OR CITY LIKE "I%" OR CITY LIKE "O%" OR CITY LIKE "U%";

SELECT DISTINCT CITY FROM STATION WHERE UPPER(SUBSTR(CITY, 1, 1)) IN ('A', 'E', 'I', 'O', 'U');
2👏1
اگه به این سوال ها علاقه دارید (علاقه موج میزنه ☹️)
میتوانید از سایت هکر رنگ استفاده کنید
سوال ها از ساده تا پیشرفته طبقه بندی و جز SQL چند تا زبان برنامه نویسی دیگه هم پشتیبانی میکنه
اگر جواب سوالی نتوانستید پاسخ بدهید میتوانید از بخش بحث(Discussions) جواب را پیدا کنید اگر توانستید حل کنید هم باز سری به این بخش بزنید و جواب های دیگران ببینید دید خوبی از SQL به دست می آورید .

https://www.hackerrank.com/
👍6💩1
تراکنش در دنیا پایگاه داده ها: قهرمان‌های گمنامِ پشت صحنه 💪

در دنیای پایگاه داده، تراکنش (Transaction) مثل یه گروه سربازه که یا با هم تا تهِ خط می‌رن، یا همه با هم برمی‌گردن. وقتی حرف از تراکنش ها می‌شه، خیلی‌ها یاد تراکنش حساب‌های بانکی میفتن و با خودشون می‌گن: «وا، من که به این پیچیدگی‌ها نیاز ندارم!» اما حقیقت اینه که تراکنش ها فقط مال پایگاه‌های داده‌ی بانک‌ها نیستن. خیلی وقت‌ها مردم گیر یه سری مثال‌های بانکی می‌افتن و فراموش می‌کنن که تو دنیای واقعی، تراکنش ها چقدر کاربرد دارن.

با استفاده از تراکنشها برنامه‌نویس‌ها نه تنها وقتِ خودشون رو ذخیره می‌کنن، بلکه کد مورد نیازشون برای برنامه‌هایی که به پایگاه داده وابسته هستن رو هم کم می‌کنن. اگه پایگاه داده خودش وضعیت تراکنش رو مدیریت نمی‌کرد، باید خود برنامه‌نویس این کار رو انجام می‌داد. به نظر ساده میاد، ولی وقتی با داده‌های مرتبط به هم سروکار داشته باشیم، خیلی زود پیچیده می‌شه.

مثلاً به مراحل ثبت‌نام ساده‌ی یه کاربر فکر کنین. این مراحل باید یه رکورد کاربر و یه رکورد حساب بسازن و بعد اون‌ها رو به هم وصل کنن. بدون تراکنش باید تک تک مراحل رو تو برنامه بنویسیم:

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

اما با تراکنش، می‌تونیم راحت‌تر و تمیزتر عمل کنیم:

تراکنش رو شروع کن
حساب رو بساز
کاربر رو بساز
کاربر رو به حساب وصل کن
تراکنش موفقیت‌آمیز بود؟
اگه آره، پیام موفقیت رو برگردون
اگه نه، پیام خطا رو برگردون

حالا دیگه نگران این نیستیم که بخاطر یه دستوری که موفق نشده، بقیه رو پاک کنیم. یا همه با هم درست انجام می‌شن، یا همه با هم شکست می‌خورن. به همین سادگی!

خب، حالا می‌بینیم که تراکنش ها نه تنها پیچیده نیستن، بلکه تو خیلی از کارها می‌تونن دست چپ و راست برنامه‌نویس‌ها باشن. دیگه این قهرمان‌های گمنام دنیای پایگاه داده رو دست‌کم نگیرین!

#postgresql
@Code_Crafters
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
تراکنش های ابتدایی

ساده‌ترین تراکنش در زیر آمده است. با استفاده از BEGIN تراکنش را شروع کرده و با COMMIT آن را پایان می‌دهد.
sql 

BEGIN;
INSERT INTO employees (first_name, last_name, start_date, salary, job_title, manager_id, department_id) VALUES ('Elizabeth', 'Christensen', current_date, 1, 'Master of the Highwire', 2, 2) RETURNING employee_id;
COMMIT;


مثل آب خوردن کار کرد، درسته؟ شبیه اینه که یه دستور معمولی رو اجرا کنیم ( داریم از دستور RETURNING استفاده می‌کنیم تا بعداً چیزی رو ثابت کنیم). برای اینکه مطمئن بشید داده‌ها ثبت شدن، حالا این دستور رو بزنید:


SELECT    * FROM employees  WHERE    first_name = 'Elizabeth' AND    last_name = 'Christensen';


اما اگر تصمیم بگیرید به جای COMMIT، تراکنش را ROLLBACK کنید، نتیجه‌ای متفاوت خواهید داشت:

BEGIN;

INSERT INTO employees (first_name, last_name, start_date, salary, job_title, manager_id, department_id) VALUES ('Chris', 'Winslett', current_date, 1, 'Jr Director of the Highwire', 2, 2) RETURNING employee_id;

ROLLBACK;


وقتی از دستور ROLLBACK استفاده می‌کنی، مثل این میمونه که داری به پایگاه داده میگی: «بیخیال این تراکنش شو، انگار نه انگار اتفاقی افتاده.» با این کار، هر تغییری که توی تراکنش انجام شده بود، پاک میشه و توی تاریخچه پایگاه داده ذخیره نمیشه. اما یه نکته جالب اینجاست: با اینکه تراکنش ثبت نمیشه، اما پایگاه داده باز هم یه شناسه برای اون تراکنش در نظر می‌گیره. ولی اگه بعدا بخوای اون رکورد رو با دستور select پیدا کنی، هیچی پیدا نمیشه، چون از اول ثبت نشده بوده!!
SELECT * FROM employees WHERE first_name = 'Chris' AND last_name = 'Winslett';

می‌دونی چرا وقتی یک تراکنش رو شروع می‌کنی، حتی قبل از اینکه اون رو نهایی کنی، یک مقدار شناسه (ID) بهت برمی‌گردونه؟

ببین، تراکنش‌ها گروهی از عملیات‌های پایگاه داده هستن که با هم انجام می‌شن. گاهی اوقات، لازمه که یک مقدار شناسه یکتا برای هر رکوردی که وارد پایگاه داده می‌کنیم، داشته باشیم. برای این کار، از دنباله‌ها (sequences) استفاده می‌کنیم. دنباله‌ها، مقدار شناسه بعدی رو به صورت خودکار تولید می‌کنن.

حالا، فرض کن که دو تراکنش همزمان دارن داده وارد پایگاه داده می‌کنن. اگه هر دو تراکنش از دنباله‌ای استفاده کنن که هنوز نهایی نشده، ممکنه هر دو تراکنش مقدار شناسه یکسانی رو دریافت کنن. این باعث می‌شه که دو رکورد با یک شناسه یکسان در پایگاه داده وجود داشته باشن. این کار درست نیست و می‌تونه باعث مشکلاتی بشه.

برای جلوگیری از این مشکل، دنباله‌ها حتی قبل از اینکه تراکنش نهایی بشه، مقدار شناسه بعدی رو تولید می‌کنن. این کار باعث می‌شه که هر دو تراکنش مقدار شناسه متفاوتی رو دریافت کنن.

حالا، اگه تراکنش رو نهایی نکنی، مقدار شناسه‌ای که بهت برمی‌گردونه، فقط یک مقدار موقتی هست. این مقدار تا زمانی که تراکنش نهایی بشه، در پایگاه داده ذخیره نمی‌شه.

اگه تراکنش رو با دستور ROLLBACK لغو کنی، مقدار شناسه‌ای که بهت برمی‌گردونده، از بین می‌ره.

برای اینکه مطمئن بشی که مقدار شناسه‌ای که دریافت می‌کنی، در پایگاه داده ذخیره شده، باید تراکنش رو با دستور COMMIT نهایی کنی.

اگه در حین انجام تراکنش، خطا رخ بده، نمی‌تونی اون رو نهایی کنی. در این صورت، مقدار شناسه‌ای که دریافت می‌کنی، در پایگاه داده ذخیره نمی‌شه.

BEGIN;
INSERT INTO employees (first_name, last_name) VALUES ('Tom', 'Jones') RETURNING employee_id;
COMMIT;

بعد از اجرای دستور بالا، یک دستور ROLLBACK نشان داده خواهد شد. بنابراین، دستور COMMIT ناموفق بوده است زیرا آخرین وضعیت تراکنش یک خطا است.

#postgresql
@Code_Crafters
👍2
رازهای مخفی تراکنش‌های پایگاه داده: هرچی توی تراکنش هست، همونجا میمونه! (Transaction Scope)

تصور کن یه صندوق داری داری که توش کلی کارای عجیب غریب میشه، ولی هیچکس اجازه نداره سرک بکشه تا وقتی کار تموم نشده! همینه داستان تراکنش‌های پایگاه داده.

فرض کن داری تو دوتا کامپیوتر جدا جدا با یه پایگاه داده کار می‌کنی. کامپیوتر اول یه سری دستورات میده، مثلاً یه اطلاعاتی رو عوض می‌کنه یا یه چیزی اضافه می‌کنه، ولی هنوز کارش تموم نشده. حالا کامپیوتر دوم بخواد همون اطلاعات رو ببینه، چی میشه؟ خب، تا وقتی که کارِ اون یکی کامپیوتر تموم نشده و همه چی تایید نشده، کامپیوتر دوم چیزی نمیبینه!

مثل همون صندوقه، اطلاعات تغییرات مخفیه تا کار تموم نشده، بعدش همه می‌بینن چی به چیه. اینجوری مطمئن می‌شیم که همه اطلاعات با هم هماهنگه و هیچ قاطی‌بازی‌ای نمیشه.

پس یادت باشه، تراکنش‌ها مثل یه سری کارای مخفی تو صندوق می‌مونن تا همه چی جمع و جور بشه. هیچکس زودتر از موعد حق نداره سرک بکشه!

#postgresql
@Code_Crafters
2👍1
تراکنش ها در دنیای واقعی

تراکنش‌ها در دنیای واقعی خیلی پیچیده‌تر از مثال‌های ساده‌ای هستند که دیدیم. مثلاً، فرض کن می‌خوایم یه کارمند جدید در شرکتمون اضافه کنیم. این دستورات ساده هستند و به راحتی اجرا می‌شن. ولی اگه در اجرای یکی از این دستورات خطا رخ بده، تمام تغییراتی که انجام شده‌اند، از بین می‌رن:
BEGIN; 
INSERT INTO employees (first_name, last_name, start_date, salary, job_title, manager_id, department_id) VALUES ('Chris', 'Winslett', current_date, 1, 'Jr Director of the Highwire', 2, 2);
INSERT INTO dependents (first_name, last_name, employee_id) VALUES ('oldest', 'kid', (SELECT employee_id FROM employees WHERE first_name = 'Chris' AND last_name = 'Winslett'));
INSERT INTO dependents (first_name, last_name, employee_id) VALUES ('youngest', 'kid', (SELECT employee_id FROM employees WHERE first_name = 'Chris' AND last_name = 'Winslett'));
COMMIT;




اگه دوباره همون کد بالا رو اجرا کنید، بازم با خطا مواجه می‌شید. دلیلش اینه که دوتا مقدار برای employee_id برمی‌گرده. همچنین، کارمند تکراری هم ایجاد نمی‌شه.

وای! چقدر تراکنش‌ها عالین!

حالا بیایید یه کاری کنیم که ببینیم چطوری تراکنش‌ها با خطا مواجه می‌شن.

اول، سعی می‌کنیم مقدار null رو برای فیلد first_name در دستور دوم قرار بدیم. این فیلد توی جدول اجباریه، پس تراکنش با شکست مواجه می‌شه.

بعد، حقوق (salary) رو حذف می‌کنیم. این کار باعث لغو تراکنش قبل از تاییدش می‌شه.

BEGIN;   
INSERT INTO employees (first_name, last_name, start_date, salary, job_title, manager_id, department_id) VALUES ('Bob', 'Young', current_date, 1, 'Jr Director of the Highwire', 2, 2);
INSERT INTO dependents (first_name, last_name, employee_id) VALUES ('oldest', 'kid', (SELECT employee_id FROM employees WHERE first_name = 'Bob' AND last_name = 'Young'));
INSERT INTO dependents (first_name, last_name, employee_id) VALUES (null, 'kid', (SELECT employee_id FROM employees WHERE first_name = 'Bob' AND last_name = 'Young'));
COMMIT;


حواست باشه! اجرای کدی که دیدی، با خطا مواجه شده و به عقب برگشته. یعنی تغییراتی که قرار بود اعمال بشه، ذخیره نشده. نگران نباش، اینجوری اطلاعاتت سالم می‌مونه. برای اطمینان بیشتر، می‌تونی یه سرچ بزنی و ببینی که اسم "Bob Young" توی لیست کارمندا نیست. خیالت راحت!
SELECT *  FROM employees  WHERE  first_name = 'Bob' AND last_name = 'Young';




دلیل این امر این است که تراکنش به طور کامل انجام نشد. این یک حالت "همه یا هیچ" است.

#postgresql
@Code_Crafters
2