注意点mysql
select 指定表.字段 from 表1,表2正则表达式
四则运算包括加减乘除sql
select 字段1 四则运行符号 字段2 from 表名称数据库
语法:select 函数(字段1) from 表名称函数
统计函数code
比较运算符 | 介绍 |
---|---|
<,<=,>,>=,=,!= | 小于,小于等于,大于,大于等于,等于,不等于 |
in(set) | 成员运算,看值有没有再列表里面 |
like | 模糊查找:%表明零个或多个字符,_表明一个字符 |
is null | 判断是否为空 |
between A and B | 显示某个区间:A-B 包括A和B |
逻辑运算符 | 介绍 |
and | 且,多个条件同时知足 |
or | 或者,知足多个条件其中一条 |
not | 不成立 |
binaryregexp
区分大小写对象
语法:select 段落 from 代表 where binary 字段....................................排序
分组it
语法
select....from 表名
where .......
group by 字段名称 #若是这里有多个字段,A,B,用,链接表示具备相同字段A以及相同字段B进行分组
having 判断内容
注意:
排序
语法:默认为升序
ord by 字段名称
固定升序或者降序
多个条件排序主次关系
ord by 主字段,次字段
限制显示记录
对于单页表操做
limit start count
对于多页操做
分页原理:先查询总数据条数 设为a
肯定每页数量b
总页数为c = a / b 若是除不尽则须要加1 例如 10 / 3 正确页数为4
查询语句的起始位置为s = 当前页数d 减去1 乘以每页数量
即 s = (d - 1) * b
limit s b
语法 :where 字段名称 regexp '正则表达式'
注意:正则表达式不包括特殊字符如\w
语法:select *from 表1,表2
他会把多个表每行与另外个表通通匹配上,其中会有一些脏数据,咱们能够用里面值的关系进行链接
其本质就是笛卡尔积查询
区别是把,变成 join
且不能用where,要先用on根据里面值的关系拼接好了再用 where
左表中记录的不管是否有匹配关系都所有显示,右表中仅显示匹配成功的记录
语法:select *from 表1 left join,表2
右表中记录的不管是否有匹配关系都所有显示,左表中仅显示匹配成功的记录
语法:select *from 表1 right join 表2
不管是否匹配成功,两边表中的记录都要所有显示
select *from 表1 full join 表2
注意:mysql 不支持
咱们要引入union
union 只能用于字段数量相同的两个表 会自动去除重复的记录
union all 则保留全部记录
select from dept left join emp on dept.id=emp.dept_id
union
select from dept right join emp on dept.id=emp.dept_id;
能够完成全外链接
在三表以及三表以上查询的时候,表1 join 表2 join 表三,其意思是表1与表2链接后的表再与表3进行链接
若是三表链接时候没有用join而是用,
进行链接表示同时查询3个表
将查找后的内容做为查找的值或者查找的对象,
若是要做为一个表看成查找对象,要对于查找后的表进行重命名语法以下
select .... from (select ....from .......) as 新名字
"查询平均年龄大于25的部门名称 子查询方式: 平均年龄大于25的部门id有哪些? 先要求出每一个部门的平年龄! 筛选出平均年龄大于25的部门id 拿着部门id 去查询部门表查询" select name from dept where id in (select dept_id from emp group by dept_id having avg(age) > 25); "多表查询方式: 先把数据拼接到一块儿 在加以筛选" select dept.name from emp inner join dept on emp.dept_id = dept.id group by dept.name having avg(age) >25;
xists 后跟子查询 子查询有结果是为True 没有结果时为False
为true时外层执行 为false外层不执行
select *from emp where exists (select *from emp where salary > 1000); #查看exists 的返回结果: 只有 0 和 1 select (exists (select *from emp where salary > 10000)); #一个查询结果也是一个表 既然是表就能连接起来 #综合练习: "查询每一个部门工资最高的员工信息 先查询每一个部门的最高工资 将查询结果与员工表联合起来 在加条件判断部门id相同而且 最高工资相同 则显示" select *from emp inner join (select dept_id,max(salary) m from emp group by dept_id) t2 on emp.dept_id = t2.dept_id where emp.salary = t2.m;