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

mysql及联合查询的更多相关文章

  1. Mysql的联合查询

    联合查询 union联合查询 语法:     select 语句 union [all|distinct] select 语句; 示例: 特点:     条件:两表的查询出来的字段数目必须相同     ...

  2. mysql中联合查询

    联合查询union 一个翻译问题的解释: 在mysql的手册中,将连接查询(Join)翻译为联合查询: 而联合查询(union),没有明确翻译. 但: 在通常的书籍或文章中,join被翻译为“连接”查 ...

  3. php+mysql数据库联合查询 left join 右侧数据重复问题

    情况:多表联合查询(三表及以上联合查询) 分析: A left join B left join C left join D 假如: 表B.C.D都与表A关联查询 A left join B 4条数据 ...

  4. MySQL 中联合查询效率分析

    目前我有两个表,一个keywords和一个news表.keyword存放关键词是从news中提取,通newsid进行关联,两表关系如图: keywords中存有20万条数据,news中有2万条数据,现 ...

  5. mysql三表联合查询,结果集合并

    参考: mysql 结果集去重复值并合并成一行 SQL 三表联查 数据库三表连接查询怎么做 合并: MySQL中group_concat函数 完整的语法如下: group_concat([DISTIN ...

  6. mysql:联合查询

    SELECT t1.name, t2.salary  FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name; 可以对数据表使用别 ...

  7. MYSQL的联合查询最好是少用,效能差异巨大

    同样的功能,不同的写法,时间和内存占用差了几千倍,不废话,直接上代码 第一种写法: 代码如下: $Rs=DB::get($_ENV['DB'],3,"SELECT * FROM _xiazh ...

  8. thinkphp 使用原生mysql语句 联合查询

    <?php class DelAction extends Action { public function ml(){ // 实例化一个空模型,没有对应任何数据表 $Dao = M(); // ...

  9. mysql三表联合查询

    -- SELECT d.userId, d.userPhoNum, a.orderId, a.productType, b.courseId, b.courseName, c.payJe -- FRO ...

随机推荐

  1. Hadoop 2.6.1 集群安装配置教程

    集群环境: 192.168.56.10 master 192.168.56.11 slave1 192.168.56.12 slave2 下载安装包/拷贝安装包 # 存放路径: cd /usr/loc ...

  2. 更改默认Xcode

    更改默认 Xcode 的指令: sudo xcode-select -switch /Applications/Xcode.app  如果系统里面有好几个版本的 Xcode,可以用这个命令指定默认的 ...

  3. Java二进制和位运算,这一万字准能喂饱你

    基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...

  4. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(四):创建使用[ResourceOwnerPassword-资源所有者密码凭证]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 本篇将创建使用[ResourceOwnerPassword-资源所有者密码凭证]授权模式的客户端,来对受 ...

  5. 解决Oracle12cr2自创建用户无法登录的问题

    说明: 下面创建是创建CDB本地用户,不是PDB应用程序用户,如果是PDB应用程序创建语法会不一样.下面介绍创建CDB本地用户. 创建表空空间 CREATE TABLESPACE YH datafil ...

  6. 高可用集群corosync+pacemaker之pcs安装使用

    前文我们介绍了高可用集群corosync+pacemaker的集群管理工具crmsh的常用命令的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/crms ...

  7. Codeforces Round #669 (Div. 2)A-C题解

    A. Ahahahahahahahaha 题目:http://codeforces.com/contest/1407/problem/A 题解:最多进行n/2的操作次数,我们统计这n个数中1的个数,是 ...

  8. Q200510-01: 求部门工资最高的员工

    问题: 求部门工资最高的员工 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+----- ...

  9. MySQL教程 | 菜鸟教程

    装数据库失败后的重装步骤!!! --[创建数据库]CREATE DATABASE <数据库名>: --使用mysqladamin 创建数据库-- 使用普通用户,你可能需要特定的权限来创建或 ...

  10. Echars 参数说明

    theme = { // 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d ...