【388天】我愛刷題系列147(2018.02.28)

@(一隻心中無碼的程序員)專欄程序員

叨叨兩句

  1. ~

SQL習題042

題目描述
存在以下的視圖:
create view emp_v as select * from employees where emp_no >10005;
CREATE TABLE employees (
emp_no int(11) NOT NULL,
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));
獲取employees中的行數據,且這些行也存在於emp_v中。注意不能使用intersect關鍵字。spa

輸出格式:
code

解題思路是運用 LEFT JOIN 鏈接兩表,用 IS NULL 語句限定條件:
一、用 LEFT JOIN 鏈接 film 和 film_category,限定條件爲 f.film_id = fc.film_id,即鏈接電影id和電影分類id,若是電影沒有分類,則電影分類id顯示null
二、再用 WHERE 來限定條件 fc.category_id IS NULL 選出沒分類的電影
/** 注意:最後一句若寫成 ON f.film_id = fc.film_id AND fc.category_id IS NULL,則意義變成左鏈接兩表 film_id 相同的記錄,且 fc.category 的值爲 null,因爲 fc.category的值不爲null,即(f.film_id = fc.film_id AND fc.category_id IS NULL)恆爲FALSE,因此左鏈接後只顯示film表的數據,而 film_category 表的數據全爲 null**/

SELECT f.film_id, f.title FROM film f LEFT JOIN film_category fc
ON f.film_id = fc.film_id WHERE fc.category_id IS NULL
相關文章
相關標籤/搜索