sql语句总结一

Update 语句

1. 所有学生年龄改成3. update student set sale=3;

2. 讲姓名为sun的学生年龄在基础上增加20.update student set age=age+10 where name=sun;

3. 将年龄等于空的同学改成10Update student set age=10 where age is null;

Delete 语句使用 和truncate

注意:1.如果不使用where 子句,将删除表中所有数据

2. delete不能删除某一列的值,如果 要删除要用update语句

3. insert delete语句一样,从一个表中记录将引起其他表中的参照完整性问题。

1(员工表:emp)empon:编号  ename:名字 job:职位 mgr:上级的编号 hiredate:入职时间  sal:薪水  comm:奖金  deptno:部门编号

2(部门表:dept: deptno:编号 dname:部门名字 loc:地址

3(工资级别表:):grade:工资级别 losal:低工资 hisal:高工资

1. distinct 去掉查询返回重复行的数据

   Select distinct deptno,job from emp; //返回数据完全一样

2. oracle 函数算数表达式

显示每个雇员的年工资+奖金

Select ename 姓名sal*12+comm*12 as 年输入 from emp

处理null

使用nvl 函数来处理

Select ename, sal*13+nvl(comm,0)*13 from emp;//comm如果等于空就取0,如果不为空就取该数值

如何连接字符串(||)在查询时候,如果希望把多个拼接起来,作为一列返回。

Select ename ||是一个 || job from emp; //字符拼接

3. 分页查询

Oracle 的分页查询要使用子查询:

入职时间的先后顺序,查询从第4-6人是谁

Select t2.* from(select t1.*,rownum AS rn from(select * from emp) t1 where rownum<=6)t2 where rn >=4
mysql: select * from 表名 where 条件 limit从第几条取,取几条

Sql server:
select top4 * from 表名 where id not in(select top 4 id from 表名 where 条件 )//5-8

4. 数据分组-max,min,avg,sum,count

(1) 所有员工中最高工资和最低工资

Select max(sal),min(sal) from emp

(2) 所有员工的平均工资

Select avg(sal),sum(sal)from emp;

Select sum(comm)/count(*)from emp;

Avgsal)不会把salnull的进行统计,因此我们要注意,如果

你希望为空值也考虑,则可以这样做

Select sum(comm)/count(*)from emp;

(3) 统计多少员工

Select count(*) from emp

Count 可以统计某列有多少,如果该列某条数据为空不会去统计,

(4) 工资最高的员工名字,工作岗位

思路:1.可以使用子查询

(1)可以查询最大工资是多少

Select max(sal) from emp

(2)看看谁的工资最多

Select ename,job from emp where sal=(Select max(sal) from emp)

5. group by having 子句

Group by 用于对查询的结果分组统计

Having 子句用于限制(过滤)分组显示结果

(1)显示每个部门的平均工资和最高工资

Select avg(sal)max(sal),deptno from emp group by deptno

(2) 每个部门每种岗位的平均工资和最低工资

Select avg(sal),max(sal),deptno from emp group by deptno,job

(3) 部门平均工资低于2000的部门号和它的平均工资

Select avg(sal),deptno from emp group by deptno having avg(sal)<2000

注意:

1. 分组函数只能出现选择列表(select 后面)、having order by 子句后面

2. 如果在select 语句同时含有group by,having,order by 那么他们的顺序是group by, having ,order by

3. 在选择列中如果有列、表达式、和分组函数,那么这些列和表达式

必须有一个出现在group by 中,否则就会出错

 

 

6. 多表查询

Select * from emp,dept //是从表dept中的第一条记录与emp表的所有记录进行组合匹配

(1)显示雇员名,雇员工资及所在部门的名字

Select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno

笛卡尔基,在多表查询的时候,如果不带任何条件,则会出现笛卡儿积多表查询的条件是至少不能少于表的个数-1

(2)部门号为10的部门名、员工名和工资

Select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno and emp.deptno=10

(3)各个员工的姓名,工资,及其工资的级别

Select emp.ename,emp.sal,salgrade.grade from emp.salgrade where emp.sal between salgrade.losal and salgrade.hisal

7. 自连接查询

自连接是指在同一张表的连接查询

(1) 显示FORD的上级的所有信息

Select * from emp where empno = (select mgr from emp where ename=FORD)

8. 子查询

单行子查询

(1) smith 同以部门的所有员工,且不包含smith

select * from emp where deptno=(Select deptno from emp where ename=smith) and ename != smith

多行查询

(2)部门10的工作相同的雇员的名字、岗位、工资、部门号

Select ename,job,sal,deptno from emp where job in(select distinct job from emp where deptno=10)

(2) 工资比部门30的所有员工的工资高的员工的姓名、工资和部门

Select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);

(3) 工资比部门20的任意一个(不是所有)员工的工资高的员工的姓名、工资和部门

Select ename,sal,deptno from emp where sal>any(select sal from emp where deptno=20);

多列查询

(1)smith 的部门和岗位完全相同的所有雇员

Select * from emp where (deptno,job)=(select deptno ,job from emp where ename=smith)oracle可以这样

9. from 子句中使用子查询(from 后面查询当作一个临时表来用)

1)高于自己部门平均工资的员工的信息

Select * from emp AS t1,(select avg(sal),deptno from emp group by deptno ) t2 where t1.deptno =t2.deptno and t1.sal>t2.avg(sal);

10. 合并查询

(1) union  

该该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。

Select * from emp where sal>2500 union  select * from emp where job=manager

(2)Intersect

使用该操作符用于取得两个结果集的交集

Select * from emp where sal>2500 Intersect select * from emp where job=manager

(3)minus 取差集

该操作符用于两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合

11 内连接与外连接

内连接利用where 子句对两张表形成的笛卡尔积进行筛选。

左连接 left join

Select * from stu left join exam on stu.id=exam.id

如果stu的记录没有和exam 任何一条记录匹配,也要显示

右连接 right join on (同left join 相反)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值