JavaRush /Kurslar /All lectures for AZ purposes /Cədvəllərlə sub-sorğular

Cədvəllərlə sub-sorğular

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

Subquery bir cədvəl qaytarır

Və nəhayət üçüncü seçim - subquery bir tam cədvəl qaytarır. Bu ən çox rast gəlinən variantdır.

Çox vaxt biz müəyyən bir cədvəli bir az düzəltmək istəyirik. Və yalnız bundan sonra onu digər cədvəllə (JOIN ON operatoru vasitəsilə) birləşdiririk.

Gəlin ən sadə haldan başlayaq, burada iki cədvəli JOIN vasitəsilə birləşdirirdik:

SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id

Və sən yəqin ki, xatırlayırsan, task cədvəlində heç kimə yerləşdirilməmiş tapşırıqlar var: employee_id NULL-a bərabərdir.

Gəlin düzəldilmiş cədvəli yaradaq, burada bütün sahibsiz tapşırıqları direktora təyin edək (onun ID-si = 4).

Bunun üçün IFNULL() funksiyasından istifadə edək:

SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task 

Və bu sorğunun nəticəsi:

id employee_id name deadline
1 1 Frontend səhvini düzəltmək 2022-06-01
2 2 Backend səhvini düzəltmək 2022-06-15
3 5 Kofe almaq 2022-07-01
4 5 Kofe almaq 2022-08-01
5 5 Kofe almaq 2022-09-01
6 4 Ofisi təmizləmək (NULL)
7 4 Həyatdan zövq almaq (NULL)
8 6 Həyatdan zövq almaq (NULL)

Qırmızı rəngdə düzəldilmiş hücrə qeyd olunub.

İndi düzəldilmiş cədvəli sorğuya daxil edək:

SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id

task cədvəli yerinə.

Bu sorğu belə görünəcək:

SELECT * FROM employee e JOIN (  SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task ) t ON e.id = t.emploee_id

Task sözü yerinə dairəvi mötərizələr və içində sorğu bədənini yerləşdirdik.

Beləliklə, biz vəziyyəti WITH operatoru ilə rahatlaşdırdıq.

WITH task2(id, employee_id, name, deadline) AS (SELECT id, IFNULL(employee_id, 4), name, deadline FROM task) SELECT * FROM employee e JOIN task2 t ON e.id = t.emploee_id

Bu, sənin işini xeyli rahatlaşdıracaq :)

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION