SQL для Вікіпроектів/Об’єднання таблиць - Категорії

Матеріал з Вікіпідручника
Перейти до навігації Перейти до пошуку

Перед цим ми робили запити лише до однієї таблиці.

Категорії[ред.]

Quarry-logo-icon.svg Категорії в яких знаходиться стаття 'Pro GIT'
USE ukwikibooks_p;

SELECT cl_to FROM categorylinks
JOIN page 
    ON categorylinks.cl_from = page.page_id
WHERE 
    page.page_title = 'Pro_GIT' AND 
    page.page_namespace = 0


Quarry-logo-icon.svg Категорії в яких знаходиться стаття 'Pro GIT'
USE ukwikibooks_p;

SELECT cl_to FROM categorylinks, page
where page.page_title = 'Pro_GIT'
and page.page_namespace = 0
and categorylinks.cl_from = page.page_id


Quarry-logo-icon.svg Вміст категорії 'Інформатика та програмування'
USE ukwikibooks_p;

SELECT page_title, cl_type 
FROM page
JOIN categorylinks
	ON cl_from = page_id
WHERE 
	cl_to = 'Інформатика_та_програмування'
ORDER BY cl_type DESC


Quarry-logo-icon.svg Некатегоризовані статті
USE ukwikibooks_p;

SELECT 
	page_title
FROM page 
WHERE 
	page_is_redirect = 0 AND
	page_namespace = 0 AND
	NOT EXISTS (
      SELECT 1 FROM categorylinks 
      WHERE cl_from = page_id
    )
ORDER BY page_title


Quarry-logo-icon.svg Пусті категорії
USE ukwikibooks_p;

SELECT 
	page_title
FROM page 
WHERE 
	page_namespace = 14 AND
	NOT EXISTS (
      SELECT 1 FROM categorylinks 
      WHERE cl_to = page_title
    )
ORDER BY page_title


Quarry-logo-icon.svg Категорії, що не мають сторінки, відсортовані за кількістю елементів у категорії
USE ukwikibooks_p;

SELECT 
    cl_to, 
    count(1) as children
FROM categorylinks 
WHERE 
    NOT EXISTS (
      SELECT 1 FROM page
      WHERE page_title = cl_to
    )
GROUP BY cl_to
ORDER BY children DESC


Quarry-logo-icon.svg Всі пари категорій, що мають спільні сторінки, відсортовані за кількістю спільних сторінок
USE ukwikibooks_p;

SELECT 
    cat_link1.cl_to as category1, 
    cat_link2.cl_to as category2, 
    count(page_id) as pages
FROM page 
JOIN categorylinks cat_link1
    ON cat_link1.cl_from = page_id
JOIN categorylinks cat_link2
    ON cat_link2.cl_from = page_id
WHERE 
    cat_link1.cl_to <  cat_link2.cl_to
GROUP BY 
    cat_link1.cl_to, cat_link2.cl_to
ORDER BY pages DESC