MySQLラーニング(2)
4174 ワード
(二)ファジイクエリ
ファジイ演算子LIKE IN BETWEEN AND IS NULL
1.LIKEは一般的にワイルドカードと一緒に使う
%は任意の複数文字の_任意の1文字エスケープ
2.between and
3.in
フィールドの値がINリストの#ケースにあるかどうかを判断します.従業員の職種番号を照会するのはIT_です.PROG、AD_VP、AD_PRESの従業員名と職種番号
#1.リスト内の値が同型または互換性のある#2.「AD_%」などのワイルドカードは使用できません.
4.IS NULLとIS NOT NULL
/*=,<>null値を判断できません*/#ケース1:ボーナスのない従業員名とボーナス率を問い合わせる
5.補足:安全は<=>に等しい
NULL値を判断することもできます.すなわち、可読性が悪い#ケース1:ボーナスのない従業員名とボーナス率を問い合わせる
#ケース2:給与12000の従業員情報の照会
#比較IS NULLはNULL値しか判断できませんが、可読性が高い<=>NULL値も普通値も判断でき、可読性は高くありません
テスト
1.給与が12000より大きい従業員の名前と給与を照会します.
2.従業員番号176の従業員の名前と部門番号と年俸を照会します.
#ここでifnull(z 1,z 2)z 1がnullでない場合はz 1を返します.z 1がnullの場合はz 2を返します
3.給与が5000~12000以外の従業員の名前と給与を選択します.
4.20または50の部門で働く従業員の名前と部門番号を選択します.
5.会社に管理者がいない従業員の名前とiob idを選択
6.会社にボーナスがある従業員の名前、給与を選択します.
7.従業員名の3番目のアルファベットがaの従業員名であることを選択
8.名前にアルファベットaとeが入っている従業員の名前を選択
9.表employees表のFIRST NAMEがelで終わる従業員情報を表示する
10.表employees部門番号80-100の名前を表示する
11.表employeesを示すmanager_idは100101110の従業員の名前、ポジションです
12,照会ボーナスがなく、給料が18000未満のsalary,last_name
13,クエリemployeesテーブル,job_idが「IT」でない、または給与が12000の従業員情報
14部門departmentsテーブルの構造を表示する
15.クエリー部門departmentsテーブルに含まれる場所番号
16、経典面接問題:
質問:SELECT*FROM employees;とSELECT*FROM employees WHERE commission_pct LIKE “%%” AND last_name LIKE “%%”;
結果は同じですか?理由#が異なりnullがなければ同じであり、andをorに変更すれば同じであり、並列セット#-------------------------------------SELECT*FROM employees WHERE commission_を取得するpct LIKE '%%’ or last_name like “%%”;
待つ
ファジイ演算子LIKE IN BETWEEN AND IS NULL
1.LIKEは一般的にワイルドカードと一緒に使う
%は任意の複数文字の_任意の1文字エスケープ
SELECT `last_name`,`salary`
FROM `employees`
WHERE `last_name` LIKE "__a%";
2.between and
SELECT *
FROM `employees`
WHERE `salary` >= 3000 AND `salary`<=5000;
#-------------
SELECT *
FROM `employees`
WHERE `salary` BETWEEN 3000 AND 5000;#1. ,2.
3.in
フィールドの値がINリストの#ケースにあるかどうかを判断します.従業員の職種番号を照会するのはIT_です.PROG、AD_VP、AD_PRESの従業員名と職種番号
SELECT `last_name`,`salary`
FROM `employees`
WHERE `job_id`='IT_PROG' OR `job_id`="AD_VP" OR `job_id`="AD_PRES";
SELECT `last_name`,`salary`
FROM `employees`
WHERE `job_id` IN("IT_PROG","AD_VP","AD_PRES");
#1.リスト内の値が同型または互換性のある#2.「AD_%」などのワイルドカードは使用できません.
4.IS NULLとIS NOT NULL
/*=,<>null値を判断できません*/#ケース1:ボーナスのない従業員名とボーナス率を問い合わせる
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NULL;
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NOT NULL;
5.補足:安全は<=>に等しい
NULL値を判断することもできます.すなわち、可読性が悪い#ケース1:ボーナスのない従業員名とボーナス率を問い合わせる
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` <=> NULL;
#ケース2:給与12000の従業員情報の照会
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `salary` <=> 12000;
#比較IS NULLはNULL値しか判断できませんが、可読性が高い<=>NULL値も普通値も判断でき、可読性は高くありません
テスト
1.給与が12000より大きい従業員の名前と給与を照会します.
SELECT `last_name`,`salary`
FROM`employees`
WHERE `salary`>12000;
2.従業員番号176の従業員の名前と部門番号と年俸を照会します.
SELECT
`last_name`,
`department_id`,
`salary`*12*(IFNULL(`commission_pct`,0)) AS
FROM
`employees`;
#ここでifnull(z 1,z 2)z 1がnullでない場合はz 1を返します.z 1がnullの場合はz 2を返します
3.給与が5000~12000以外の従業員の名前と給与を選択します.
SELECT `last_name`,`salary`
FROM `employees`
WHERE NOT `salary` BETWEEN 5000 AND 12000;
4.20または50の部門で働く従業員の名前と部門番号を選択します.
SELECT `last_name`,`department_id`
FROM `employees`
WHERE `department_id` IN(20,50);
5.会社に管理者がいない従業員の名前とiob idを選択
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IS NULL;
6.会社にボーナスがある従業員の名前、給与を選択します.
SELECT `last_name`,`salary`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NULL;
7.従業員名の3番目のアルファベットがaの従業員名であることを選択
SELECT `last_name`
FROM `employees`
WHERE `last_name` LIKE "__a%";
8.名前にアルファベットaとeが入っている従業員の名前を選択
SELECT `last_name`
FROM `employees`
WHERE `last_name` LIKE "%a%" OR `last_name` LIKE "%e%";
9.表employees表のFIRST NAMEがelで終わる従業員情報を表示する
SELECT *
FROM `employees`
WHERE `first_name` LIKE "%el";
10.表employees部門番号80-100の名前を表示する
SELECT `last_name`
FROM `employees`
WHERE `department_id` BETWEEN 80 AND 100;
11.表employeesを示すmanager_idは100101110の従業員の名前、ポジションです
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IN(100,101,110);
12,照会ボーナスがなく、給料が18000未満のsalary,last_name
SELECT `salary`,`last_name`
FROM `employees`
WHERE `commission_pct` IS NULL AND `salary`<18000;
13,クエリemployeesテーブル,job_idが「IT」でない、または給与が12000の従業員情報
SELECT *
FROM `employees`
WHERE `job_id`<>"IT" OR `salary`=12000;
14部門departmentsテーブルの構造を表示する
DESC departments;
15.クエリー部門departmentsテーブルに含まれる場所番号
SELECT DISTINCT location_id
FROM departments;
16、経典面接問題:
質問:SELECT*FROM employees;とSELECT*FROM employees WHERE commission_pct LIKE “%%” AND last_name LIKE “%%”;
結果は同じですか?理由#が異なりnullがなければ同じであり、andをorに変更すれば同じであり、並列セット#-------------------------------------SELECT*FROM employees WHERE commission_を取得するpct LIKE '%%’ or last_name like “%%”;
待つ