1.对当前工资为30万日元以上的员工,降薪10%:2.对当前工资为25万日元以上且不满28万日元的员工,加薪20% update salaries set salary = case when salary >=300000 then salary*0.9 when salary >=250000 and salary<280000 then salary *1.2 else salary end;…
写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQL)的时候写到. 第 1 章 DBMS 与 SQL 1.DBMS 是什么 ? 数据库管理系统(Database Management System, DBMS) 是用来管理数据库的计算机系统. 本文采用 PostgreSQL 为 DBMS. 2.为什么要用 DBMS ? 问:为什么不用 文本文件 或…
需求:将emp表中工资大于一万的降到9成,工资少于一万的乘以1.2. 难点:如果分成两句update执行,在10000附近的值可能会执行两次. 钥匙:在update语句里采用case when,使更新仅仅执行一次. 代码展示: SQL> create table emp( 2 id number(4,0) primary key, 3 salary number(6,0) not null); 表已创建. SQL> insert into emp 2 select rownum,dbms_ra…
背景:最近用到统计之类的复杂Sql比较多,有种"提笔忘字"的感觉,看书练习,举一反三,巩固加强. (一) <SQL进阶教程>学习记录--CASE (二) <SQL进阶教程>学习记录--GROUP BY.PARTITION BY 1.语法 两种写法:简单 CASE 表达式(simple case expression).搜索 CASE 表达式(searched case expression) -- 简单 CASE 表达式 CASE sex WHEN '1' TH…
PL/SQL里的ROWTYPE类型具有非常大的用处和灵活性,现在发现ROWTYPE在insert和update语句里的妙用,可以节省很多代码,特别是在行copy和更新的时候. 在INSERT语句中: declare v_dept dept%rowtype; begin v_dept.deptno :; v_dept.dname := 'sample'; v_dept.loc := 'chicago'; insert into dept values v_dept; end; 在UPDATE语句中…
SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽管使用起来非常便利,但其真正的价值却并不怎么为人所知.很多人不用它,或者用它的简略版函数,例如 DECODE(Oracle).IF (MySQL)等.然而,正如 Joe Celko 所说,CASE表达式也许是 SQL-92 标准里加入的最有用的特性.如果能用好它,那么 SQL 能解决的问题就会更广泛…
今天同事要我修改服务器数据库里面的2条数据,查看服务器上的SQL Server数据库的时候,发现这几天数据没有添加成功,然后发现磁盘很快就满了,执行Update语句时,执行半天都提示还在执行,查询语句没有问题.这时就想到了应该是数据库文件过大的原因. 在数据库磁盘查看数据库的原始文件,数据库文件只有1G大小,但是日志文件.log文件却有20多G,在网上搜了一下资料,因为日志文件作用不大,于是对日志文件做了如下修改: 问题解决,磁盘空间变大,数据开始添加,Update语句很快执行完毕.…
select case when sex = 1 then '男性' else '女性' end as '性别', sum(case when name='哈尔滨' THEN population else 0 end) as '哈尔滨', sum(case when name='大庆' then population else 0 end) as '大庆', sum(case when name='齐齐哈尔' then population else 0 end) as '齐齐哈尔', sum…
进行不同条件的统计是case表达式的著名用法之一 select name,sum(case when sex = 1 then population else 0 end) as cnt_m,sum(case when sex = 2 then population else 0 end) as cnt_ffrom city_population_copygroup by name 实现了行转列…
SQL 权威指南SQL 解惑在进行非定制化统计时,需要将已有编号方式转换为另外一种便于分析的方式进行统计需求 select case when name='哈尔滨' then '黑龙江' when name='大庆' then '黑龙江' when name='齐齐哈尔' then '黑龙江' when name='长春' then '吉林' when name='吉林' then '吉林' when name='沈阳' then '辽宁' when name='大连' then '辽宁' wh…