今天要介紹的是邏輯運算子AND和OR,
同為邏輯運算子的還有NOT (記得昨天的!跟<>嗎?),
我們這個年代(???)出生的小孩,文組數學課已經不教若P則Q了,
第一次看到的時候超興奮,
想當年(???)剛學程式在各種TRUE AND FALSE 是否為真轉來轉去,
轉的超過癮!
其實說來說去,AND和OR也就是字面上的意思,「和」跟「或」,
有時候我們對撈資料的條件會比較多。
例如去相親的時候:「想找男生,而且要會煮菜」,這個「而且」就是「和」的意思,
這時便要使用AND:SELECT * FROM 相親會員 WHERE性別是男生AND興趣是烹飪;
又或者去餐廳點餐會想要「主廚推薦或是豬肉料理」,
這時便要使用OR:SELECT * FROM 餐點 WHERE 主廚推薦=1 OR 肉類別='豬';
(看不懂主廚推薦=1是什麼意思的可以回去第四日看一下常用型別)
也有兩者複合使用的狀況,
例如「訂演唱會門票想要訂搖滾區的位置,或是A區第一排也可以」,
寫成SQL會變成:
SELECT * FROM 演唱會門票 WHERE 售出=0 AND (座位類別='搖滾區' OR (座位類別='A區' AND 排數=1))。
下面會以我們建好的student資料為範例,試試看各種SELECT,
在看語法之前也可以試著自己先寫看看。
找出2020年入學的女性學生。
這裡可以看到兩個條件:2020年入學 和(AND)女性,
入學的日期是start_date欄位,2020年入學代表入學日期要大於等於2020年第一天,
性別是gender欄位,女性的話,性別欄位的值是'F',
我們的表全部都是學生,所以學生不算條件。
SELECT * FROM Education.student WHERE gender='F' AND start_date>='2020/01/01';
找出不是2019年下半年入學的學生。
這裡可以看到條件是:不是2019年下半年入學,
入學的日期是start_date欄位,2019年下半年的區間是8月到12月,
但要「不是」下半年,所以就是在2019年8月之前或是(OR)2020年1月之後入學的學生。
SELECT * FROM Education.student WHERE start_date>='2020/01/01' OR start_date<'2019/07/01';
找出不是2019年下半年入學的女學生。
這句的話可以看到條件是
1.不是2019年下半年入學
2.而且是女學生
語法就會是條件一和(AND)條件二,
我們把剛剛WHERE後面寫的篩選條件貼過來:
1.不是2019年下半年入學 (start_date>='2020/01/01' OR start_date<'2019/07/01')
2.而且 AND 是女學生 (gender='F')
SELECT * FROM Education.student WHERE (start_date>='2020/01/01' OR start_date<'2019/07/01') AND gender='F' ;
換你試試看:
找出2000年後出生的女學生和2000年以前出生不是女生的男學生。
選出的結果會長這樣
語法如下:
SELECT * FROM Education.student WHERE (gender='F' AND birth_date>'2000/01/01') OR (gender!='F' AND birth_date<'2000/01/01');
可以試著自己想一些條件練習看看!