mysql多表查询、连接查询、合并结果集、视图、常见函数多表查询
概念:多张表或⼀张表多次使⽤成为多表查询
需求:查询最⾼薪资对应的员⼯信息
//1、先查出最⾼的薪资是多少
mysql中定义结束的命令select max(salary) from t_emp;
//2、以最⾼薪资为条件查出对应的员⼯信息
select * from t_emp where salary=(select max(salary) from t_emp);
如果是使⽤的= != > < >= <=等等,那么要求是后⾯只能跟单个结果
如果⼦查询的结果是多个值,那就使⽤in/not in
需求:查询薪资在5K~7K之间的员⼯的信息
//1、先查询到薪资在5K到7K之间的员⼯的编号
select eno from t_emp where salary between 5000 and 7000;
//2、根据编号查询员⼯的信息
select * from t_emp where eno in(select eno from t_emp where salary between 5000 and 7000);
连接查询
shell脚本讲解左连接:以左边表为主,查询出左边表中符合条件的全部数据以及右边表中符合条件的数据,缺少的数据以null代替
语法:select ... from 表 left join 表 on 条件;
需求:查询部门对应的员⼯信息
select d.*,e.* from t_dept d,t_emp e where d.deptno=e.deptno;
select d.*,e.* from t_dept d left join t_emp e on d.deptno=e.deptno;
mysql语句多表查询itemtest是什么意思右连接:以右边表为主,查询出右边表中的全部数据及左边表中符合条件的数据,不⾜的以null代替
语法:select ... from 表 right join 表 on 条件;
需求:查询员⼯信息及对应的部门信息
select d.*,e.* from t_dept d right join t_emp e on e.deptno=d.deptno;
合并结果集
注意:合并的结果集要求被合并的字段是相同的类型及数据
union:合并多张表的数据,会去重复
union all :合并多张表的数据,不去重复
视图
概念:就是⼀张虚拟的表
语法:create view 视图名 as select语句;
需求⽰例:甲⼄双⽅合作,甲⽅需要⼄⽅团队的⼈员部分信息,那么该信息是只有部分且只能查看
需求:将员⼯1,6,9的基本信息(不包括部门及薪资信息)给到甲⽅
create view v_emp1 as select ename,sex,phone,address from t_emp where eno in(1,6,9);
视图和原表中的数据如果是⼀对⼀可推导的情况下是可以互通的
带有函数的名称是不能作为字段名直接使⽤的
如果视图中的数据是⽆法推导原表中数据的变化的,那就不能进⾏修改(增删改)的动作
问题:到底能否根据视图中的数据修改原表中的数据呢?
回答:视图中修改的数据可以推导出原表中数据的变化那就可以修改,如果推导不出来那就不能改
问题:什么样的情况下回导致通过视图⽆法推导原表中的数据呢?
回答:当视图中的数据⽤到了group by 、函数、distinct等等
优点:安全(可以设置权限和字段)、⽅便
常见函数
字符串函数:concat(arg0,arg1,...) 字符串拼接,可拼接⽆限个字符
例如:select concat('hello','world'); 结果是:helloworld
⽬的:将不同的字符以指定的形式拼接到⼀块展⽰出来
⽇期函数:
now() 获取当前的系统时间
unix_timestamp() 获取当前的系统时间对应的毫秒值
聚合函数和函数的区别
聚合函数⽤户表中对数据的操作,函数代表某⼀个特定的功能,对已有的数据根据功能进⾏操作
(聚合函数是直接操作数据的,函数是操作获取的数据的)
通常情况不建议在数据库中使⽤函数,会影响数据库性能,所以⼤多数对数据的处理都是由开发语⾔来处理的键(key)值(value)对
姓名张三年龄 17 性别男⽤户名 admin 密码 root
字段称之为key,具体的数据称之为值
scanf%c⼯具的使⽤增加sql语句
navicat 百度练习题
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论