简单sql基础语句

--在SCOTT用户登陆下的代码
/*
  "="号是指返回一行
  "in"是返回多行
*/
--空的commit,可以将下面的查询结果窗口去掉;
commit;
--查询与SCOTT用户同一个部门的用户
select * from emp where deptno = (select deptno from emp where ename='SCOTT');
--查询与SCOTT用户不在同一个部门的用户
select * from emp where deptno <> (select deptno from emp where ename='SCOTT');
select * from emp where deptno != (select deptno from emp where ename='SCOTT');
--查询每个雇员超过他所在部门平均工资的信息
--表里的某个字段是"表名.字段名"
select * from emp e1 where sal>(select avg(sal)from emp e2 where e1.deptno = e2.deptno);
--查询其他部门中比30 号部门某一雇员薪水少的雇员信息
--返回多值可用ANY或ALL修饰符
--=ANY相当于IN,<ANY等价于<MAX,<>ALL等于NOT IN ,<ALL等价于<MIN
select empno,ename,sal,deptno from emp e1 where sal<any(select sal from emp where deptno=30)and deptno<>30;
--查询雇员薪水大于3000 的部门名称
select * from SALGRADE;
select * from dept;
select * from emp;
select d.dname from dept d where d.deptno in (select e.deptno from emp e where e.sal>3000);
select d.dname from dept d where exists (select * from emp e where d.deptno=e.deptno and sal>3000);
--连接查询
--等值内连接,起别名更简便
select ename,dname from emp,dept where emp.deptno = dept.deptno;
select ename,dname from emp inner join dept on emp.deptno = dept.deptno;
--从emp表中找到工资等级表中对应的工资等级,注意按名字(字符)降序(按ASCII码排序的),
--并且注意between.(min).and..(max).语法的结构,并且包括两端的值
select e.ename,s.grade from emp e,salgrade s where e.sal<s.HISAL AND e.sal>s.LOSAL order by ename desc;
select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal order by ename desc;
--获取雇员表中的前五名;
select * from (select * from emp order by sal desc) where rownum<=5;
select * from emp;
select * from (select e.*,rownum rn from (select * from emp order by sal desc)e)where rn<=5;
select * from (select e.*,row_number() over (order by sal desc) rn from emp e)where rn<=5;
--根据分析函数查询5到10名间的数据
select * from (select emp.* ,row_number() over(order by sal desc) rank1 from emp) where rank1>=5 and rank1<=10;
--分页查询固化rownum,很重要
--1.取数据先排序
--2.固化rownum
--3.最后取出分页查询的值
--注意下面的这条语句order是最后执行的,先取出emp,和rownum后最后执行order排序
select emp.*, rownum from emp order by sal;
--这个才是正确的
select * from(select e2.*, rownum rn from (select * from emp e order by sal desc)e2)e3 where rn>=5 and rn<=10;
--上面的才是正确的
select * from emp;
select * from dept;
select * from dept d where exists(select * from emp e where d.deptno=e.deptno and sal>3000);
--下面这样是不行的,必须得用and连接
select * from emp where deptno = 10 , sal>3000;
select * from emp where deptno = 10 and sal>3000;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值