MYSQML学习笔记2021.3.24

MYSQML学习笔记2021.3.24

emp表emp表
dept表
在这里插入图片描述

salgrade表
在这里插入图片描述
orcele和sql的区别
orcele结构比较严谨
sql语言比叫松散(文本的大小写SQL是不区分的,再orcele就会报错)
分组函数,select后面只能加参与分组的字段和分组函数,如果有其他的字段的话,sql里面可以查出来,但是没有意义。但是在orcele里面就会保错,所以说sql语句更松散。

关于查询结果的去重

distinnt “字段”

查询工作岗位:
select job from emp;
查询工作岗位并去重:
select distinct job from emp;#distinct 前面不能加字段,必须出现在所有字段的最前面!
**如果distinct 后面有两个或者两个以上的字段,表示两个字段结合起来去重。。**
统计岗位数量:#分组函数和去重函数的组合。
select count(distinct job) from emp;

链接查询

表链接方式的分类
内连接:
等值连接
非等值连接
自链接
外链接
左外连接
右外链接
全连接(很少用)

1.1内连接中的等值连接

笛卡尔积现象

当两个表进行连接查询时,在没有任何条件时,两个表的所有元素做乘积。
给表起别名:
优点:(这个别名只是这一条语句里面的)
1:执行效率高
2:可读性好

查询每个员工的部门名:
select e.ename,d.dname #小数点前的E和D就是代表两个表的别名。
from emp e,dept d;#from后面,表名+空格+别名(这条先执行)

上面这个语句执行出来时14*4=56条记录,

怎么避免笛卡尔积现象

你加条件啊

查询每个员工的部门名:
select e.ename,d.dname #小数点前的E和D就是代表两个表的别名。
from emp e,dept d;#from后面,表名+空格+别名(这条先执行)
where e.deptno=d.deptno;#起了别名之后,e表中的deptno和d表中的deptno相等的才展示出来

以上是sql92语句!!!
下面是sql99语句!!!

查询每个员工的部门名:
select e.ename,d.dname #小数点前的E和D就是代表两个表的别名。
from emp e
join dept d#from后面,表名+空格+别名(这条先执行)
on e.deptno=d.deptno;#起了别名之后,e表中的deptno和d表中的deptno相等的才展示出来

语法:
内链接中的等值链接语法
sql92语法和sql99语法的区别就是,99语法更清晰,表连接条件和筛选条件分离开了,结构更加清晰。

select 
	字段1,字段2,···
from1  别名#给表起别名,表名后面空格,再加别名
	join#这里省略了一个inner,(因为inner可以省略)2  别名
	on
	连接条件
where
	筛选条件

1.2内连接中的非等值连接

区别是:链接条件中的关系是非等值关系。
例如:

查找每个员工的工资和工资等级:
select #查找每个员工的工资和工资等级   
  e.ename as '名字',e. sal '工资',s.grade '等级'#对查找的字段重命名
from
 emp e #前面的表为主表
inner join #inner 可以省略。
 salgrade s #后面的表为副表
on
e.sal between s.losal and s.hisal; #非等值连接,条件是一个区间。

1.3内连接中的自连接

自链接:把一张表强行看成两张表,然后让两张表连接。

select 
e1.empno, as '员工编号'e1.ename as '员工',e2.ename as '领导'#查找的字段,并对字段进行重命名
from 
emp e1 #对表进行重命名
inner join
emp e2 #也就是给同意个表起了两个名字。
on
e1.mgr=e2.empno;#连接条件
编号	名字	领导
7369	SMITH	FORD
7499	ALLEN	BLAKE
7521	WARD	BLAKE
7566	JONES	KING
7654	MARTIN	BLAKE
7698	BLAKE	KING
7782	CLARK	KING
7788	SCOTT	JONES
7844	TURNER	BLAKE
7876	ADAMS	SCOTT
7900	JAMES	BLAKE
7902	FORD	JONES
7934	MILLER	CLARK

以上查询数据只有13条数据,但是有14个员工(king(老板),没有领导,所以没有匹配数据)

1.4外连接

外连接分左外连接和右外连接。(左:left,右right)
每个左外连接都有右外连接的写法,每个右外连接都有左外连接的写法。

如果要查询所有的员工的编号、工资、领导?
select 
e1.empno as '员工编号',e1.ename as '员工',e2.ename as '领导'
from 
emp e1
left outer join #加了left表示左边的表是主表,右边的表是附表,outer可以省略。
emp e2
on
e1.mgr=e2.empno;
编号    名字     领导
7369	SMITH	FORD
7499	ALLEN	BLAKE
7521	WARD	BLAKE
7566	JONES	KING
7654	MARTIN	BLAKE
7698	BLAKE	KING
7782	CLARK	KING
7788	SCOTT	JONES
7839	KING	null
7844	TURNER	BLAKE
7876	ADAMS	SCOTT
7900	JAMES	BLAKE
7902	FORD	JONES
7934	MILLER	CLARK

内连接和外链接的区别
内连接:
两张表是平等的,能查出来就查,查不出来就省略了(就比如例子中的‘king’,匹配不上就没有展示出来,)
也就是A和B两个表是平等的,没有主副之分。
外连接:
一个是主表一个是附表,进行连接。主表中的所有数据都要展示出来,如果附表中没有数据与之匹配,则附表会自动拟出一个null与之匹配。

查询每个部门分别有多少人(没有人的部门也找出来)
select
d.deptno,d.dname,count(e.ename) 
from 
emp e 
right join 
dept d 
on
e.deptno=d.deptno
group by
e.deptno;
结果:
部门编号  部门        人数
10	     ACCOUNTING    3
20	     RESEARCH      5
30	     SALES         6
40    	 OPERATIONS    0

1.5多表连接

#找出每个员工的id,名字,工资,部门名称和工资等级
select 
e.empno,e.ename,e.sal,d.dname,s.grade
from
emp e  #以emp表为主表进行查询,
left join
dept d
on e.deptno=d.deptno #查出每个员工的部门名称
left join
salgrade s  #以上面的查询结果为主表进行查询
on 
e.sal between s.losal and hisal
order by
e.sal desc; #按工资降序排列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值