mysql多表查询、连接查询、合并结果集、视图、常见函数

多表查询

概念:多张表或一张表多次使用成为多表查询

需求:查询最高薪资对应的员工信息

//1、先查出最高的薪资是多少
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);
连接查询

左连接:以左边表为主,查询出左边表中符合条件的全部数据以及右边表中符合条件的数据,缺少的数据以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;

右连接:以右边表为主,查询出右边表中的全部数据及左边表中符合条件的数据,不足的以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,具体的数据称之为值

 

工具的使用

navicat  百度

练习题

https://www.cnblogs.com/Diyo/p/11424844.html

猜你喜欢

转载自www.cnblogs.com/chengjinsheng/p/12967303.html
今日推荐