zoukankan      html  css  js  c++  java
  • mysql及联合查询

    SQL语句分类

    • DDL 数据库定义语言 定义数据库对象 create alter truncate drop
    • TPL 事务处理语言 rollback commit
    • DCL 数据控制语言 由 GRANT 和 REVOKE 两个指令组成 授权和废除权限
    • DML 数据操作语言 CRUD操作

    DML

    select语句

    inner join 公共的部分

    SELECT * FROM `user` u INNER JOIN user_role r ON u.userid=r.userid;
    

    left join 左表中全取,右边表如果没数据,字段为null,如果有多条呢,就会多条显示

    SELECT * FROM `user` u LEFT JOIN user_role r on r.userid=u.userid;
    

    right join 基本和left join相似,以右表为基础,右边表全取、、、

    
    

    full join 全连接

    mysql中不支持 full join
    mysql中使用 左右连接 加一个 union all来实现全连接

    SELECT
    	a.`user_name`,
    	a.`over`,
    	b.`over`
    FROM
    	user1 a
    LEFT JOIN user2 b ON a.`user_name` = b.`user_name`
    UNION ALL
    	SELECT
    		b.`user_name`,
    		b.`over`,
    		a.`over`
    	FROM
    		user1 a
    	RIGHT JOIN user2 b ON a.`user_name` = b.`user_name`
    

    cross join 交叉连接 笛卡尔连接

    SELECT * FROM `user` CROSS JOIN user_role   #没有连接条件
    

    update 语句

    mysql不支持 update 过滤条件中包含自身表,如下不支持

    UPDATE `user`
    SET `name` = 'xxx'
    WHERE
    	userid = (
    		SELECT
    			userid
    		FROM
    			`user`
    		WHERE
    			userid=3
    	)
    

    update语句和join语句一起用可以解决上面这个问题

    update user1 a inner join user2 b on a.user_name = b.user_name set a.over='齐天大圣';
    

    子查询

    工作中尽量少用子查询,因为查询会每次都会与子查询中的数据做匹配导致效率下降。

    SELECT
    	a.user_name,a.`over`,
    	(
    		SELECT
    			over
    		FROM
    			user2 b
    		WHERE
    			a.user_name = b.user_name) AS over2
    		FROM
    			user2 a
    

    优化后如下

    SELECT
    	a.user_name,a.`over`,
    	b.over AS over2
    FROM
    	user1 a
    LEFT JOIN user2 b ON a.user_name = b.user_name;
    

    row_number()在mysql中不支持

    http://cn.voidcc.com/question/p-rhxwnrfk-pb.html 分组top n

  • 相关阅读:
    好的Qt学习资料
    QT QMap介绍与使用
    Qt缺少调试器
    vs2012+Qt5.3.1环境添加新的ui界面的方法
    QT定时器的使用
    Qt中forward declaration of struct Ui::xxx的解决
    linux-svn命令
    如何编写Windows服务
    为你的爬虫提提速?
    Python爬虫的N种姿势
  • 原文地址:https://www.cnblogs.com/mxjhaima/p/13717245.html
Copyright © 2011-2022 走看看