שאילתות SELECT
מבנה בסיסי
SELECT column1, column2
FROM table_name
WHERE condition;
SELECT בסיסי
בחירת כל העמודות
-- The asterisk (*) represents "all"
SELECT * FROM users;
בחירת עמודות ספציפיות
SELECT name, email, age
FROM users;
בחירת עמודות עם כינוי
SELECT
name AS שם,
email AS "כתובת מייל",
age AS גיל
FROM users;
WHERE - סינון תוצאות
אופרטורי השוואה
| אופרטור | משמעות | דוגמה |
|---|---|---|
= |
שווה | age = 25 |
<> או != |
שונה | status <> 'inactive' |
> |
גדול מ | price > 100 |
< |
קטן מ | age < 18 |
>= |
גדול או שווה | age >= 18 |
<= |
קטן או שווה | price <= 50 |
-- Users over 18 years old
SELECT * FROM users WHERE age > 18;
-- Products with a specific price
SELECT * FROM products WHERE price = 99.99;
אופרטורים לוגיים
-- AND - שני התנאים חייבים להתקיים
SELECT * FROM users
WHERE age >= 18 AND status = 'active';
-- OR - לפחות תנאי אחד
SELECT * FROM users
WHERE role = 'admin' OR role = 'moderator';
-- NOT - היפוך התנאי
SELECT * FROM users
WHERE NOT status = 'banned';
-- שילוב עם סוגריים
SELECT * FROM products
WHERE (category = 'electronics' OR category = 'computers')
AND price < 1000;
אופרטורים מיוחדים
BETWEEN - טווח ערכים
-- Ages between 18 and 30 (inclusive)
SELECT * FROM users
WHERE age BETWEEN 18 AND 30;
-- Prices in a range
SELECT * FROM products
WHERE price BETWEEN 100 AND 500;
-- תאריכים
SELECT * FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
IN - רשימת ערכים
-- Instead of multiple OR
SELECT * FROM users
WHERE country IN ('Israel', 'USA', 'UK');
-- Equivelent to:
SELECT * FROM users
WHERE country = 'Israel'
OR country = 'USA'
OR country = 'UK';
LIKE - חיפוש תבניות
| תבנית | משמעות |
|---|---|
% |
אפס או יותר תווים |
_ |
תו בודד בדיוק |
-- Names starting with "יו"
SELECT * FROM users WHERE name LIKE 'יו%';
-- Emails ending with "gmail.com"
SELECT * FROM users WHERE email LIKE '%@gmail.com';
-- שמות עם בדיוק 4 אותיות
SELECT * FROM users WHERE name LIKE '____';
-- מכיל את המילה "ספר"
SELECT * FROM products WHERE description LIKE '%ספר%';
IS NULL / IS NOT NULL
-- Users without a phone number
SELECT * FROM users WHERE phone IS NULL;
-- Users with a phone number
SELECT * FROM users WHERE phone IS NOT NULL;
ORDER BY - מיון
-- Ascending order (default) מיון עולה
SELECT * FROM products ORDER BY price;
SELECT * FROM products ORDER BY price ASC;
-- Descending order מיון יורד
SELECT * FROM products ORDER BY price DESC;
-- מיון לפי מספר עמודות
SELECT * FROM products
ORDER BY category ASC, price DESC;
-- מיון לפי עמודה לא בסלקט
SELECT name, age FROM users
ORDER BY created_at DESC;
LIMIT - הגבלת תוצאות
-- Ten התוצאות הראשונות
SELECT * FROM products LIMIT 10;
-- 10 המוצרים היקרים ביותר
SELECT * FROM products
ORDER BY price DESC
LIMIT 10;
-- דילוג על תוצאות (לפאגינציה)
-- MySQL/PostgreSQL
SELECT * FROM products LIMIT 10 OFFSET 20;
-- SQL Server
SELECT * FROM products
ORDER BY id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
DISTINCT - ערכים ייחודיים
-- All כל הקטגוריות (ללא כפילויות)
SELECT DISTINCT category FROM products;
-- שילוב עמודות
SELECT DISTINCT city, country FROM users;
-- ספירת ערכים ייחודיים
SELECT COUNT(DISTINCT category) FROM products;
ביטויים וחישובים
-- Basic Expressions חישובים בסיסיים
SELECT
name,
price,
quantity,
price * quantity AS total
FROM order_items;
-- פונקציות מחרוזת
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
UPPER(email) AS email_caps,
LENGTH(name) AS name_length
FROM users;
-- עיגול מספרים
SELECT
price,
ROUND(price, 0) AS rounded_price,
FLOOR(price) AS floor_price,
CEIL(price) AS ceil_price
FROM products;
דוגמה מקיפה
-- Find את 10 המשתמשים הפעילים מישראל
-- שנרשמו ב-2024, מסודרים לפי תאריך הרשמה
SELECT
id,
name AS שם,
email AS מייל,
created_at AS "תאריך הרשמה"
FROM
users
WHERE
country = 'Israel'
AND status = 'active'
AND created_at BETWEEN '2024-01-01' AND '2024-12-31'
ORDER BY
created_at DESC
LIMIT 10;
טיפים
- **הימנעו מ-SELECT *** - ציינו עמודות ספציפיות
- השתמשו ב-LIMIT - במיוחד בפיתוח
- בדקו NULL עם IS NULL, לא עם =
- סדר הפקודות - SELECT, FROM, WHERE, ORDER BY, LIMIT
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
למה להימנע מ-
SELECT *בקוד?הצגת התשובה
תשובה א. עדיף לבחור רק את העמודות שצריך.
-
איך מקבלים 10 תוצאות, מהיקרה לזולה?
הצגת התשובה
תשובה ב. DESC מסדר מהגבוה לנמוך, ו-LIMIT בא בסוף.
-
איך בודקים ערך NULL?
הצגת התשובה
תשובה א. NULL הוא "לא ידוע", ו-= NULL אף פעם לא מחזיר אמת.