七天看完SQL经典实例(一)

预备知识:增加列,修改表名,修改列属性,删除列语句,修改列名

(1)alter table emp add column name varchar(10);

(2)alter table emp rename test1;

(3)alter table emp modify name char(10);

(4)alter table emp drop column name;

(5)alter table emp change address address1 char(4);  #必须增加

 

第三章:多表查询学习心得

1.数据叠加: Union all /Union 

(1) 注意点:使用时前者,简单叠加包含重复项,必须保持两次select的列数相同,叠加的列数据类型匹配;后者过滤重复项;Union 等同于针对Union all输出结果的distinct操作,如下:

(2) 代码区:select deptno from emp union all select deptno from dept;

select deptno from emp union select deptno from dept;

select dintinct deptno from (select deptno from emp union all select deptno from dept); 

(3) 特色代码:select '-----' 是啥,null from dept;  #此代码作用是???;

2.查找两个表中相同行/查找只存在于一个表的数据

(1)注意点:使用not in时,子查询表不能含null,否则返回空表,解决方案见代码(new_dept含空值)

(2)代码区:

#视图的使用,create view V as select ename,job,sal from emp where job = 'CLERK';#此时不出任何结果:select * from V;

#视图与表连接:select e.empno,e.ename,e.job,e.sal,e.deptno from emp e,V

where e.ename = v.ename and e.job = v.job and e.sal = v.sal 

或使用 join...on...达同样效果

#select deptno from dept where deptno not in (select deptno from emp);

#select deptno from dept where not exists(select deptno  from new_dept where dept.deptno = new_dept.deptno); #必须添加条件否则仍为空表;

3.从一个表检索与另一个表不相关的行

(1)注意点:直接使用left join 得到的是以左表为基准的所有列的信息,左表有那是右表没有对应信息的直接为Null

(2)实例:查找哪些部门没有员工

#下图为只左连接的结果,以dept为基准,获取所有的列,deptno = 40没有员工信息

 结果代码:select d.* from dept  d left join emp e on d.deptno = e.deptno where e.deptno is null;

 

4.新增连接查询而不影响其它连接查询

(1) 注意点:三表连接

(2)实例:查找员工信息,包括所在部门位置,以及收到奖金的日期

select e.ename,d.loc,eb.received from emp e join dept d on e.deptno = d.deptno left join emp_bonus eb on e.empno = eb.empno  order by 2;

#或者使用标量子查询

select e.ename,d.loc,(select eb.received from emp_bonus eb where e.empno = eb.empno)received 

from emp e,dept d

where e.deptno = d.deptno;

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值