SQL练习
1.查询符合一定条件之外的数据
这里以单表为例 , 多表的话无非就是多加些条件
SELECT DISTINCT R3.RESOURCE_ID, R3.AREA FROM t_resource R3 WHERE R3.UNIT_ID = 1 AND R3.RESOURCE_ID NOT IN ( SELECT r.RESOURCE_ID FROM t_resource R WHERE r.UNIT_ID = 1 AND R.DEL_FLG = 0 AND R.AREA > 1000000 )
2.根据表中记录所在的行数进行设置一定数据值 , 我这里用的是MySQL5.7版本的 , 因为MySQL目前还不支持(或者是有更好的方法 , 我没找到) . 所以在Oracle中可以直接拿来用的rowNum在这里并不能,
而且还要考虑记录中做逻辑删除的数据所占的行 . 具体参考下:
UPDATE t_project P4 //需要进行设值的表 INNER JOIN (内连接关联数据 SELECT @ROWnO := @ROWNO + 1 AS ROWNO, //从0开始逐层+1 PR.* FROM ( SELECT P.PROJECT_ID, P.PROJECT_NAME, p.SORT_NO FROM t_project P WHERE P.DEL_FLG = 0 AND P.SP_ID = 1 ORDER BY p.SORT_NO, P.UPD_DT ) PR, (SELECT @ROWnO := 0) P2 //初始化页码为0 ) P3 ON P4.PROJECT_ID = P3.PROJECT_ID//判断条件 SET P4.SORT_NO = P3.ROWNO;//设值
注* 试了几次 , 执行update的时候外链接无法使用 . 只有内连接才可以
3.数据查询时,行列转换 . 有表内容如 下:
正常的查询就不提了 . 如要按照excel的形式进行结果查询,例如行是姓名,每一列是该学生的各科成绩.
则如下 :
select `Subject` as 科目 , max(CASE when name = '张三' then result end) as 张三, max(CASE when name = '李四' then result end) as 李四 from tb GROUP BY Subject;
结果如下 :