语法
select 查询列表 from 表名;
特点:
1 查询列表可以是:表中字段,常量值,表达式,函数
2 查询结果是一个虚拟的表格
模拟查询
现有以下四张表:departments,employees,jobs,locations:
查询表中字段
SELECT last_name FROM employees;#查询单个字段
SELECT last_name,salary,email FROM employees;#查询多个字段
SELECT * FROMemployees;查询表中所有字段
为表或列起别名
好处:
1.便于理解
2.查询的字段中有重名的情况,使用别名可以方面区分
SELECT 100%98 AS 结果;// AS 可省略
SELECT last_name 姓,first_name 名 FROM employees;
SELECT e.last_name FROM employees u;
去重:distinct关键字
查询的结果中可能有重复的字段,通过distinct关键字过滤在要查询的字段前面加上distinct关键字
SELECT DISTINCT department_id FROM employees;
mysql中’+'号: 仅作为运算符使用,不能用于连接字符串
使用场景:
1.两个操作数都是数值型,则做加法运算: select 100+30
2.其中一方为字符型,试图将字符型数值转换成数值型:
①转换成功,则继续做加法运算:select ‘123’+100; //223
②转换失败,则将字符型数值转换成0:seleclt ‘henry’+100; //100
3.一方为null,则结果肯定为null:select null+10;//null
字符串连接符:concat
//显示表employees中姓名和奖金,列明用逗号隔开;注:奖金率有可能为空,需做判断
SELECT CONCAT(`first_name`,`last_name`,',',IFNULL(`commission_pct`,0)) FROM employees;
条件查询:
#语法: 执行顺序
SELECT 查询列表 ③
FROM 表名 ①
WHERE 筛选条件; ②
#分类:
一、按条件表达式查询:
条件运算符:> < = !=(或 <> ) >= <=
#查询工资大于120000的员工信息
SELECT * FROM employees WHERE salary>12000
#查询部门编号不等于90的员工名和部门编号
SELECT last_name,department_id FROM employees WHERE department_id<>90
二、按逻辑表达式筛选:
逻辑运算符:&&(and),||(or), !(not)
#查询工资在10000到20000之间的员工名、工资。及奖金
SELECT last_name,salary,commission_pct FROM employees WHERE salary > 10000 AND salary<20000;
三、模糊查询
like :和通配符搭配使用
通配符: %:任意多个字符,包含0个字符 _:任意单个字符
#查询员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name like '%a%';
between and
#查询工资在10000到20000之间的员工名、工资。及奖金
SELECT last_name,salary,commission_pct FROM employees WHERE salary BETWEEN 10000 AND 20000;
in
SELECT last_name,job_id FROM employees WHERE job_id in('IT_PROT','AD_VP');
is null/ is not null,条件运算符(等与,不等于)不能用于判断null值
#查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL;
<=> 安全等于:
is null pk <=>
is null:仅仅可以判断null值,可读性较高
<=>:既可以判断null值,有可以判断普通树脂,可读性较低
补充函数:ifnull函数, ifnull(commission,0);//为null则返回0
补充函数:isnull函数:为null返回1,否则返回0
排序查询
语法:
Select 查询列表 ③
from 表 ①
【 where 筛选条件】②
order by 排序列表【asc | desc】④
特点:
1.asc:代表升序 ,desc:代表降序;如果不写,默认是升序
2.order by 子句中支持单个字段,多个自字段,表达式,函数,别名
3.order by子句一般放到查询语句的最后面,limit子句除外
案例:
#按年薪高低显示员工得信息 和年薪【按本命排序】
SELECT *,salary*(1+IFNULL(commission_pct,0)) AS nx FROM employees ORDER BY nx ASC;
#查询员工信息,先按照工资升序,再按照员工编号降序【按多个字段排序】
SELECT * FROM employees ORDER BY salary ASC,employee_id DESC;