演算子と述語①
今回から4回にわたり論理演算子と述語について説明します。以下の項目となります。
・論理演算子
・LIKE熟語
・IN熟語とBETWEEN述語
・集合演算子
この内、今回は論理演算子の説明をします。
事前準備
まず、以下のテーブルを作成します。論理演算子と述語の説明で使用するテーブルです。
表名:給与テーブル
項目:氏名(VARCHAR(12))、勤務区分(VARCHAR(12)、勤続年数(INT)、基本給(万円)(INT)、役職(VARCHAR(12)
表名:書籍テーブル
項目:書籍コード(INT)、分類(VARCHAR(6))、シリーズ名(VARCHAR(30))、書籍名(VARCHAR(30))
表名:仕入担当テーブル
項目:氏名(VARCHAR(12))
表名:売上担当テーブル
項目:氏名(VARCHAR(12))
表のイメージは以下のとおりです。




テーブルを作成したらレコードを投入します。SQLは以下のとおりです。
給与テーブル
INSERT INTO 給与 (氏名,勤務区分,勤務年数,基本給(万円),役職) VALUES (‘鈴木勝弘’,’夜勤’,8,28,”);
INSERT INTO 給与 (氏名,勤務区分,勤務年数,基本給(万円),役職) VALUES (‘内藤朋美’,’朝勤’,10,30,’チーフ’);
INSERT INTO 給与 (氏名,勤務区分,勤務年数,基本給(万円),役職) VALUES (‘佐々木義男’,’日勤’,6,40,’マネージャ’);
INSERT INTO 給与 (氏名,勤務区分,勤務年数,基本給(万円),役職) VALUES (‘和田実’,’日勤’,3,18,”);
INSERT INTO 給与 (氏名,勤務区分,勤務年数,基本給(万円),役職) VALUES (‘高橋正雄’,’深夜勤’,5,25,’チーフ’);
INSERT INTO 給与 (氏名,勤務区分,勤務年数,基本給(万円),役職) VALUES (‘矢島美佐子’,’日勤’,7,22,’チーフ’);
書籍
INSERT INTO 書籍 (書籍コード,分類,シリーズ名,書籍名) VALUES (10511,’CH1′,’入門シリーズ’,’フランス料理’);
INSERT INTO 書籍 (書籍コード,分類,シリーズ名,書籍名) VALUES (10512,’JP1′,’入門シリーズ’,’日本料理’);
INSERT INTO 書籍 (書籍コード,分類,シリーズ名,書籍名) VALUES (11860,’EU2′,’親子料理教室’,’冷たいお菓子’);
INSERT INTO 書籍 (書籍コード,分類,シリーズ名,書籍名) VALUES (12850,’JP2′,’実践日本料理’,’ミニ懐石’);
INSERT INTO 書籍 (書籍コード,分類,シリーズ名,書籍名) VALUES (16022,’EU0′,’クッキング入門’,’オーブン’);
仕入担当
INSERT INTO 仕入担当 (氏名) VALUES (‘斎藤将司’);
INSERT INTO 仕入担当 (氏名) VALUES (‘佐々木義男’);
INSERT INTO 仕入担当 (氏名) VALUES (‘鈴木勝弘’);
INSERT INTO 仕入担当 (氏名) VALUES (‘佐藤正雄’);
INSERT INTO 仕入担当 (氏名) VALUES (‘内藤朋美’);
INSERT INTO 仕入担当 (氏名) VALUES (‘橋爪健司’);
INSERT INTO 仕入担当 (氏名) VALUES (‘矢島美佐子’);
INSERT INTO 仕入担当 (氏名) VALUES (‘和田実’);
売上担当
INSERT INTO 売上担当 (氏名) VALUES (‘勝村修平’);
INSERT INTO 売上担当 (氏名) VALUES (‘小島悟’);
INSERT INTO 売上担当 (氏名) VALUES (‘佐々木義男’);
INSERT INTO 売上担当 (氏名) VALUES (‘佐藤正雄’);
INSERT INTO 売上担当 (氏名) VALUES (‘内藤朋美’);
INSERT INTO 売上担当 (氏名) VALUES (‘松本豊彦’);
INSERT INTO 売上担当 (氏名) VALUES (‘和田実’);
テーブル作成とデータの挿入が「よくわかんな~い」って人は第6回を参照。
1.論理演算子
論理演算子の説明です。論理演算子には、”AND”、”OR”、”NOT”があります。結果として、”TRUE”(真)、”FALSE”(偽)を返します。それでは確認します。事前準備で作成した”給与”テーブルに対して説明していきます。
1.1 AND演算子
給与テーブルから、勤務区分が”日勤”で勤続年数が5年以下の社員を選びます。SQLは以下のとおりになります。
SELECT * FROM 給与 WHERE 勤務区分 = “日勤” AND 勤務年数 <= 5;
結果は以下のとおりになります。SQLは勤務区分が日勤でかつ勤務年数が5年以下である社員を指定していることになります。

もう少し複雑なSQLも実行で来ます。例えば、この会社のボーナス支給額のルールが、基本給の3ヶ月分プラス勤務年数×2万円だとします。このルールからボーナス支給額が100万円以上となる社員が誰なのかを探します。SQLは以下のとおりになります。
SELECT * FROM 給与 WHERE 勤務区分 = “日勤” AND ((基本給(万円)*3)+(勤務年数*2)) >= 100;
結果は以下のとおりになります。

1.2 OR演算子
OR演算子は、2つ以上の述語を組み合わせ、1つ以上の条件が真となるときに真を返します。1.1 AND演算子で実行した最初のSQLのANDをORに変えて再実行してみましょう。
SELECT * FROM 給与 WHERE 勤務区分 = “日勤” OR 勤務年数 <= 5;
結果は以下のとおりになります。
日勤か勤務年数が5年以下なら真となるので結果は以下のように変わります。

さらに、1.1 AND演算子で実行した2番目のSQLのANDをORに変えて再実行してみましょう。
SELECT * FROM 給与 WHERE 勤務区分 = “日勤” AND ((基本給(万円)*3)+(勤務年数*2)) >= 100;
結果は以下のとおりになります。
日勤か(基本給*3+勤務年数*2>=100)のどちらかが真となれば条件を満たしますので結果は以下のように変わります。

1.3 NOT演算子
NOTは否定を指します。真なら偽を、偽なら真を返します。具体的にSQLで確認します。
給与テーブルから勤務区分が”夜勤”以外の社員を選びます。SQLは以下のとおりになります。
SELECT * FROM 給与 WHERE NOT 勤務区分 = “夜勤”
結果は以下のとおりになります。”夜勤”以外の全ての社員が抽出されます。

否定の表現方法には以下のような書き方もあります。結果は同じになります。
SELECT * FROM 給与 WHERE 勤務区分 <> “夜勤”
以上で、論理演算子の説明は終了です。次回はLIKE述語に説明を行います。
コメントを残す