条件查询 where 子句

条件查询

/*
在基础查询上
	  select 
		查询列表 --->3*最后进行查询
	   from
		表名称   -->1*首先检查库中知否存在此表
	   where
		筛选条件 ;-->2*检查哪一行是否满足筛选要求
分类:
	一.按条件表达式进行筛选  
	条件运算符 : > 、 < 、 = 、!= 、<>(不等) 、>=、<= 
	逻辑运算符  && 、 || 、 ! 、  SQL建议使用 and 、 or 、 not
	模糊查询  like  、 between and  、in   、 is null 
*/



条件运算符查询

#按照条件表达式筛选   条件运算符 : > 、 < 、 = 、!= 、<>(不等) 、>=、<= 
#1-查询工资>12000的员工信息
SELECT 
  * 
FROM
  employees 
WHERE salary > 12000 ;

#2- 查询部门编号不等于90号的员工名和部门编号 (看 的 后面的是谁 查询目标就是谁)
SELECT 
  last_name,
  department_id 
FROM
  employees 
WHERE department_id <> 90 ;

# <>  SQL中的不等于(推荐)  java中的!= 也可以

逻辑表达式查询

#二*按照逻辑表达式筛选 逻辑运算符  && 、 || 、 ! 、   and 、 or 、 not
#1-查询工资在10000--20000之间的员工名,工资,以及奖金
SELECT 
  last_name,
  salary,
  commission_pct 
FROM
  employees 
WHERE salary >= 10000 
  AND salary <= 20000 ;

#2-查询部门编号不是在90-110之间,或者工资高于15000的员工信息
SELECT 
  * 
FROM
  employees 
WHERE department_id < 90
OR department_id > 110 
OR salary > 15000 ;
#也可以 NOT(department_id >= 90 AND department_id <=110) OR salary >15000;

模糊查询

#2-模糊查询  like  、 between and  、in   、 is null  /is not null

#一-查询员工名中包含字符 a 的员工信息
#**like**通常和通配符搭配  ((通配符)% 任意多个字符,包含0 个 /		(通配符) _ 任意单个字符)
SELECT 
  * 
FROM
  employees 
WHERE last_name LIKE '%a%' ;
#(%)百分号代表通配符

**#二-查询员工名中第三个字符为 n ,第五个字符为 l 的员工名和工资**
SELECT 
  last_name,
  salary 
FROM
  employees 
WHERE last_name LIKE '__n_l%' ;

**#三-查询员工命中第二个字符为_的员工名**
SELECT 
  last_name 
FROM
  employees 
WHERE last_name LIKE '_s_%' ESCAPE 's' ;
/* 包含特殊符号,使用转义  LIKE '_\_%    或者 LIKE '_s_%'ESCAPE 's'   (' s' 任意指定(字母,符号等))     ESCAPE  关键字,说明前面  s 是转义字符  */

**#四-between  and**
 #案例  查询员工编号100-120之间的员工信息
 SELECT * FROM employees WHERE employee_id >= 100 AND employee_id<= 120;
  /*
 1*使用 between  and 可以提升语言简洁度
 2*包含临界值
 3*两个临界值顺序不能调换
 4*上下两种表述,完全等价
 */
 SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
 
# 五- in  判断某字段的值是否属于 in 列表中的 某一项
# #案例: 查询员工的工种编号是 IT_PROG 、AD_VP、 AD_PRES 中的一个 的 员工名和工种编号
SELECT 
  last_name,
  job_id 
FROM
  employees 
WHERE job_id = 'IT_PROG' 
  OR job_id = 'AD_VP' 
  OR job_id = 'AD_PRES' ;
/*当查询量少,这种写法还可行,多了就比较麻烦. 用 in简化
特点:
1-使用in  比使用多个 or 提高语句简洁渡
2-in 列表中值类型必须一致或者兼容 123 / '123'
3-   in 就像上面案例中的 = 等号 (=比较具体)( job_id = 'AD_PRES') ,因此不能用like和通配符代替 AD_%
*/
SELECT 
  last_name,
  job_id 
FROM
  employees 
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ;

#
# 六 is null  is not null
/*
 = 或者 <> 不能用于判断 null值 ,使用is null 和is not null
  同样 不能使用is代替等号  select..... where salary is 12000
*/
#案例 :查询没有奖金的员工名和奖金率
# select  last_name,commission_pct from employees where  commission_pct = null ;
# 由于等号不能判断null值,因此使用 	is  null
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 ;

# 七  安全等于  <=>  
#既可以判断数字,也可以判断null值 可读性查,, 较少使用 
#案例 :查询没有奖金的员工名和奖金率
SELECT 
  last_name,
  commission_pct 
FROM
  employees 
WHERE commission_pct <=> NULL ;

#select..... where salary <=> 12000
# 

#练习 1- 查询员工号为90 的员工姓名和部门号和年薪
SELECT 
  last_name,
  department_id,
  salary * 12 * (1+ commission_pct) AS 年薪 
FROM
  employees ;
#由于有奖金率为null的出现,则对其进行处理 # ifnull()如果是null,显示为0
SELECT 
  last_name,
  department_id,
  salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪 
FROM
  employees 
WHERE department_id = 90 ;

#练习2-查询没有奖金,且工资小于18000的 salary 和last_name
SELECT 
  salary,
  last_name 
FROM
  employees 
WHERE commission_pct IS NULL 
  AND salary < 18000 ;

#练习3-查询employees表中 job_id不为 'IT'或者 工资为1200的员工信息
SELECT 
  * 
FROM
  employees 
WHERE  job_id <>'IT'  #WHERE  NOT job_id = 'IT' 
  OR salary = 12000 ;

#练习4- 查看部门departments表结构
DESC departments;
#练习 5- 查询部门departments表中涉及到了哪些位置编号
SELECT DISTINCT location_id FROM departments;
#因为有重复项,因此使用  DISTINCT 关键字去重
#
#练习6-select +from employees 和  select *from employees where commission_ pct like '%%' and last_ name like '%%’结果是否一样?
/*
不一样, 假如判断的字段中存在null值,判断不一样,没有null,判断一样
将上面 表中所有字段都加上 and 改为 or 结果一样
*/



 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值