MySQL开发技巧(一)

SQL 开发技巧
    SQL 语句类型    
        DDL:数据定义语言
        TPL:事务处理无言
        DCL:数据控制语言
        DML:数据操做语言{SELECT INSERT UPDATE DELETE}前端

    SQL重要性:
        1.增长数据库处理效率,减小 应用相应时间。
        2.减小数据库服务器负载,增长服务器稳定。
        3.减小服务器间通信的网络流量。
        (实现一些其余人以为SQL语句完成不了的功能,这也是一件很是酷的事情)数据库

    Join从句的正确使用
        例子表:
        一表: 唐僧四人表(four)                           悟空关系表(relation)
                id      username   over             id      uasername       over
                1       唐僧        仙               1        牛魔王            被降服
                2       孙悟空      斗战             2         红孩儿           被降服
                3       猪八戒      猪               3         托塔天王         被降服
                4       沙和尚      傻逼             4         孙悟空           超牛逼
        Join的类型:
        1.内链接--INNER
            将两张表的组合在一块儿,产生新的结果表
            SELECT * FROM four as f INNER JOIN relation as r ON f.username = r.username
            结果就是只有一条记录 服务器

        2.全外链接--FULL OUTER
            左链接和右链接的结合
            1.能够将两张表的全部字段结果集
            2.能够过滤AB两表的关联字段
            问题来了:
            SELECT * FROM four as f FULL JOIN relation as r ON r.username = f.username   会报ERROR 1600错误
            解决方法:UNION ALL
            select f.username, f.over, r.over from four f LEFT JOIN relation r ON f.username = r.username 
            union ALL 
            select r.username, r.over, f.over from relation r RIGHT JOIN four f ON r.username = f.username
            这样就能查询出两表的全部数据
            
        3.左外链接--LEFT OUTER
            1.A表B表关联,取得A表中的全部结果集
            2.A表B表关联,取得A表中除了和B表关联的其余字段结果集
            查询取经四人组中哪些人不是悟空的结拜兄弟。
            select a.user_name,a.over,b.over FROM four as f LEFT JOIN relation as r ON r.username = f.username WHERE r.username IS NULL(反之则IS NOT NULL)网络

        4.右外链接--RIGHT OUTER
            1.A表B表关联,取得B表中的全部结果集
            2.A表B表关联,取得B表中除了和A表关联的其余字段结果集
            查询悟空的结拜兄弟中那些人没有去取经
            select r.user_name,r.over,f.over FROM four as f LEFT JOIN relation as r ON r.username = f.username WHERE f.username IS NULL(反之则IS NOT NULL)
            函数


        5.交叉链接(CROSS)
            交叉链接(cross join),又称笛卡尔链接(cartesian join)或叉乘(Product),若是A和B是两个集合,他们的交叉链接就为:A x B(若是A有4个字段,B有五个,就是20个)
            select a.name,b.name from user1 a CROSS JOIN user b  (没有任何关键字)优化

    Join相关SQL技巧
        如何更新使用过滤调教中包括自身的表?
        UPDATE user1 a join (select b.username from user1 a join user2 b on a.username = b.username) b on a.username = b.username 
        SET a.over = '齐天大神';事务

        使用JOIN优化子查询
        select a.username,a.over,b.over as over2 from user1 a LEFT JOIN user2 b ON a.username = b.username开发

        使用JOIN优化聚合子查询
        select 【field1,field2..fieldn】 functionname(聚合函数) from tablename 
        【where condition】
        group by field1,field2..fieldn  进行分类聚合的字段
        【with rollup】 可选语法:是否对已经聚合过的结果再进行汇总
        【having where condition】分类聚合后再进行条件过滤it

    分组选择
        使用场景:选择阅读量前十的不一样分类的新闻头条//选择前十的不一样分类的课程(如前端,后段,数据库)
        例子: SELECT d.username, ctimestr, kills FROM (SELECT user_id, timestr,kills, (SELECT COUNT(*) FROM user_kills b WHERE b.user_id=a.user_id AND a.kills <= b.kills) AS cnt FROM user_kills a GROUPS BY user_id,timestr,kills) c JOIN user1 d ON c.user_id=d.id WHERE cnt <= 2
        
        io

                                                            =====================本身记录的笔记,可能有点简陋

相关文章
相关标签/搜索