پایگاههای داده با هدف ذخیرهسازی، مدیریت و بازیابی اطلاعات طراحی شدن و پرسوجو یا Query به عنوان یکی از مهمترین ابزارهای تعامل با پایگاه دادهها شناخته میشن. پرسوجوها به کاربران این امکان رو میدن تا اطلاعات مورد نیازشون رو از بین حجم زیاد دادههای پایگاه دادهها استخراج کنن.
پرسوجو به دستوری گفته میشه که به یک پایگاه داده ارسال میشه تا اطلاعات خاصی رو ازش استخراج کنه. این دستورات میتونن به زبانهای مختلفی مثل SQL (Structured Query Language) نوشته شن. پرسوجوها به کاربران اجازه میدن تا دادهها رو جستجو، بازیابی، بهروزرسانی یا حذف کنن.
CREATE VIEW StudentGrades AS
SELECT students.name, courses.course_name, enrollments.grade
FROM students
JOIN enrollments ON students.id = enrollments.student_id
JOIN courses ON enrollments.course_id = courses.id;
WITH TopStudents AS (
SELECT student_id, AVG(grade) AS avg_grade
FROM enrollments
GROUP BY student_id
HAVING AVG(grade) > 85
)
SELECT students.name
FROM students
JOIN TopStudents ON students.id = TopStudents.student_id;
PREPARE stmt FROM 'SELECT * FROM users WHERE username = ? AND password = ?';
EXECUTE stmt USING @username, @password;
GRANT SELECT ON students TO read_only_user;
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3👏2❤1👌1
❓کوییز شماره ۱۷۴: کدوم یک از موارد زیر در مورد عبارت MERGE در SQL صحیحه؟
Anonymous Quiz
10%
فقط برای درج دادههای جدید استفاده میشه.
10%
نمیشه با یک شرط WHERE استفاده شه.
17%
فقط در MySQL پشتیبانی میشه.
62%
ترکیبی از عملیاتهای INSERT، UPDATE و DELETE هست.
👍5❤2🤔2😎2
پایگاههای داده SQL به مدلهای ساختاریافته و رابطهای تأکید میکنن، درحالیکه پایگاههای داده NoSQL با رویکردی برای مدیریت دادههای متنوع و پویا با تأکید بیشتر بر مقیاسپذیری و سرعت دارن. این مطلب تفاوتهای بین این دو سیستم پایگاه داده رو بررسی میکنه.
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2👏2👌1
عبارت WHERE در SQL برای فیلتر کردن رکوردها بر اساس شرایط مشخص استفاده میشه. با استفاده از این عبارت، میتونیم دادهها رو محدود کنیم تا تنها رکوردهایی که شرایط تعیین شده در اونها صادقه، نشون داده شن.
SELECT column1, column2, ...
FROM table_name
WHERE condition;
در این ساختار:
SELECT column1, column2, ...
: تعیین میکنه که کدوم ستونها از جدول بازیابی شن.FROM table_name
: مشخص میکنه که دادهها از کدام جدول بازیابی شن.WHERE condition
: شرطی که باید برای هر رکورد بررسی شه. تنها رکوردهایی که این شرط رو برآورده میکنن، در نتیجه نشون داده میشن.-
=
(برابر بودن): برای بررسی اینکه آیا دو مقدار برابرن یا نه.-
!=
یا < >
(مخالف بودن): برای بررسی اینکه آیا دو مقدار نابرابرن یا نه.-
>
(بزرگتر بودن): برای بررسی اینکه آیا مقدار اول بزرگتر از مقدار دومه یا نه.-
<
(کوچکتر بودن): برای بررسی اینکه آیا مقدار اول کوچکتر از مقدار دومه یا نه.-
>=
(بزرگتر یا مساوی بودن): برای بررسی اینکه آیا مقدار اول بزرگتر یا مساوی با مقدار دومه یا نه.-
<=
(کوچکتر یا مساوی بودن): برای بررسی اینکه آیا مقدار اول کوچکتر یا مساوی با مقدار دومه یا نه. در مثال زیر، همه کارمندانی که سن اونها بیشتر از 30 ساله، انتخاب میشن.SELECT * FROM employees
WHERE age > 30;
-
AND
(و): وقتی هر دو شرط باید صحیح باشند.-
OR
(یا): وقتی حداقل یکی از دو شرط باید صحیح باشد.-
NOT
(نفی): برای معکوس کردن شرط. در مثال زیر، همه کارمندانی که سن بیشتر از 30 سال و حقوق بیشتر از 50000 دارن، انتخاب میشن.SELECT * FROM employees
WHERE age > 30 AND salary > 50000;
BETWEEN
برای بررسی اینکه آیا مقدار یک ستون در یک بازه مشخص قرار دارد یا نه، استفاده میشه. در مثال زیر، همه کارمندانی که سنشون بین 30 و 40 ساله، انتخاب میشن.SELECT * FROM employees
WHERE age BETWEEN 30 AND 40;
IN
برای بررسی اینکه آیا مقدار یک ستون در یک مجموعه از مقادیر مشخص قرار داره یا نه، استفاده میشه. در این مثال، همه کارمندانی که در یکی از دپارتمانهای HR، Finance یا IT کار میکنن، انتخاب میشن.SELECT * FROM employees
WHERE department IN ('HR', 'Finance', 'IT');
LIKE
برای جستجوی الگوهای مشخص در رشتهها به کار میره. این عبارت معمولاً با %
و _
استفاده میشه. %
نماینده هیچ یا چند کاراکتر و _
نماینده دقیقاً یک کاراکتر هست. در این مثال، همه کارمندانی که نام آنها با حرف A شروع میشه، انتخاب میشن.SELECT * FROM employees
WHERE name LIKE 'A%';
IS NULL
برای بررسی خالی بودن مقدار یک ستون استفاده میشه. در این مثال، همه کارمندانی که شماره تلفنشون خالیه، انتخاب میشن.SELECT * FROM employees
WHERE phone_number IS NULL;
زمان استفاده از چند شرط در یک عبارت WHERE، اولویت عملگرها اهمیت داره. عملگرهای
NOT
دارای بالاترین اولویت، بعد عملگرهای مقایسهای (=
, !=
, >
, <
, >=
, <=
)، و در نهایت عملگرهای AND
و OR
قرار دارن. در این مثال، اول شرط داخل پرانتز ارزیابی میشه (آیا سن بیشتر از 30 یا حقوق کمتر از 50000 است)، بعد نتیجهاش با NOT
معکوس میشه.SELECT * FROM employees
WHERE NOT (age > 30 OR salary < 50000);
برای تغییر اولویت عملگرها و اعمال شرطها به ترتیبی که مورد نظره، میشه از پرانتزها استفاده کرد. در این مثال، اول شرط داخل پرانتز ارزیابی میشه (آیا سن بیشتر از 30 و حقوق بیشتر از 50000 است)، بعد نتیجهاش با شرط خارج پرانتز ترکیب میشه (یا دپارتمان برابر با IT).
SELECT * FROM employees
WHERE (age > 30 AND salary > 50000) OR department = 'IT';
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3👌2👨💻2
❓کوییز شماره ۱۷۵: فرض کنین جدولی به نام sales داریم و میخواهیم رکوردهایی رو انتخاب کنیم که مقدار فروش اونها بیشتر از مقدار فروش تمامی رکوردهایی باشه که مربوط به سال 2020 هستن. کدوم یک از گزینههای زیر صحیحه؟
Anonymous Quiz
10%
SELECT * FROM sales WHERE amount > ANY (SELECT amount FROM sales WHERE year = 2020);
13%
SELECT * FROM sales WHERE amount > (SELECT AVG(amount) FROM sales WHERE year = 2020);
30%
SELECT * FROM sales WHERE amount > ALL (SELECT amount FROM sales WHERE year = 2020);
47%
SELECT * FROM sales WHERE amount > (SELECT MAX(amount) FROM sales WHERE year = 2020);
👍4🤔2👌1😎1
یادگیری SQL برای هر کسی که میخواد بهعنوان تحلیلگر داده، مهندس داده یا دانشمند داده فعالیت کنه بسیار مهمه و در زمینههای دیگه هم کاربرد داره. در این مطلب مهمترین سوالات مصاحبه SQL رو بررسی کردیم.
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3👌1😎1
دستور
GROUP BY
در SQL برای گروهبندی رکوردها بر اساس یک یا چند ستون استفاده میشه. این دستور اکثرا همراه با توابع تجمعی مثل SUM ،COUNT ،AVG ،MAX
و MIN
به کار میره. هدف اصلی GROUP BY، جمعبندی و تجمیع دادهها به نحوی هست که بتونیم نتایج خلاصهتری از دادهها استخراج کنیم.- ستونهایی که در دستور
SELECT
استفاده میشن، باید یا در دستور GROUP BY
آورده شن یا شامل توابع تجمعی باشن.- نمیشه از
GROUP BY
برای گروهبندی بر اساس ستونهایی که شامل دادههای غیرتجمعی هستن، استفاده کرد.دستور HAVING در SQL برای فیلتر کردن گروههای داده بعد از گروهبندی با استفاده از دستور GROUP BY به کار میره. برخلاف دستور WHERE که برای فیلتر کردن رکوردها قبل از گروهبندی استفاده میشه، HAVING برای اعمال شرطها روی گروههای ایجاد شده به کار میرن.
دستور
ORDER BY
برای مرتبسازی نتایج جستجو بر اساس یک یا چند ستون استفاده میشه. این مرتبسازی میتونه به صورت صعودی (ASC) یا نزولی (DESC) با هدف نمایش منظمتر دادهها و پیدا کردن سریعتر اطلاعات مفید باشه.- اگر نوع مرتبسازی مشخص نشه، به صورت پیشفرض مرتبسازی به صورت صعودی خواهد بود.
- میشه بر اساس چند ستون مرتبسازی کرد. در این حالت، مرتبسازی اول بر اساس ستون اول و بعد بر اساس ستون دوم صورت میگیره.
SELECT Name, Date
FROM Order
ORDER BY Name ASC, Date DESC;
sample
در دیتابیس MyDB
انتخاب میشه و ستونهای ID،Name،Age
و Salary
نشون داده میشن. در کوئری دوم، نام و مجموع حقوق از جدول sample
انتخاب و بر اساس ستون Name
گروهبندی انجام میشه و بعد مجموع حقوق هر گروه نشون داده میشه.#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2👏1👌1
❓کوییز شماره ۱۷۶: در SQL Server، کدوم عبارت در مورد استفاده از GROUP BY با ROLLUP صحیحه؟
Anonymous Quiz
13%
عبارت ROLLUP فقط با یک ستون در GROUP BY کار میکنه.
25%
عبارت ROLLUP جمعهای جزئی رو فقط برای ستون اول در GROUP BY تولید میکنه.
31%
عبارت ROLLUP جمعهای جزئی رو برای تمام ترکیبات ممکن ستونها در GROUP BY تولید میکنه.
31%
عبارت ROLLUP جمعهای جزئی رو از چپ به راست برای ستونهای ذکر شده در GROUP BY تولید میکنه.
❤5😎2👍1🤔1
💡مرور مطالب گفته شده با بررسی یک کوئری
فرض کنید که سه جدول
هدف اینکه مجموع فروشهای انجامشده توسط هر کارمند رو در سال 2023 محاسبه کنیم، بعد فقط کارمندانی که مجموع فروششون بیشتر از 50,000 واحد هست رو نشون بدیم و نتایج رو به ترتیب نزولی مجموع فروش مرتب کنیم.
🔵 ساختار جداول و کوئری
🔵 بررسی جزئیات کوئری
🔵 انتخاب ستونها: در اینجا سه ستون
🔵 منبع داده و ارتباط جداول: در این بخش، جدول
🔵 شرطها (WHERE): این قسمت مشخص میکنه که فقط فروشهایی که در سال 2023 انجام شدن، انتخاب شن.
🔵 گروهبندی (GROUP BY): دادهها بر اساس نام کارمند و نام دپارتمان گروهبندی میشن.
🔵 شرطها برای گروهها (HAVING): فقط گروههایی که مجموع فروششون بیشتر از 50000 واحده، انتخاب میشن.
🔵 مرتبسازی (ORDER BY): نتایج بر اساس مجموع فروش به ترتیب نزولی مرتب میشن.
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
فرض کنید که سه جدول
Employees
شامل اطلاعات کارمندان، Departments
شامل اطلاعات دپارتمانها و جدول Sales
شامل اطلاعات فروش رو داریم.هدف اینکه مجموع فروشهای انجامشده توسط هر کارمند رو در سال 2023 محاسبه کنیم، بعد فقط کارمندانی که مجموع فروششون بیشتر از 50,000 واحد هست رو نشون بدیم و نتایج رو به ترتیب نزولی مجموع فروش مرتب کنیم.
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName NVARCHAR(50),
DepartmentID INT
);
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName NVARCHAR(50)
);
CREATE TABLE Sales (
SaleID INT PRIMARY KEY,
EmployeeID INT,
SaleAmount DECIMAL(10, 2),
SaleDate DATE
);
SELECT
E.EmployeeName,
D.DepartmentName,
SUM(S.SaleAmount) AS TotalSales
FROM
Employees E
JOIN
Sales S ON E.EmployeeID = S.EmployeeID
JOIN
Departments D ON E.DepartmentID = D.DepartmentID
WHERE
S.SaleDate >= '2023-01-01' AND S.SaleDate <= '2023-12-31'
GROUP BY
E.EmployeeName, D.DepartmentName
HAVING
SUM(S.SaleAmount) > 50000
ORDER BY
TotalSales DESC;
EmployeeName
(نام کارمند)، DepartmentName
(نام دپارتمان) و SUM(S.SaleAmount) AS TotalSales
(مجموع فروشها به عنوان TotalSales) انتخاب میشن.SELECT E.EmployeeName, D.DepartmentName, SUM(S.SaleAmount) AS TotalSales
Employees
با جدول Sales
بر اساس EmployeeID
و جدول Departments
بر اساس DepartmentID
مرتبط شدن.FROM Employees E
JOIN Sales S ON E.EmployeeID = S.EmployeeID
JOIN Departments D ON E.DepartmentID = D.DepartmentID
WHERE S.SaleDate >= '2023-01-01' AND S.SaleDate <='2023-12-31'
GROUP BY E.EmployeeName, D.DepartmentName
HAVING SUM(S.SaleAmount) > 50000
ORDER BY TotalSales DESC
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2👏1👌1
زیرپرسوجو یا Subquery، یک کوئری تودرتو (nested query) هست که داخل کوئری دیگه قرار میگیره. به عبارت دیگه، سابکوئری یک پرسوجوی SQL هست که به عنوان بخشی از یک کوئری دیگه اجرا میشه. سابکوئری میتونه در بخشهای مختلف یک کوئری اصلی مثل SELECT، FROM، WHERE، HAVING و حتی در دستورهای UPDATE و DELETE استفاده شه.
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
SELECT name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
SELECT name
FROM employees e1
WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
SELECT name, (SELECT COUNT(*) FROM projects WHERE manager_id = e.employee_id) AS project_count
FROM employees e;
SELECT sub.department_id, sub.avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id) sub
WHERE sub.avg_salary > 50000;
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👏2👌2👨💻2❤1
❓کوییز شماره ۱۷۷: کدوم یک از موارد زیر در مورد عملگر EXISTS در Subquery صحیح نیست؟
Anonymous Quiz
22%
تمام ردیفهای Subquery رو قبل از ارزیابی نتیجه پردازش میکنه.
13%
زمانی که حداقل یک ردیف برگردانده شه، TRUE میشه.
35%
معمولاً با یک زیرپرسوجوی وابسته استفاده میشه.
30%
همیشه یک مقدار Boolean (درست یا نادرست) برمیگردونه.
👍6😁2😎1
دو جدول مشتری با ستونهای customer_name و customer_id و سفارشات با ستونهای order_date، customer_id و order_id داریم. برای پیدا کردن نام مشتریانی که تعداد سفارشهاشون بیشتر از میانگین تعداد سفارشهای همه مشتریانه، از یک Subquery استفاده میکنیم.
SELECT customer_id, COUNT(order_id) AS order_count
FROM Orders
GROUP BY customer_id
SELECT AVG(order_count)
FROM (
SELECT customer_id, COUNT(order_id) AS order_count
FROM Orders
GROUP BY customer_id
) AS subquery
SELECT customer_name
FROM Customers
WHERE customer_id IN (
SELECT customer_id
FROM Orders
GROUP BY customer_id
HAVING COUNT(order_id) > (
SELECT AVG(order_count)
FROM (
SELECT customer_id, COUNT(order_id) AS order_count
FROM Orders
GROUP BY customer_id
) AS subquery
)
);
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👏2👌1
دو نوع اصلی پایگاه دادهها SQL و NoSQL هستن که هر کدوم از این دو نوع پایگاه داده ابزارها و نرمافزارهای خاص خودشون رو دارن.
علاوه بر نرمافزارهای اصلی پایگاه داده، ابزارهای متعددی برای مدیریت و توسعه پایگاه دادهها وجود دارن. بعضی از این ابزارها عبارتند از:
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥1👨💻1
❓کوییز شماره ۱۷۸: کدوم یک از ابزارهای زیر یک راهحل مجازیسازی داده است که میتونه دادههای ناهمگن از منابع مختلف رو یکپارچه کنه و به عنوان یک لایه انتزاعی بین برنامههای کاربردی و منابع داده عمل کنه؟
Anonymous Quiz
16%
Denodo
12%
Talend
56%
Apache Drill
16%
Informatica PowerCenter
👍3❤1🤔1👌1😎1
#Weekend
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2👏2
Audio
#Webinars
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2👏1
در پایگاههای داده، مدیریت بهینه دادهها اهمیت خاصی داره. دو تکنیک اساسی که برای بهبود عملکرد و یکپارچگی دادهها به کار میرن، نرمالسازی و نرمالزدایی (Normalization and Denormalization) هستن. انتخاب بین این دو روش باید بر اساس نیازها و الزامات سیستم انجام شه تا بهترین عملکرد و کارایی به دست بیاد.
-فرم نرمال اول (1NF): در این فرم، همه ستونهای جدول باید atomic باشن، یعنی هر ستون باید تنها یک مقدار منحصر به فرد داشته باشه و جداول باید بدون تکرار و چندتایی باشن.
-فرم نرمال دوم (2NF): برای رسیدن به فرم نرمال دوم، اول باید جدول به فرم نرمال اول رسیده باشه. بعد همه ستونهای غیر کلیدی باید به کلید اصلی بهطور کامل وابسته باشن، یعنی نباید هیچگونه وابستگی جزئی وجود داشته باشه.
-فرم نرمال سوم (3NF): برای رسیدن به فرم نرمال سوم، اول باید جدول به فرم نرمال دوم رسیده باشه. بعد هیچ کدوم از ستونهای غیر کلیدی نباید به ستونهای غیر کلیدی دیگه وابستگی Transitive داشته باشن.
وابستگی ترانزیتی (Transitive Dependency) در پایگاههای داده به وضعیتی گفته میشه که یک ستون غیر کلیدی به یک ستون غیر کلیدی دیگه وابسته باشه، نه به کلید اصلی.
-فرم نرمال بویس-کاد (Boyce-Codd Normal Form - BCNF): این فرم تکمیلکننده فرم نرمال سومه و اطمینان حاصل میکنه که هر وابستگی تابعی در جدول، باید تنها و تنها به کلید اصلی وابسته است.
-فرم نرمال چهارم (4NF): این فرم از چند مقدار بودن جداول جلوگیری میکنه تا هیچ ترکیب چند مقداری از دادهها در یک جدول وجود نداشته باشه.
-فرم نرمال پنجم (5NF): این فرم اطمینان میده که هیچ وابستگی پیوستی در جدول وجود نداره و جداول باید به نحوی باشن که بدون از دست دادن اطلاعات بشه اونها رو به بخشهای کوچکتر تقسیم کرد.
وابستگی پیوستی (Join Dependency) زمانی اتفاق میافته که یک جدول نمیتونه بدون از دست دادن اطلاعات به جداول کوچکتر تقسیم شه. به عبارت دیگه، اگه جدول به جداول کوچکتر تقسیم شه، برای بازسازی اطلاعات اصلی نیاز به پیوندهای پیچیده (Join) خواهد بود.
#Database
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3👏2👌1