五、DQL语言


文章目录

  • 五、DQL语言
  • 5.6.条件查询
  • 5.6.1.按条件表达式
  • 5.6.2.按逻辑表达式
  • 5.6.3.按模糊查询
  • 5.6.3.1.关键字like的使用
  • 5.6.3.2.关键字 `between and`
  • 5.6.3.3.关键字 `in`
  • 5.6.3.4.关键字is null
  • 5.6.3.4.1安全等于<=>


5.6.条件查询

select 查询列表

from

表名

where

筛选条件;

注:类似java的if语句




执行顺序

from找表

筛选条件

查询列表



  • 分类
  • 按条件表达式
  • 条件运算符
  • java中的不等于 != 也支持
<    >  
<>(又大又小就是不等于),在MySQL中推荐使用

<=    >=
  • 按逻辑表达式
  • 逻辑运算符
  • && || !
  • and or not 推荐使用
  • 模糊查询
  • like 像
  • between and
  • in
  • is null

5.6.1.按条件表达式

  • 条件表达式
  • 找出employees中工资大于12000的员工信息
SELECT 
*
FROM
employees 
WHERE salary >12000;
  • 部门编号不等于90的员工
SELECT 
    last_name,
    department_id
  FROM
    employees 
  WHERE department_id <> 90

5.6.2.按逻辑表达式

常用于多个条件表达式的连接

  • 找出工资在10000-20000的员工信息
SELECT
	*
FROM
	employees
WHERE
	salary >=10000 AND salary <=20000;
  • 部门编号不在90—100之间,或者工资大于15000的员工信息
SELECT
	*
FROM 
	employees
WHERE
	department_id<90 OR department_id>100 OR salary;

5.6.3.按模糊查询

模糊查询经常与通配符联合使用

5.6.3.1.关键字like的使用

  • 查找出名中含有字母a的员工信息
  • 显然使用条件表达式或者逻辑表达式无法操作,二者是精确查询,精确到具体
  • 使用模糊查询
  • 通配符百分号
  • 代表多个任意字符
  • 包括0个字符
  • %a%
  • 字母a的前后还有任意字符
  • 通配符下滑线
  • 单个字符的通配符
select 
	*
from
	employees
where
	last_name like '%a%';
#在MySQL中,字符必须使用单引号括起来
#MySQL不区分大小写,所以结果中,last_name
#有大写字母A的也筛选出来了
#注意`a`使用通配符,因为人名不可以就一个字母

单个字符的通配符下划线

问题:找出名第三个字符是a员工和及工资

select last_name,salary
from employees
where last_name like '__a%';

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_mysql

注意:

  • 找出第二个字符是下划线的名,怎么找?
  • 使用转义字符
  • 与java转义字符一致用反斜杠
‘\_’
  • 自己定义转义字符(推荐使用)+关键字escape
where last_name like '_$_%' escape '$'
#使用escape将美元符号定义为转义字符

5.6.3.2.关键字 between and

问题:员工编号在50—100之间的员工信息?

between A and B

  • A、B的位置颠倒结果不同,意义不同
  • A、B数据类型要一致
  • A、B数据类型不一致,但是可以相互转换

例如: between 10 and 20 等价于>=10且<=20,若颠倒顺序between 20 and 10 等价于>=20 且<=10,有满足这样的吗?没有,显然违背逻辑,但是在MySQL中不会报错,只不过是结果空的

  • 思考: A=B 情况下,怎么样?
SELECT *
FROM employees
WHERE employee_id BETWEEN 50 AND 100;

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_java_02

注意:

  • 员工ID可以=100,也就说between and是包含边界的

5.6.3.3.关键字 in

  • in (A,B,C) 满足ABC三个条件中的其中一个的,给我找出来
  • 判断某字段的值是否属于in()列表中的某一个
  • 常用于代替or解决的问题
  • in列表的类型要一致,不一致那就要相互兼容(可以相互转换)

in查找的是符合在列表的,符合在列表,怎么样?自然也有不在列表的,怎么写?-----嘛!

not in

select last_name,job_id from employees where job_id not in ('AD_VP','IT_VP')

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_mysql_03

注意:在输入命令时,若报错,请仔细检查,肯定有那个字符细节上处理不到位

想输入着重号,很难输入,反正就是不顺利,很可能此时是把(单引号)当做着重号了

  • in不支持通配符,为什么?

in最像什么?java中的switch case 语句是与in列表的东西进行匹配,类似与等于,就像switch case一样

  • 匹配上一个case,做出相应的操作,要求输入的类型和case的类型和大小一致
  • 类型不同,可以怎么样?可以是字符、字符串转换为int型后,匹配上某一个case,便执行操作
  • 不要忘记了,在一定范围内,遵循Unicode编码表,是可以将字符与int型进行等价的隐式转换(自动转换)

问题:找出工种编号是IT_PROT 、 AD_VP 、AD_PRES中的一个的,员工名及其工种编号

SELECT last_name,job_id
FROM employees
WHERE job_id IN ('AD_VD','PRES_VD','AD_VP');

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_MySQL_04

思考:为什么in里面的参数要用好、单引号?

并不是为了为了更好看,那些参数是什么?是字符串,在MySQL里,字符串就是用单引号或者双引号表示,

如果参数是整型,则不需要

5.6.3.4.关键字is null

  • 注意:
  • isnull是搭配使用的,is not null也是,不要拿去和别的对象使用
  • 不要出现is 12000来找出工资12000的员工,这是错误使用
  • 要找工资12000的员工,直接用等于号,条件表达式就可以了

问题:给我把公司里没有奖金的员工找出来

select last_name,commission_pct
from employees
where commission_pct is null

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_MySQL_05

思考:逆向思维,给我找出有奖金的员工,怎么做?

  • 逆向,在编程里,逆向,好办呀,
select last_name,commission_pct
from employees
where commission_pct is not null;

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_MySQL_06

5.6.3.4.1安全等于<=>

上面的问题, is null 还可以用<=>安全等于来代替

对比:

符号

用法

范围

is null

判断有

固定使用

is not null

判断没有

固定使用

<=>

可以代替is null

除了用于null,还可以用于普通的等于,机动灵活,比如工资12000

注意

否定时,not的位置

SELECT last_name,commission_pct
FROM employees
WHERE  NOT commission_pct <=> NULL;

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_java_07

练习:查出工号176的员工年薪和所属部门编号

SELECT last_name,department_id,employee_id,
		salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
		FROM employees
		WHERE employee_id=176;

mysql查一次数据库和查2000次数据库花的时间 mysql查询1000到2000的数据_数据库_08