注意:
SQL语法中 - - 为单行注释标记
MySQL语法中 # 为单行注释标记
1.条件查询以及筛选条件
--格式
select
查询列表
from
表名
where
筛选条件;
--筛选条件分类:
1.条件表达式
> < =(等于) !=(不等于) <>(不等于) >= <=
其中,=运算符不可以用于判断null
2.逻辑表达式
作用:一般是用来连接条件表达式
&& || ! and or not
3.模糊表达式
like 注意:like常与通配符一起使用
between and
in
is null
4.通配符:%表示任意数量个任意字符 ,_表示单个任意字符
转义字符:\ 为mysql默认的转移字符,ESCAPE 用于指定转义字符
练习1
①案例1 查询工资大于9000的员工信息
SELECT
*
FROM
employees
WHERE
salary > 9000;
②案例2 查询部门编号不为90的员工姓名及部门编号
SELECT
CONCAT(last_name,'_',first_name), --将姓和名用下划线 ‘_’连接
department_id
FROM
employees
WHERE
department_id != 90;
③案例3 查询工资在10000到20000之间的员工名、工资、以及奖金
SELECT
CONCAT(last_name,'_',first_name),
salary,
IFNULL(commission_pct,0) --IFNULL(expr1,expr2)含义为如果expr1为null则输出expr2
FROM
employees
WHERE
salary >= 10000 && salary <= 20000;
④案例4 查询部门编号不在90到110之间,或工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
(department_id < 90 || department_id > 110)
OR
(salary > 15000);
2.模糊查询
①like
也可以使用 not like
案例1 查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
案例2 查询员工名字中第三个字符为n,第五个字符为l的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
案例3 查询员工名字中第2个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
--last_name like '_\_%'; --\ 为mysql默认的转移字符
last_name LIKE '_$_%' ESCAPE '$';--ESCAPE 用于指定转义字符
②between and
注意:
①闭区间
②两个临界值顺序不能颠倒
③两个临界值类型要相同
案例1 查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
③in
注意:
①不支持通配符
②in
列表中的选项应该是同一类型或者可以隐式转换
案例1 查询工作编号是AC_MGR、AD_VP、HR_REP中一个的员工名字和工作编号、薪水
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
job_id IN ('AC_MGR','AD_VP','HR_REP');--需要加'',否则会被认为是列名(字段)
④is null
或 is not null
注意:
①=
或<>
不能用于判断null值
②可以使用安全等于符号<=>
案例1 查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
案例2 查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
⑤安全等于符号 <=>
与is null
的比较
is null
: 只可以用于比较null,可读性较高,建议使用
<=>
: 既可以比较null也可以比较数值
案例1 查询没有奖金的员工
SELECT
*
FROM
employees
WHERE
commission_pct <=> NULL;
案例2 查询工资为12000的员工
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
案例3 查询工号为176的员工的姓名和部门号以及年薪
SELECT
last_name,
department_id,
salary*12*(1+IFNULL(commission_pct,0))
FROM
employees
WHERE
employee_id = 176;