美文网首页
SQL进阶教程

SQL进阶教程

作者: gxatios | 来源:发表于2018-05-17 17:13 被阅读184次

    1神奇的 SQL
    1-1 case表达式
    CASE 表达式有简单 CASE 表达式 (simple case expression)和搜索 CASE 表达式(searched case expression)
    两种
    -- 简单 CASE 表达式
    CASE sex
    WHEN '1' THEN '男'
    WHEN '2' THEN '女'
    ELSE '其他'
    END
    -- 搜索 CASE 表达式
    CASE
    WHEN sex = '1' THEN '男'
    WHEN sex = '2' THEN '女'
    ELSE '其他'
    END
    在发现为真的 WHEN 子句时, CASE 表达式的真假值判断就会中止,而剩余的 WHEN 子句会被忽略。为了 避免引起不必要的混乱,使用 WHEN 子句时要注意条件的排他性。
    注意事项 1:统一各分支返回的数据类型
    注意事项 2:不要忘了写 END
    注意事项 3:养成写 ELSE 子句的习惯

    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;

    新手用 WHERE 子句进行条件分支,高手用 SELECT 子句进行条件 分支。
    用 CHECK 约束定义多个列的条件关系
    CONSTRAINT check_salary CHECK
    ( CASE WHEN sex = '2'
    THEN CASE WHEN salary <= 200000 THEN 1 ELSE 0 END
    ELSE 1 END = 1 )

    蕴含式和逻辑与(logical product)的区别。逻 辑与也是一个逻辑表达式,意思是“P 且 Q”,记作 P ∧ Q。

    -- 用 CASE 表达式写正确的更新操作 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;

    -- 用 CASE 表达式调换主键值 UPDATE SomeTable
    SET p_key = CASE WHEN p_key = 'a' THEN 'b'
    WHEN p_key = 'b' THEN 'a'
    ELSE p_key END
    WHERE p_key IN ('a', 'b');

    表之间的数据匹配
    与 DECODE 函数等相比,CASE 表达式的一大优势在于能够判断表达式。 也就是说,在 CASE 表达式里,我们可以使用 BETWEEN、LIKE 和 <、 > 等 便利的谓词组合,以及能嵌套子查询的 IN 和 EXISTS 谓词。因此,CASE 表达式具有非常强大的表达能力。

    -- 表的匹配 :使用 IN 谓词 SELECT course_name,
    CASE WHEN course_id IN
    (SELECT course_id FROM OpenCourses
    WHERE month = 200706) THEN '○' ELSE'×'END AS "6月",
    CASE WHEN course_id IN
    (SELECT course_id FROM OpenCourses
    WHERE month = 200707) THEN '○' ELSE'×'END AS "7月",
    CASE WHEN course_id IN
    (SELECT course_id FROM OpenCourses
    WHERE month = 200708) THEN '○' ELSE '×' END AS "8 月"
    FROM CourseMaster;
    -- 表的匹配 :使用 EXISTS 谓词 SELECT CM.course_name,
    CASE WHEN EXISTS
    (SELECT course_id FROM OpenCourses OC
    WHERE month = 200706
    ...

    在 CASE 表达式中使用聚合函数
    -- 条件 1 :选择只加入了一个社团的学生
    SELECT std_id, MAX(club_id) AS main_club
    FROM StudentClub GROUP BY std_id
    HAVING COUNT(*) = 1;
    -- 条件 2 :选择加入了多个社团的学生
    SELECT std_id, club_id AS main_club
    FROM StudentClub
    WHERE main_club_flg = 'Y' ;

    1- 2 面向集合语言 SQL
    自连接的用法
    SQL 的连接运算根据其特征的不同,有着不同的名称,如内连接、外 连接、交叉连接等。一般来说,这些连接大都是以不同的表或视图为对象 进行的,但针对相同的表或相同的视图的连接也并没有被禁止。针对相同 的表进行的连接被称为“自连接”(self join)。

    相关文章

      网友评论

          本文标题:SQL进阶教程

          本文链接:https://www.haomeiwen.com/subject/tytidftx.html