狂人日记day8

狂人日记 day8

连接查询

例:从emp取员工名字 dept取部门名字

分类 sql92

​ sql99

方式分类:

  • 内连接

  • 外连接

  • 全链接

两张表连接查询没有条件会发生什么现象

例: 查询每个员工所在部门名称

一条数据和第二张表四个配对

没有任何条件限制;

select ename,dname from emp,dept;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmZr9RLt-1621344267215)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518185040291.png)]

---- 笛卡尔积现象 —

怎么避免这种现象

----连接时加条件

select ename,dname from emp,dept where emp.deptno = dept.deptno;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6n1FuXT8-1621344267216)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518185454101.png)]

匹配次数没减少

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ef01n2h6-1621344267216)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518185659245.png)]

上面是sql 92语法

尽量避免表的链接次数

内连接 - 等值连接

查询每个员工部门名称 显示员工命和部门名

92 结构不清晰

select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno;

99 表连接条件独立

select e.ename,d.dname from (inner)emp e join dept d on e.deptno = d.deptno; // 条件是等量关系 所以是等值连接

select … from a join b on a和b的连接条件 where 筛选条件

非等值连接

select e.ename ,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and hisal;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vFmw3K2-1621344267216)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518191733682.png)]

内连接–自连接

查询员工上级领导

技巧:一张表看成两张表

select a.ename as’员工名’ ,b.ename as ‘领导名’ from emp a join emp b on a.mgr = b.empno;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2CYaldf-1621344267216)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518192540678.png)]

外连接

select e.ename,d.dname from emp e right join dept d on e.deptno = d.deptno;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i9tqgdcd-1621344267216)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518192925790.png)]

有一个没匹配的也显示出来了

right 表示将右边的表为主表 把右面表全显示出来 捎带 左表

还有left左连接

join 前可以有outer 可以省略

案例 查询每个员工上级领导 显示所有员工名字和领导名

select e.ename,b.ename from emp e left join emp b on e.mgr = b.empno;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RrxHCy76-1621344267217)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518193747909.png)]

三张表

select … from a join b on … join c on …

sql中内连接和外连接可以混合

案例 : 找出每个员工的部门名称以及工资等级 显示员工名 部门名 薪资 薪资等级

select e.ename ,e.sal,d.dname,s.grade from emp e join dept d on e.deptno

= d.deptno join salgrade s on e.sal between s.losal and s.hisal;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1W6pmt5-1621344267217)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518194419998.png)]

select e.ename,e.sal,d.dname,s.grade from emp e join dept d on e.deptno =d.deptno join salgrade s on e.sal between s.losal and s.hisal left join emp l on e.mgr = l.empno;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cq5foSSL-1621344267217)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518194902097.png)]

子查询

select中嵌套select

select (select) from (select) where (select)

找出比最低工资高的员工姓名和工资

select ename,sal from emp where sal>(select min(sal) from emp);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1xBA7ufl-1621344267217)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518195250077.png)]

from 后面子查询 可以将子查询的查询结果当一张临时表(技巧)

找出每个岗位的平均工资的薪资等级

select t.*,s.grade from(The select job,avg(sal) as avgsal from emp group by job) t join salgrade s on t.avgsal between s.losal and s.hisal;

select t.* ,s.grade from (select job , avg(sal) as avgsal from emp group by job) t join salgrade s on t.avgsal between s.losal and s.hisal;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q8gl3ku5-1621344267217)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518200558820.png)]

select e.ename,(select d.dname from dept d where e.deptno = d.deptno )as dname from emp e;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFSJB2DE-1621344267217)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518200831929.png)]

对于select后语句子查询只能一次返回一条结果

如果查询多条则会报错参考如下

1个信息 对应了 2个信息 但要放在一个容器里

union

合并查询结果集

select ename,job from emp where job =‘MANAGER’

union

select ename,job from emp where job = ‘SALESMAN’;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PC0rxr9u-1621344267218)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518203050452.png)]

union 效率高一点 将乘法变成了加法运算

union是上下合并

union 使用时 union 进行合并时要求列数相同

一般要求列和列的数据类型一致

limit

将查询表的一部分取出来

limit 用法

select ename,sal from emp order by sal desc limit0,5;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTm4vxRT-1621344267218)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518204946049.png)]

limit startindex ,length(长度)

startindex开始位置从0开始

在order by后进行

select ename,sal from emp order by sal desc limit 4,5;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLe2q41D-1621344267218)(/Users/suannai/Library/Application Support/typora-user-images/image-20210518205426646.png)]

通用分页

每页显示3条记录

第一页:limit 0 ,3

第二页limit3,3

第三页limit6,3

第四页 limit 9,3

每页 pagesize 条记录

第pageno页 limit (pageno - 1 )*pagesize ,pagesize

有三十四道题

表的创建

属于 ddl语句

create table 表名(字段名,数据类型)

括号最后一个没有逗号

表名建议t_或t_bl开始 见名知意

  • varchar 可变长度字符串

根据实际数据长度 动态分配空间

  • char 定长

varchar速度慢 char速度快 最长255

  • int

  • bigint 数字数长整形 等于long

  • float

  • double

  • date短日期

  • datetime长日期

  • clob 字符大对象

    最多存储4g的字符串

    超过255,存储文章

  • blob

二进制大对象

存储图片声音视频等

往blob插入数据时 要用io流

t_movie 电影表

编号

No(bigint)

名字

name(varchar)

描述信息

description(clob)

上映日期

playtime(data)

时长

time(double)

海报

image(blob)

类型

type(char)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值