基本语法:select 查询列表 from 表名
查询列表可以是表中字段、常量值、表达式、函数;查询的结果是一个虚拟的表格。
注意:
①sql语言大小写不敏感
②关键字不能分行或略写
③一般书写方式为换行缩进
一、基础查询
1.经典查询(查询表中的字段)
①查询单个字段
select 字段1 from 表1;
②查询多个字段
select 字段1,字段2, . . .字段n from表1;
③查询所有字段(用“”表示所有字段或者用枚举所有的字段)
Select * from 表1;
Select 字段1,字段2,字段3,...,字段last from 表1;
2.查询常量值
select 520;
select ‘chenzui’;
3.查询表达式
select 100/20;
4.查询函数
select version();
5.起别名
①方式1用as
Select 100/20 as “结果”;
②方式2 用” ”空格
Select 100/20 结果;
6.去重distinct
SELECT DISTINCT department_id FROM employees;
7.mysql中+的功能(运算符)
①两个都是数值型,做加法运算。Select 200+100;返回300。
②一个是字符型一个是数值型,将字符型转换为数值型,若能转换成功,则继续运算,转换失败,将字符型转换为0,继续运算。
Select “120”+120;返回240;select “120aaa”+120;返回240;select “aaa120”+120;返回120。
③一方是null,结果返回null。select null+100;返回null。
二、条件查询
语法:select 查询列表 from 表名 where 筛序条件;
1.按条件表达式筛选
简单条件运算符:>、<、=、 !=、<>、>=、<=
案例1 查询工资大于1000的员工信息
Select * from employees where salary>1000;
案例2 查询部门编号等于80,的员工名字和部门id
Select last_name,department_id from employees where department_id = 80;
2.逻辑表达式筛选
逻辑运算符
作用:用于连接条件表达式 && || ! and or not
and 或 && 两个条件都为true,结果为true,否者返回false
or 或 || 只有一个条件为true,结果为true,否者为false
not 或 ! 连接条件本身为true,结果为false,否者为true
案例 查询工资在10000-15000的员工名字和工资
Select last_name , salary from employees where salary>10000 and salary<15000;
3.模糊查询
like、between and 、in、is null
①like 一般和通配符搭配使用
通配符:‘%’任意多个,包括0个,’’任意单个。
案例1 查询名字中包含”c”的员工信息
select * from employees where last_name like “%c%”;
案例2 查询名字以a开头第4个字母为z的员工信息
select * from employees where last_name like “a__z%”;
案例3 查询第二个字符为””的员工名字
select last_name from employees where laset_name like “$%”;
②between and 可以使sql语句更简洁,包含临界值,两个临界值不能调换顺序
案例1 查询员工编号在150-200之间的员工信息
select * from employees where employee_id between 150 and 120;
select * from employees where employee_id >=150 and employee_id <=120;
③in 判断某段的值是否属于in列表中的某一项,提高了代码的简洁度,in列表的值必须一致或者兼容,in列表不支持通配符。
案例1 获取工种编号为aaa、bbb、ccc中一个的员工信息
select * from employees where job_id in(“aaa”,’bbb’,’’ccc);
select * from employees where job_id=”aaa” or job_id = “bbb” or job_id = “ccc”;
④=或者<>不能判断null值,is null和is not null 可以用于判断null值
案例1 查询没有奖金的员工信息
select * from employees where commission_pct is null;
⑤<=>安全等于
查询工资为10000的员工名字
Select last_name from employees where salary <=>10000;
⑥is null 和 <=>
is null:只可以判断null值,可读性较高
<=>:既可以判断null值,又可以判断普通数值,可读性较差。
三、常见函数
1、单行函数
①字符函数:length(获取字节个数)、concat(拼接字符串)、upper(转化成大写)、lower(转换为小写)、substring、instr(返回字符串第一次出现的索引,不存在返回0)、trim(去除前后空格)、lpad(用指定字符实现左填充)、rpad(用指定的字符实现右填充)、replace(替换)
②数学函数
Round():四舍五入
Ceil():向上取整
Floor():向下取整
Truncate():截断
Mod():取余,mod(a,b) : a-a/bb
③日期函数
NOW():返回当前日期加时间
Curdate():返回当前日期
Curtime():返回当前时间
Str_to_date(字符类型,日期类型): 将字符类型转换为日期类型
Date_format(日期类型,字符类型): 将日期类型转换为字符类型;
④流程控制函数
if函数:其效果类似于if else
Case函数用法一[类似于switch用法]
语法:
Case 要判断的字段或者表达式
When 常量1 then 要显示的值1或语句1;
When 常量2 then 要显示的值2或语句2;
When 常量3 then 要显示的值3或语句3;
…
Else 要显示的值n或者语句n;
End
Case函数用法二[类似于多重if]
语法:
Case
When 条件1 then 要显示的值1或语句1
When 条件2 then 要显示的值2或语句2
…
Else 要显示的值n或语句n
End
⑤其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
2、分组函数(聚合函数、统计函数、组函数)
分类:
求和(sum)、avg(平均值)、max(最大值)、min(最小值)、count(计算个数)
特点:
①sum和avg一般处理数值型,max、min、count又可以处理任何类型
②分组函数都忽略null值
③可以和distinct搭配实现去重运算
④count()用于统计数量
⑤和分组函数一同查询的字段要求是group by后的字段
案例1
select sum(salary) avg(salary) min(salary) max(salary) count(salary) from employees;
案例2 函数的适用性
SELECT SUM(last_name) ,AVG(last_name) FROM employees; 返回值是0,0
案例3 忽略null值
SELECT
SUM(commission_pct) ,AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107 FROM employees;
案例4 和distinct结合使用 会自动去重
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
案例5 count()的使用
SELECT COUNT(salary) FROM employees;
SELECT COUNT() FROM employees;
SELECT COUNT(1) FROM employees;
案例6 和分组函数一同查询的字段有限制
SELECT AVG(salary),employee_id FROM employees;
四、排序查询
语法:select 查询列表 from 表名 [where 筛选条件] order by 排序的字段或者表达式
1.排序函数的用法
①asc表示升序,可以省略,desc是降序
②order by可以支持单个字段、别名、表达式、函数、多个字段
③order by 子句在查询语句最后面,除了limit子句
2.案例
select * from employees order by salary desc;
select * from employees where department_id >= 100 order by department_id;
SELECT last_name , salary12(1+IFNULL(commission_pct,0)) FROM employees ORDER BY salary12(1+IFNULL(commission_pct,0));
SELECT last_name , salary12*(1+IFNULL(commission_pct,0))AS "年薪" FROM employees ORDER BY '年薪';
SELECT department_id,AVG(salary) FROM employees GROUP BY department_id ORDER BY AVG(salary);
SELECT last_name,salary FROM employees ORDER BY last_name DESC ,salary ASC;
五、group by
语法:select 字段1,字段2,… from 表名 [where 筛选条件] group by 字段1,字段2,..[having 筛选条件 limit 分页条件];
查询列表必须来自分组的字段,保证逻辑的一致性。
使用方式:
①group by 和聚合函数配合使用得时候,分组后计算
Select avg(salary),last_name from employees group by department_id;
②与having配合使用得时候,分组后过滤;
Select department_id,min(salary) from employees group by department_id having salary>3000;
③group by中聚合函数同时和非聚合函数一起使用时,非聚合函数取第一个匹配到时的字段内容。