mysql主表查询的where 条件怎么写查询另一个表的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql主表查询的where 条件怎么写查询另一个表的数据?相关的知识,希望对你有一定的参考价值。

mysql主表查询的where 条件怎么写查询另一个表的数据?例如:select * from user where 在这里写查询另一个表,怎么写?;

参考技术A 第一种 exists与not exists
select * from table1 t1 where exists(select columnName from table2 t2 where t1.columnName2 = t2.columnName2)
第二种,in,not in的用法
select * from table1 where columnName in(select columnName from table2 where columnNane = 'condition')
第三种,any,all与比较运算的用法
-- 与任意一个比较返回真
select * from table1 where columnName > any(select columnName from table2 where columnNane = 'condition')
-- 与所有的值比较返回真
select * from table1 where columnName > all(select columnName from table2 where columnNane = 'condition')追问

这些都是子查询吧!

哪一种对数据库优化好一点?

参考技术B 后面写一个 字段 in (select from 另一个表)追问

这个是子查询

子查询对数据库优化不好吧

追答

那就用连接查询,你现在不就是要一个子查询吗?
select A.* from user A join B where A.field =B.field

追问

连接查询用不了,框架不支持

是不是 where 条件写查询另一个表的数据只能用子查询??

追答

是的

本回答被提问者采纳

MySQL 多表查询

多表查询的分类

  • 内连接
    • 隐式内连接
    • 显式内连接
  • 外连接
    • 左外连接
    • 右外连接

 

 

内连接

用左边表的记录去匹配右边表的记录,如果符合条件的则显示。如:从表.外键=主表.主键

 

隐式内连接

隐式内连接:看不到 JOIN 关键字,条件使用 WHERE 指定

 SELECT 字段名 FROM 左表, 右表 WHERE 条件

如:

创建一个学生个人信息表

CREATE TABLE students(
    Id INT(30),
    Name VARCHAR(10),
    Age INT(4),
    Gender VARCHAR(25),
    PRIMARY KEY(Id)
);

创建一个学习成绩表

CREATE TABLE course(
    Id INT(30),
     Java INT(5),
     Python INT(5),
     MySQL INT(5),
     Hadoop INT(5),
     C INT(5),
     PHP INT(5),
     Linux INT(5),
     English INT(5),
     Math INT(5),
     CONSTRAINT id_course FOREIGN KEY(Id) REFERENCES students(Id)
);

学习成绩表的外键连接学生个人信息表的主键。这个时候,如果我们想要查询学生的Java成绩,

SELECT name, Java FROM students, course WHERE course.Id = students.Id;

 

显式内连接

显示内连接:使用 INNER JOIN ... ON 语句, 可以省略 INNER

SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件

如:

还是上面创建的students表和course表

SELECT * FROM students INNER JOIN course c ON students.Id = c.Id;

查询students表的所有信息,按ID插入course表的数据,一并查询出来。

 

外连接

左外连接

左外连接:使用 LEFT OUTER JOIN ... ON,OUTER 可以省略

SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件

用左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示 NULL 。可以理解为:在内连接的基础上保证左表的数据全部显示。

 

右外连接

右外连接:使用 RIGHT OUTER JOIN ... ON,OUTER 可以省略

SELECT 字段名 FROM 左表 RIGHT [OUTER ] JOIN 右表 ON 条件

用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示 NULL。可以理解为:在内连接的基础上保证右表的数据全部显示。

 

 

以上是关于mysql主表查询的where 条件怎么写查询另一个表的数据?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 根据子表数量查询主表

mysql SQL语句如何将sum()放在where后面做条件怎么写呢?

多个表关联表如何查询?

MySQL数据库里面有个字段是datetime类型的,我想要根据这个字段查询今天的数据,where条件怎么写啊?

SQL语句where多条件查询怎么写?

MySQL 多表查询