mysql多张表join_mysql数据库多表各种join用法

在数据库查询中,往往会需要查询多个表的数据,比如查询会员信息同时查询关于这个会员的订单信息,如果分语句查询的话,效率会很低,就需要用到join关键字来连表查询了

下面是例子分析

会员表:user

user_id  user_name

1      张三

2      李四

3      王老五

订单表:order

order_id   user_id    order_name

1        3         机械键盘套装

2        1         鼠标套装

3        1         机械键盘套装

4        5         机械键盘套装

5        3         显卡

6        3         散热器

如果我想查询会员名张三的订单数据

平常的方法是

先查询张三的id

SELECT user_id FROM user WHERE user_name ='张三' LIMIT 1;

获取到张三的id为1之后,再通过会员id来查询订单

SELECT * FROM order WHERE user_id = 1;

如果用join连接的话,直接一条语句就可以搞定

SELECT o.* FROM user AS u LEFT JOIN order AS o ON o.user_id=u.user_id WHERE u.user_name='张三';

这样就可以直接查询到张三的订单信息了

join分

left join,返回左表所有符合条件的记录和右表连接相等的记录

inner join,只返回两个表中联结字段相等的行

right join,返回右表所有符合条件的记录和左表连接相等的记录

语法为

FROM table1 LEFT JOIN(INNEER  RIGHT) table2 ON table1.field1 compopr table2.field2说明:table1, table2参数用于指定要将记录组合的表的名称。field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。compopr参数指定关系比较运算符:"=", "", "<=", ">=" 或 "<>"。如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。

下面是几个例子

INNER JOIN

SELECT o.* FROM user AS u INNER JOIN order AS o ON o.user_id=u.user_id WHERE u.user_name='李四';

查询结果是空的

因为inner join 只返回连接相等的行,order表是没有关于李四的订单记录的

LEFT JOIN

SELECT o.* FROM user AS u INNER JOIN order AS o ON o.user_id=u.user_id WHERE u.user_name='李四';

查询结果为

user_id  user_name

1      张三

因为order表没有内容,所以只返回左表的数据

RIGHT JOIN 和LEFT JOIN相反

例如我想查询买了机械键盘套装的会员有多少

SELECT o.* FROM user AS u INNER JOIN order AS o ON o.user_id=u.user_id WHERE u.order_name='机械键盘套装';

查询结果为

user_id  user_name  order_id   user_id      order_name

1      张三       1        3         机械键盘套装

1      张三      3        1         机械键盘套装

4        5        机械键盘套装

因为会员id 5 数据不存在,所以只返回订单表的内容

这就是 mysql join区别和用法了

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的提问!如果您想要在Flink中获取MySQL张表的信息,可以按照如下步骤进行: 1. 首先需要在Flink中使用JDBC连接器连接MySQL数据库,并创建一个JDBC输入源,以便从MySQL中读取数据。 2. 然后可以通过Flink的Table API或SQL API将多张表的数据进行连接或者关联,从而得到您需要的数据。 3. 最后可以使用自定义的Sink将数据写入MySQL中。下面就是一个简单的Java代码示例,可以帮助您实现该功能: ``` public class FlinkMySQLSink { public static void main(String[] args) throws Exception { // set up the execution environment StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // set up JDBC connection options String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "password"; String driverName = "com.mysql.jdbc.Driver"; // create a JDBC input source to read multiple tables from MySQL JdbcInputFormat jdbcInputFormat = JdbcInputFormat.buildJdbcInputFormat() .setDrivername(driverName) .setDBUrl(url) .setUsername(username) .setPassword(password) .setQuery("SELECT * FROM table1; SELECT * FROM table2;") .finish(); // create a data stream from the JDBC input source DataStream<Tuple2<String, String>> inputDataStream = env.createInput(jdbcInputFormat); // use Table API or SQL API to join or combine multiple tables Table table = inputDataStream .map(new MapFunction<Tuple2<String, String>, Row>() { public Row map(Tuple2<String, String> value) throws Exception { return Row.of(value.f0, value.f1); } }) .toTable(new TableSchema(new String[]{"column1", "column2"}, new TypeInformation[]{Types.STRING, Types.STRING})); // create a custom Sink to write data back to MySQL JDBCOutputFormat jdbcOutputFormat = JDBCOutputFormat.buildJDBCOutputFormat() .setDrivername(driverName) .setDBUrl(url) .setUsername(username) .setPassword(password) .setQuery("INSERT INTO result_table (column1, column2) VALUES (?, ?)") .finish(); // write the data stream to the custom Sink table.writeToSink(jdbcOutputFormat); // execute the Flink job env.execute("Flink MySQL Sink Example"); } } ``` 在这个示例中,我们首先设置了JDBC连接器所需的参数,然后使用JdbcInputFormat创建了一个JDBC输入源,该源可以从MySQL中读取多个表的数据。 接下来,我们使用Table API或SQL API将多个表的数据连接或者关联起来,并生成一个包含所需数据的Table对象。 最后,我们使用自定义的JDBCOutputFormat创建一个Sink,将Table中的数据写回到MySQL中。在这个Sink中,我们需要指定要写入哪个表,以及如何将数据映射到表中的列。 希望这个示例可以帮助您实现获取MySQL张表信息的功能!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值