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;

结果如下 : 

 

posted @ 2018-04-19 15:31  每天学习1点点  阅读(109)  评论(0编辑  收藏  举报