为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
MySQL开发技巧(一)_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL开发技巧(一)

sqlercn 数据库工程师
难度中级
时长58分
  • @MySQL---JOIN优化聚合子查询
    1.一般写法,未能解决

    SELECT g.user_name,MAX(k.kills),k.time 
    FROM `group` AS g 
    JOIN kills AS k ON g.id=k.user_id 
    GROUP BY g.user_name 
    ORDER BY g.user_name;

    2.使用JOIN优化聚合子查询

    SELECT a.user_name,b.timestr,b.kills FROM user1 a
    JOIN user_kills b ON a.id = b.user_id 
    JOIN user_kills c ON c.user_id = b.user_id
    GROUP BY a.user_name,b.timestr,b.kills
    HAVING b.kills = MAX(c.kills);
    查看全部
  • @MySQL---JOIN优化子查询技巧

    1.一般子查询写法

    SELECT a.user_name,a.voer,
    (SELECT over FROM user2 WHERE a.user_name = b,user_name) AS over2
    FROM user1 a;

    问题:子查询对A表的每一条记录都要进行一次子查询,
    数据小时,没有多大影响,如果数据量大时,则要消耗大量的查

    2.JOIN优化(左连接)后的写法

    SELECT a.user_name,a.over,b.over 
    FROM user1 a LEFT JOIN user2 b 
    ON a.user_name = b.user_name;
    查看全部
  • @MySQL---用JOIN更新表
    1.问题
    ---ERROR 1093错误 不能更新from语句中出现的表字段

    update user1 set over=‘齐天大圣’ where user1.user_name in (
    select b.user_name from user1 a join user2 b on a.user_name = b.user_name);

    2.解决办法---使用JOIN进行联合更新

    UPDATE user1 a INNER JOIN user2 b ON a.user_name = b.user_name SET a.over='齐天大圣'; #推荐
    UPDATE user1 a JOIN (SELECT b.user_name FROM user1 a JOIN user2 b ON a.user_name = b.user_name) b ON a.user_name = b.user_name SET a.over=‘齐天大圣’;
    查看全部
    0 采集 收起 来源:使用join更新表

    2018-05-26

  • @MySQL---CROSS JOIN 交叉连接
    1.笛卡尔连接或叉乘,没有ON从句。
    2.eg:

    SELECT a.name,a.id, b.id
    FROM items a
    CROSS JOIN items1 b;
    查看全部
  • @MySQL---FULL JOIN 全连接

    1.FULL JOIN:是LEFT OUTER JOIN和RIGHT OUTER JOIN的合集。
    显示出两张表中的所有数据,当一张表的连接谓词无法满足时,则另一张表的字段在该表中为NULL。

    2.MySQL不支持FULL JOIN的解决方法:

    #通过UNION将左连接和右连接的结果合并
    SELECT select_expressions
    FROM TABLE A LEFT JOIN TABLE B ON A.key=B.key
    UNION ALL
    SELECT select_expressions
    FROM TABLE A RIGHT JOIN TABLE B ON A.key=B.key;

    3.UNION与UNION ALL的区别
        UNION 将自动删除重复项。
        UNION ALL 将所有的数据都列出来。

    查看全部
  • @MySQL---SQL语句标准中JOIN的类型

    INNER JOIN:内连接【A,B表公共部分】
    LEFT [OUTER] JOIN:左外连接【左表完整】
    RIGHT [OUTER] JOIN:右外连接【右表完整】
    FULL JOIN:全连接【显示符合条件的所有信息】
    CROSS JOIN;交叉连接/笛卡尔连接【a表n行,b表m行,查到nm行】

    查看全部
  • @MySQL---SQL语句分类

    DDL:数据定义语言 --- CREATE、ALTER、DROP、TRUNCATE
    TPL:事务处理语言 --- COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION
    DCL:数据控制语言 --- GRANT、REVOKE
    DML:数据操作语言 --- SELECT、UPDATE、INSERT、DELETE

    查看全部
    2 采集 收起 来源:SQL语句分类

    2018-05-26

  • SQL分为关系型数据库和非关型数据库。

    查看全部
    0 采集 收起 来源:SQL发展历程

    2018-05-26

  • 左外连接是以左表为基础查询,不加过滤条件时,将会查出左表中的所有数据,如果左表和右表关键时,左表关键条件对应的id在右表中不存在,则结果集右表中的数据为null,当有过滤条件时,条件为右表的两表的关键条件,b.username not null意思为,以左表为基准,在右表中存在的username的数据集合
    查看全部
  • 左连接,右连接,条件加 where b.clo is null    可以代替in,优化查询

    查看全部
    0 采集 收起 来源:使用join更新表

    2018-05-09

  • 更新使用过滤条件中包括自身的表

    UPDATE user1 SET over='齐天大圣' WHERE user1.`user_name` IN (SELECT b.`user_name` FROM user1 a  INNER JOIN user2 b ON a.`user_name` = b.`user_name`) --该语句不能在MySQL 中执行,但是是正确的,

    在MYSQL中更新的表不能出现在FROM后

    MYSQL:替换UPDATE user1 a join(select b.`user_name` from user1 a join user2 b on a.user_name=b.user_name) b on a.user_name = b.user_name set a.over = '齐天大圣',建立一个虚拟表与user1内联接

    查看全部
    0 采集 收起 来源:使用join更新表

    2018-05-02

  • 笛卡尔联接,交叉联接,没有ON从句的,CROSS JOIN

    查看全部
  • Join操作的类型-Full Join

    1,SELECT<select_list> FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key

    2,SELECT<select_list> FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL

    3,MySQL 不支持 Full Join 联接

    4,在MySQL中实现Full join 联接
    LEFT JOIN  UNION ALL RIGHT JOIN 模拟全联接

    查看全部
  • Join从句的操作类型,Right Out Join

    查看全部
  • Join从句操作的类型-Left Outer Join

    查看全部

举报

0/150
提交
取消
课程须知
本门教程主要针对的是MySQL数据库,熟悉数据库的CRUD操作是掌握本门教程精华的必要条件。
老师告诉你能学到什么?
1、如何正确的使用join语句 2、如何实现分组选择数据
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!