MySQLラーニング(2)

4174 ワード

(二)ファジイクエリ
ファジイ演算子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 “%%”;
待つ