שאילתות 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;

טיפים

  1. **הימנעו מ-SELECT *** - ציינו עמודות ספציפיות
  2. השתמשו ב-LIMIT - במיוחד בפיתוח
  3. בדקו NULL עם IS NULL, לא עם =
  4. סדר הפקודות - SELECT, FROM, WHERE, ORDER BY, LIMIT

← סוגי נתונים | המשך ל-JOIN →

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. למה להימנע מ-SELECT * בקוד?

    1. מביא עמודות מיותרות, ונשבר כשמשנים את הטבלה
    2. זה אסור ב-MySQL
    3. זה איטי תמיד פי 10
    4. זה לא עובד
    הצגת התשובה

    תשובה א. עדיף לבחור רק את העמודות שצריך.

  2. איך מקבלים 10 תוצאות, מהיקרה לזולה?

    1. SELECT ... ORDER BY price LIMIT 10
    2. SELECT ... ORDER BY price DESC LIMIT 10
    3. SELECT ... LIMIT 10 ORDER BY price
    4. SELECT TOP price 10
    הצגת התשובה

    תשובה ב. DESC מסדר מהגבוה לנמוך, ו-LIMIT בא בסוף.

  3. איך בודקים ערך NULL?

    1. IS NULL
    2. = NULL
    3. == NULL
    4. EQUALS NULL
    הצגת התשובה

    תשובה א. NULL הוא "לא ידוע", ו-= NULL אף פעם לא מחזיר אמת.