查询

  1. # 进阶2:条件查询
  2. /*
  3. 语法:
  4. SELECT
  5. 查询列表
  6. FROM
  7. 表明
  8. WHERE
  9. 筛选条件;
  10. 分类:
  11. 一、按条件表达式筛选表
  12. 条件运算符:> < = != <> >= <=
  13. 解释:这里的 = 不是赋值,是比较是否相等,<> 和 != 用意一样。
  14. 二、按逻辑表达式筛选
  15. 逻辑运算符:
  16. && || !
  17. and or not
  18. 三、模糊查询
  19. like
  20. between and
  21. in
  22. is null | is not null
  23. */
  24. # 一、按条件表达式筛选表
  25. # 案例
  26. # 1 工资>12000的员工信息
  27. SELECT
  28. *
  29. FROM
  30. `employees`
  31. WHERE `salary` > 12000 ;
  32. # 2 查询部门编号不等于90号的员工名和部门编号
  33. SELECT
  34. `department_id`,
  35. `first_name`
  36. FROM
  37. `employees`
  38. WHERE `department_id` <> 100 ;
  39. #二、按逻辑表达式筛选
  40. # 1 查询工资在10000到20000之间的的员工名,工资以及奖金;
  41. SELECT
  42. `last_name` AS '名',
  43. `salary` AS '工资',
  44. IFNULL(`commission_pct`, 0) AS '奖金'
  45. FROM
  46. `employees`
  47. WHERE salary >= 10000
  48. AND salary <= 20000 ;
  49. # 2 查询部门编号不是90到110之间,或者工资高于15000的员工信息。
  50. SELECT
  51. *
  52. FROM
  53. `employees`
  54. WHERE NOT (
  55. `department_id` >= 90
  56. AND `department_id` <= 110
  57. )
  58. OR `salary` > 15000 ;
  59. /*WHERE `department_id` < 90
  60. or `department_id` > 110
  61. or `salary` > 15000 ;
  62. */
  63. #三、 模糊查询
  64. /*
  65. like
  66. 特点:
  67. ①一般和通配符搭配使用
  68. 通配符:% 任意多个字符,包含0个字符,_ 任意单个字符,
  69. */
  70. #1.like
  71. #案例
  72. # 1.1:查询员工名中包含字符a的员工信息
  73. SELECT
  74. *
  75. FROM
  76. `employees`
  77. WHERE
  78. `last_name` LIKE '%a%';
  79. # 1.2:查询员工名中第二个字符为c,第六个字符为a的员工名和工资。
  80. SELECT
  81. last_name,
  82. salary
  83. FROM
  84. `employees`
  85. WHERE last_name LIKE '_c___n' ;
  86. # 1.3:查出员工名中第二个字符为_的员工名,使用转义符号 \ 。
  87. SELECT
  88. *
  89. FROM
  90. `employees`
  91. WHERE last_name LIKE '_\_%';
  92. # 指定一个转义符号: last_name LIKE '_$_%' ESCAPE '$' # 指定 $ 为转义字符。
  93. #2.between and
  94. /*
  95. ①使用between and 可以提高代码的简洁度。
  96. ②包含临界值。
  97. ③两分临界值不要调换。
  98. */
  99. #案例
  100. # 1.1:查询员工编号100到120之间的员工信息
  101. SELECT
  102. *
  103. FROM
  104. `employees`
  105. WHERE `employee_id` >= 100
  106. AND `employee_id` <= 120 ;
  107. # 上下两块代码意义一样 — — — — — — — — — — — —
  108. SELECT * FROM `employees` WHERE `employee_id` BETWEEN 100 AND 120;
  109. #3.in
  110. /*
  111. 含义:判断某字段的值是否属于in列表中的某一项
  112. 特点:
  113. ①使用in相对某些情况代码相对简洁。
  114. ②in列表的值类型必须统一。
  115. ③不支持使用模糊查询格式的值。
  116. */
  117. #案例
  118. #1.1 查询员工的工种编号是 IT_PROG 、AD_VD 、AD_PRES 中的一个员工名和工种编号。
  119. SELECT
  120. last_name,
  121. job_id
  122. FROM
  123. `employees`
  124. WHERE job_id = 'IT_PROT'
  125. OR job_id = 'AD_VP'
  126. OR job_id = 'AD_PRES' ;
  127. # 上下两块代码意义一样 — — — — — — — — — — — —
  128. SELECT
  129. last_name,
  130. job_id
  131. FROM
  132. `employees`
  133. WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES')
  134. #4. is null
  135. #案例
  136. #1.1:查询没有奖金的员工名和奖金率, mysql语句 xxx = null 是不能判断 xxx 是否等于null的。
  137. SELECT
  138. last_name,
  139. IFNULL(commission_pct, '是的是null')
  140. FROM
  141. `employees`
  142. WHERE commission_pct IS NULL ;
  143. #1.2:查询有奖金的员工名和奖金率。
  144. SELECT
  145. last_name,
  146. commission_pct
  147. FROM
  148. `employees`
  149. WHERE commission_pct IS NOT NULL ;
  150. # 安全等于:<=>
  151. #案例
  152. #1.1:查询没有奖金的员工名和奖金率,安全等于可以直接用来判断目标等不等于null。
  153. SELECT
  154. last_name,
  155. commission_pct
  156. FROM
  157. `employees`
  158. WHERE (`commission_pct` <=> NULL) ;
  159. #1.2: 查询员工工资为12000的员工信息。
  160. SELECT
  161. last_name,
  162. salary
  163. FROM
  164. `employees`
  165. WHERE salary <=> 12000 ;
  166. # is null pk <=>
  167. IS NULL :仅仅可以判断NULL值,可读性相对好点。
  168. <=> :既可以判断NULL值,又可以判断普通的数值,但是可读性相对低。
  169. # 条件查询2
  170. # 查询员工号为176的员工的姓名和部门号和年薪
  171. SELECT
  172. last_name,
  173. department_id,
  174. salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪
  175. FROM
  176. `employees` ;

小作业

# 作业
# 1. 查询没有奖金,且工资小于18000的salary,last_name

SELECT * FROM `employees` WHERE `salary`<18000 AND `commission_pct` IS NULL;

# 2. 查询部门,job_id不为 ‘IT’ 或者工资为12000的员工信息

SELECT * FROM `employees` WHERE job_id != 'IT' OR salary = 12000;

# 3. 查看部门`departments`表的结构
DESC `departments`;

# 4. 查询部门`departments`表中涉及到了那些位置编号
SELECT location_id FROM `departments`;

# 5. 
#试问:
/*
SELECT 
  * 
FROM
  `employees` ;

和 
SELECT 
  * 
FROM
  `employees` 
WHERE `commission_pct` LIKE '%%' AND last_name like '%%';
结果是否一样?并说明原因。
*/
SELECT 
  * 
FROM
  `employees` 
WHERE `commission_pct` LIKE '%%' 
  AND last_name LIKE '%%' ;
# 答案:不一样,因为判断的值有的可能为null,如果全部没有为null的那么就是一样的。