SQL语句

select t1.PURCHASE_YEAR,t2.HARDWARE_CATEGORY_NAME,t2.PROFESSION_NAME,sum(t3.NUMBER_VALUE) as NUMBER_VALUE,sum(t3.STORAGE) as STORAGE,t3.UPDATE_DATE from (select PURCHASE_YEAR from BVIEW_HARDWARE_ANUALCOUNT group by PURCHASE_YEAR) t1 cross join (select HARDWARE_CATEGORY_NAME,PROFESSION_NAME from BVIEW_HARDWARE_ANUALCOUNT group by HARDWARE_CATEGORY_NAME,PROFESSION_NAME) t2 inner join BVIEW_HARDWARE_ANUALCOUNT t3 on t1.PURCHASE_YEAR>=t3.PURCHASE_YEAR and t2.HARDWARE_CATEGORY_NAME=t3.HARDWARE_CATEGORY_NAME and t2.PROFESSION_NAME=t3.PROFESSION_NAME group by t1.PURCHASE_YEAR,t2.HARDWARE_CATEGORY_NAME,t2.PROFESSION_NAME,t3.UPDATE_DATE order by t1.PURCHASE_YEAR

pref_nam population

德岛    100
香川    200
爱嫒    150
高知    200
福冈    300
佐贺    100
长崎    200
东京    400
群马    50

select 
case pref_nam 
when '德岛' then '四国'  
when '香川' then '四国'  
when '爱嫒' then '四国'  
when '高知' then '四国' 
when '福冈' then '九州' 
when '佐贺' then '九州' 
when '长崎' then '九州' 
else '其他' end as district,sum(population) from poptbl
group by 
case pref_nam 
when '德岛' then '四国'  
when '香川' then '四国'  
when '爱嫒' then '四国'  
when '高知' then '四国' 
when '福冈' then '九州' 
when '佐贺' then '九州' 
when '长崎' then '九州' 
else '其他' end;

 

select 
case pref_nam 
when '德岛' then '四国'  
when '香川' then '四国'  
when '爱嫒' then '四国'  
when '高知' then '四国' 
when '福冈' then '九州' 
when '佐贺' then '九州' 
when '长崎' then '九州' 
else '其他' end as district,sum(population) from poptbl
group by district;

设置数据库编码

CREATE DATABASE dbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  • 设置数据表编码
CREATE TABLE 'author' (
    'authorid' char(20) NOT NULL,
    'name' char(20) NOT NULL,
    'age' char(20) NOT NULL,
    'country' char(20) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  • mysql中两种数据库引擎 
    ENGINE=MyISAM 
    ENGINE=InnoDB
insert into 表名(字段名1,字段名2)values(值a1,值b1), (值a2,值b2),

select * from poptbl2;

+-----------+------+------------+

| pref_name | sex  | population |

+-----------+------+------------+

| 德岛      | 1    |         60 |

| 德岛      | 2    |         40 |

| 香川      | 1    |        100 |

| 香川      | 2    |        100 |

| 爱媛      | 1    |         50 |

| 爱媛      | 2    |        100 |

| 高知      | 1    |        100 |

| 高知      | 2    |        100 |

| 福冈      | 1    |        100 |

| 福冈      | 2    |        200 |

| 佐贺      | 1    |         20 |

| 佐贺      | 2    |         80 |

| 长崎      | 1    |        125 |

| 长崎      | 2    |        125 |

| 东京      | 1    |        250 |

| 东京      | 2    |        150 |

 select pref_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_f from poptbl2 group by pref_name;

东京    250    150
佐贺    20    80
德岛    60    40
爱媛    50    100
福冈    100    200
长崎    125    125
香川    100    100
高知    100    100

新手 用 WHERE 子句 进行 条件 分支, 高手 用 SELECT 子句 进行 条件 分支。

用check约束多个列的条件关系

constraint check_salary check(

case when sex='2' then case when salary <= 20000 then 1 else 0 end

else 1 end =1)

女性员工的工资必须20万元以下

在 命题 逻辑 中, 该 命题 是 叫作 蕴含 式( conditional) 的 逻辑 表达式, 记作 P → Q。

这里 需要 重点 理解 的 是 蕴含 式 和 逻辑 与( logical product) 的 区别。 逻辑 与 也是 一个 逻辑 表达式, 意思是“ P 且 Q”, 记作 P ∧ Q。 用 逻辑 与 改写 的 CHECK 约束 如下 所示。 CONSTRAINT check_ salary CHECK ( sex = '2' AND salary <= 200000 ) 当然, 这 两个 约束 的 程序 行为 不一样。 究竟 哪里 不一样 呢? 请 先 思考 一下, 再看 下面 的 答案 和 解释。 答案 如果 在 CHECK 约束 里 使用 逻辑 与, 该 公司 将不 能 雇佣 男性 员工。 而 如果 使用 蕴含 式, 男性 也可以 在这里 工作。 解释 要想 让 逻辑 与 P ∧ Q 为真, 需要 命题 P 和 命题 Q 均为 真, 或者 一个 为真 且 另一个 无法 判定 真假。 也就是说, 能在 这家 公司 工作 的 是“ 性 别为 女 且 工资 在 20 万 日元 以下” 的 员工, 以及 性别 或者 工资 无法 确定 的 员工( 如果 一个 条件 为 假, 那么 即使 另一个 条件 无法 确定 真假, 也不能 在这里 工作)。 而 要想 让 蕴含 式 P → Q 为真, 需要 命题 P 和 命题 Q 均为 真, 或者 P 为 假, 或者 P 无法 判定 真假。 也就是说 如果 不满足“ 是 女性” 这个 前提 条件, 则 无需 考虑 工资 约束。

 

update salaries
set salary=case when salary >=30000 then salary*0.9
case when salary >=25000 and salary < 28000 set salary*1.2
else salay end; 

 

select CM.course_name,
    case when exists 
        (select month from opencourses OC where course_id='200706' and OC.month=CM.course_id) then 'O' else 'X' end as 'june',
 case when exists 
        (select month from opencourses OC where course_id='200707' and OC.month=CM.course_id) then 'O' else 'X' end as 'july',
case when exists 
        (select month from opencourses OC where course_id='200708' and OC.month=CM.course_id) then 'O' else 'X' end as 'march'
    from coursemaster CM;

这样 的 查询 没有 进行 聚合, 因此 也不 需要 排序, 月份 增加 的 时候 仅 修改 SELECT 子句 就可以 了, 扩展性 比较 好。 无论 使用 IN 还是 EXISTS, 得到 的 结果是 一样 的, 但 从 性能 方面 来说, EXISTS 更好。 通过 EXISTS 进 行的 子 查询 能够 用到“ month, course_ id” 这样 的 主 键 索引, 因此 尤其是 当 表 OpenCourses 里 数据 比较 多的 时候 更有 优势。

接下来, 我们 按照 下面 的 条件 查询 这张 表里 的 数据。

获取 只 加入 了 一个 社团 的 学生 的 社团 ID。

获取 加入 了 多个 社团 的 学 生的 主 社团 ID。

 

--用于查找是同一家人但住址却不同的记录的SQL语句

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值