MySQL笔记3

查询员工的姓名和部门名称
A: 笛卡尔积(了解 )
Selet * from A,B;
A 2条 B 3条 结果:2*3= 6条
B:内连查询(主外键等值的结果) 表的先后顺序无关

修改表名
RENAME table 原表名 to 新表名;
1种 where实现内连查询
查询学生的姓名和班级名称
select s.sname,c.cname from student s,classrom c
where s.cid=c.cid;
查询学生的姓名和班级名称 inner JOIN … ON 条件
select s.sname,c.cname from student s
INNER JOIN classroom c ON s.cid=c.cid;

C.外连接(左外连接 右外连接)和表的先后顺序有关的
左连接:表1 left join 表2 on 条件 以”表1” 作为主表(显示该表中的所有数据,其它没有对应的数据用Null来表示)
显示所有的班级名称信息及对应的学生姓名
select c.cname,s.sname
from classroom c LEFT JOIN student s on c.cid=s.cid;
等同于右连接查询
select c.cname,s.sname
from student s RIGHT JOIN classroom c on c.cid=s.cid;
D.自然连接 (natural join 默认关联两表相同的列名,去掉重复列)(了解)
SELECT cname,sname from student NATURAL JOIN classroom ;
E.自连接(难)
查询员工的姓名及上级姓名
select e1.ename 员工的姓名,e2.ename 经理的姓名
from emp e1,emp e2
where e1.mgr=e2.empno

多表(三表)内连查询
Select * from 表1
inner join 表2 on 表1.外键= 表2.主键
inner join 表3 on 表3 .外=表2.主

1、单行子查询(一列一个值 可以= > <)

查询工资大于7788号员工的所有员工信息
select * from emp where sal>(select sal from emp where empno=‘7788’)
查询和7788在同一个部门其他员工信息
select * from emp where deptno=(SELECT deptno from emp where empno=‘7788’)
and empno!=‘7788’
查询超过所在(本)部门平均工资的员工信息
select * from emp e1 where sal>
(SELECT avg(sal) from emp e2 GROUP BY deptno HAVING e1.deptno=e2.deptno);

select * from emp e1 where sal>
(SELECT avg(sal) from emp e2 where e1.deptno=e2.deptno);

2、多行子查询(一列多个值 in )
查询薪水大于2000的部门名称
select dname from dept where deptno in (SELECT DISTINCT deptno from emp where sal>2000)

多行子查询: 返回多值可以使用in、any或all来修饰。
=any相当于in,<any小于最大值,>any大于最小值;
<>all相当于not in,>all大于最大值,<all小于最小值。
#查询20号部门的员工(不包括最高工资)员工的信息。
SELECT * from emp where sal <any(
SELECT DISTINCT sal from emp where deptno=20)
and deptno=20

查询员工姓名和部门名称
select ename,(select dname from dept WHERE deptno=emp.deptno) dname from emp;
In与exists 区别
查询薪水大于2000的部门名称
select dname from dept where deptno in (SELECT DISTINCT deptno from emp where sal>2000)
exists表示存在的关键字
SELECT dname from dept d where EXISTS
(SELECT * from emp e where sal>2000 AND d.deptno=e.deptno)
区别:in 比较是否相等 exists 是否存在 ( true /false)
Exists先执行父查询,再执行子查询,快
In 先执行子查询,再执行父查询,慢

Union 并列查询 替换 or
Union all
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
查询员工部门编号20,和员工工资大于2000员工信息
Select * from emp where deptno=20 or sal>2000;
union 替换
Select * from emp where deptno=20
union
Select * from emp where sal>2000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值