-
2018-12-28 12:34:58
要说MySQL的关联查询,首先先说一下笛卡尔积,
有两个集合 A = {1, 2},B = {1, 3},这两个集合的笛卡尔积 A * B就有四种情况, A * B = {(1,1), (1,3), (2,1),(2,3)}
笛卡尔积 1 2 1 3 2 1 2 3 假设现在有两张表,table_A和 table_B
table_A a_user_id a_name 1 aa 2 ab 3 ac table_B b_user_id b_name 1 ba 2 bb 4 bc 1、内关联查询,INNER JOIN
SELECT * FROM table_A INNER JOIN table_B ON a_user_id = b_user_id;
table_A INNER JOIN table_B 这样查询到的结果就是 表 table_A和table_B 的交集。也就是a_user_id 和 b_user_id 的交集 = 1,2;
2、左关联, LEFT JOIN
SELECT * FROM table_A LEFT JOIN table_B ON a_user_id = b_user_id;
table_A LEFT JOIN table_B 这样查询到的结果就是表 table_A 全部数据 和 table_B的交集。也就是a_user_id 和 b_user_id 的交集 = 1,2,3;
3、右关联, RIGHT JOIN
SELECT * FROM table_A RIGHT JOIN table_B ON a_user_id = b_user_id;
table_A RIGHT JOIN table_B 这样查询到的结果就是表 table_B全部数据和 table_A的交集。也就是a_user_id 和 b_user_id 的交集 = 1,2,4;
也可以用联合查询,就不能用ON了。
SELECT * FROM table_A, table_B WHERE a_user_id = b_user_id;
更多相关内容 -
多表关联查询之内关联,左关联
2019-08-22 17:55:24-- 内关联跟左关联只是改一下关键字inner—>left -- 内关联 select * from student_phone,phone where student_phone.phone=phone.id -- 1.内关联 (丢失不满足的记录条数) select * from student_phone a ...-- 同学持有的手机记录表
create table student_phone (
id int primary key,
stu_name varchar2(20),
phone varchar2(200)
)insert into student_phone values (1,'小红','华为 荣耀v9');
insert into student_phone values (2,'小军','荣耀v9(华为)');
insert into student_phone values (3,'小红','小米note2');
insert into student_phone values (4,'小平','小米 note2');
insert into student_phone values (5,'小平','小米 note2');
insert into student_phone values (6,'小云','小米 Note2');
insert into student_phone values (7,'小云','小米 NOTE2');
insert into student_phone values (8,'小云','小米 NOTE 2');commit
select phone,count(1) t from student_phone
group by phone order by t desc
---------------------------
drop table student_phonecreate table student_phone (
id int primary key,
stu_name varchar2(20),
phone int
)create table phone(
id int primary key,
phone_name varchar2(200)
)
insert into phone values(1,'荣耀v9(华为)');
insert into phone values(2,'小米 note2');
commitselect * from phone
select * from student_phoneinsert into student_phone values (1,'小红',1);
insert into student_phone values (2,'小军',1);
insert into student_phone values (3,'小红',2);
insert into student_phone values (4,'小平',2);
insert into student_phone values (5,'小平',2);
insert into student_phone values (6,'小云',2);
insert into student_phone values (7,'小云',2);
insert into student_phone values (8,'小云',2);
commitselect phone,count(1) t from student_phone
group by phone order by t desc可以通过phone=id
select * from student_phone,phone
where student_phone.phone=phone.id------------------------------
select a.stu_name,b.phone_name from student_phone a,phone b
where a.phone=b.id-------------------------------------
select phone_name,count(1) 总人数 from
(
select a.stu_name,b.phone_name from student_phone a,phone b
where a.phone=b.id
) ttttt
group by phone_name order by 总人数 desc----------------------------
-- 多表关联
-- 内关联跟左关联只是改一下关键字inner—>left
-- 内关联
select * from student_phone,phone
where student_phone.phone=phone.id
-- 1.内关联 (丢失不满足的记录条数)
select * from student_phone a
inner join
phone b on a.phone=b.id
--
insert into student_phone values (9,'小成',3);
commit
select * from phone
select * from student_phone
select a.stu_name,b.phone_name from student_phone a
inner join
phone b on a.phone=b.id
--测试
insert into phone values(3,'iphone8(美国总统专用)');
commit
delete from phone where id=3丢失了小成
-- 2.左关联
select a.stu_name,b.phone_name from student_phone a
left join
phone b on a.phone=b.id-- 改进一下
select a.stu_name,nvl(b.phone_name,'未知') from student_phone a
left join
phone b on a.phone=b.id--回归原始 (oracle专用+:即把丢失的+回来)
select a.stu_name,b.phone_name from student_phone a,phone b
where a.phone=b.id(+)--求什么手机最多人使用(排序)
--分组[后]最大值
select * from(
select phone,count(1) counts from student_phone group by phone
order by counts desc
)
where rownum=1
select * from(
select phone,count(1) counts from student_phone group by phone
order by counts asc
)
where rownum=1参考地址 https://www.cnblogs.com/yncx/p/6542708.html
-
SQL中left join(左关联)right join(右关联)join(内关联)的区别
2022-01-30 13:06:44二、left join(左关联) SELECT * FROM apps t1 LEFT JOIN `user` t2 ON t1.id=t2.id 三、right join(右关联) SELECT * FROM apps t1 RIGHT JOIN `user` t2 ON t1.id=t2.id 四、join(内关联) ...咋们来实战一下
一、先查出表两个表的数据
SELECT * FROM apps t1
SELECT * FROM user t2;
二、left join(左关联)
SELECT * FROM apps t1 LEFT JOIN `user` t2 ON t1.id=t2.id
三、right join(右关联)
SELECT * FROM apps t1 RIGHT JOIN `user` t2 ON t1.id=t2.id
四、join(内关联)
SELECT * FROM apps t1 JOIN `user` t2 ON t1.id=t2.id
-
mysql关联查询:左关联、右关联、内关联、全关联
2015-03-20 13:38:54mysql关联查询:左关联、右关联、内关联、全关联连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行。
连接可分为以下几类:
内连接。(典型的连接运算,使用像 = 或 <> 之类的比较运算符)。包括 相等连接和自然连接。
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。
外连接。外连接可以是 左向外连接、右向外连接或完整外部连接 。
在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:
LEFT JOIN 或 LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。 将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
FULL JOIN 或 FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接。 交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。
例如,下面的内连接检索与某个出版商居住在相同州和城市的作者:
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
AND a.state = p.state
ORDER BY a.au_lname ASC, a.au_fname ASC
FROM 子句中的表或视图可通过内连接或完整外部连接按任意顺序指定;但是,用左或右向外连接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外连接排列表的更多信息,请参见使用外连接。
例子:
a表 id name b表 id job parent_id
1 张3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在 关系
内连接
select a.*,b.* from a inner join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
左连接
select a.*,b.* from a left join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
3 王武 null
右连接
select a.*,b.* from a right join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4
完全连接
select a.*,b.* from a full join b on a.id=b.parent_id
结果是
1 张3 1 23 1
2 李四 2 34 2
null 3 34 4
3 王武 nullSQL codeDECLARE @TA TABLE (IDA INT,VA VARCHAR( 10)) DECLARE @TB TABLE (IDB INT,VB VARCHAR( 10)) INSERT INTO @TA SELECT 1, ' AA ' UNION SELECT 2, ' BC ' UNION SELECT 3, ' CCC ' INSERT INTO @TB SELECT 1, ' 2 ' UNION SELECT 3, ' 58 ' UNION SELECT 4, ' 67 ' -- 内联接简单写法 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A, @TB B WHERE A.IDA =B.IDB -- 内联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A INNER JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A JOIN @TB B ON A.IDA =B.IDB -- 左外联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT OUTER JOIN @TB B ON A.IDA =B.IDB -- 右外联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT OUTER JOIN @TB B ON A.IDA =B.IDB -- 完整外联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL JOIN @TB B ON A.IDA =B.IDB SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL OUTER JOIN @TB B ON A.IDA =B.IDB -- 交叉联接 SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A CROSS JOIN @TB B -- 自联接 SELECT A.IDA,A.VA,B.IDA,B.VA FROM @TA A, @TA B WHERE A.IDA =B.IDA + 1 查询分析器中执行: -- 建表table1,table2: create table table1(id int,name varchar( 10)) create table table2(id int,score int) insert into table1 select 1, ' lee ' insert into table1 select 2, ' zhang ' insert into table1 select 4, ' wang ' insert into table2 select 1, 90 insert into table2 select 2, 100 insert into table2 select 3, 70 如表 -- ----------------------------------------------- table1 |table2 | -- ----------------------------------------------- idname |idscore | 1lee | 190 | 2zhang | 2100 | 4wang | 370 | -- ----------------------------------------------- 以下均在查询分析器中执行 一、外连接 1.概念:包括左向外联接、右向外联接或完整外部联接 2.左连接: left join 或 left outer join ( 1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值( null)。 ( 2)sql语句 select * from table1 left join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 4wangNULLNULL -- ---------------------------- 注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示 3.右连接: right join 或 right outer join ( 1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 ( 2)sql语句 select * from table1 right join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 NULLNULL370 -- ---------------------------- 注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示 4.完整外部联接: full join 或 full outer join ( 1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 ( 2)sql语句 select * from table1 full join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 4wangNULLNULL NULLNULL370 -- ---------------------------- 注释:返回左右连接的和(见上左、右连接) 二、内连接 1.概念:内联接是用比较运算符比较要联接列的值的联接 2.内连接: join 或 inner join 3.sql语句 select * from table1 join table2 on table1.id =table2.id -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang2100 -- ---------------------------- 注释:只返回符合条件的table1和table2的列 4.等价(与下列执行效果相同) A: select a. *,b. * from table1 a,table2 b where a.id =b.id B: select * from table1 cross join table2 where table1.id =table2.id (注: cross join后加条件只能用where,不能用on) 三、交叉连接(完全) 1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3 * 3 =9条记录) 2.交叉连接: cross join (不带条件where...) 3.sql语句 select * from table1 cross join table2 -- -----------结果------------- idnameidscore -- ---------------------------- 1lee190 2zhang190 4wang190 1lee2100 2zhang2100 4wang2100 1lee370 2zhang370 4wang370 -- ---------------------------- 注释:返回3 * 3 =9条记录,即笛卡尔积 4.等价(与下列执行效果相同) A: select * from table1,table2 -
oracle 内关联,左外关联,右外关联,全外关联
2020-05-05 18:12:05创建表一USER_TABLE,表二WORKS_LIST CREATE TABLE USER_TABLE( USER_ID NUMBER(10), USER_NAME VARCHAR2(10), USER_WORKS VARCHAR2(20) ); CREATE TABLE WORKS_LIST( USER_NAME VARCHAR2(10), ... -
请问什么是左关联,右关联,内关联(数据库)
2021-01-26 23:33:101、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现2、外连接: 包括(1)左外连接(左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制)3、自连接(连接发生在一张基表内)select... -
MYSQL 左关联,右关联,内关联
2016-09-23 10:55:24两张表, user,字段,user_id,email,name deal,字段deal_id,user_id,deal_name 对应关系,user.user_id ...左关联: select u.*,d.* from user as u left join deal as d on d.user_id = u.user_id; 右关联: select u -
由浅入深sql语句(外键,左关联,右关联,全关联)
2009-05-19 16:11:08由浅入深sql语句(外键,左关联,右关联,全关联) 内连接,外连接 -
用java写的左关联右关联join类
2019-04-18 17:06:48我自己用java写的左关联,右关联操作,关联效率高,使用方便 -
多表关联——内连接和外连接
2021-05-14 17:06:371、内关联 2、外关联之左关联 3、多表关联逻辑演示 4、分析多表关联中出现的数据确实、数据重复问题 -
SpringBoot JPA 表关联查询实例
2020-08-30 21:31:21本篇文章主要介绍了SpringBoot JPA 表关联查询实例,使用JPA原生的findBy语句实现,具有一定的参考价值,有兴趣的可以了解一下。 -
MySQL 多表关联一对多查询实现取最新一条数据的方法示例
2021-01-19 21:46:48由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准; 数据测试初始化SQL脚本 DROP TABLE IF EXIST -
mysql的内链接和左右连接的区别
2017-01-04 14:43:16mysql中内连接的数据记录中,不存在字段为null的情况,可以简单的认为,内连接就是左连接或者右连接的结果中剔除所有字段为null记录后的结果。另外mysql 不支持full join 2.左连接 mysql中左连接就是选择一个主表... -
mysql关联查询
2018-08-02 17:26:13mysql关联,左关联,右关联,内连接,外连接,交叉连接 -
利用UITableView实现左右两栏滚动的关联的Demo
2015-01-09 14:49:31左栏为大项列表,右栏为没项目的子列表。实现了选择左栏,右栏滚动到对应列表;滚动右栏,左栏大项的选中状态对应改变。 -
sql中的左右关联、全关联、自关联
2018-09-06 09:27:15left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例... -
多表关联和左、右连接,内连接
2014-06-16 17:47:40无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,只要元素值和元素个数相同则两个集合相等。 唯一性:指集合内部元素不存在值相等的元素。 上图所示集合是错误的,因为有2个‘3’违背了唯一... -
SQL中关于Left Join转为Inner Join的问题,即左关联转为内关联的问题
2019-03-07 17:03:00从下面的实验结果很容易看出,在有左关联的查询语句中,只要有 WHERE 的过滤条件,那么该语句将被强制转为内关联。 一、创建表 演示使用,随便创建两张表 --班级表 CREATE TABLE T_CLASS( class_id NUMBER not null... -
数据库多表关联查询效率问题解决方案
2021-01-21 14:36:54近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下: 1、软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字段多些,... -
mysql左右关联,内关联,having用法
2017-11-03 14:19:56两张表, user,字段,user_id,email,name deal,字段deal_id,user_id,deal_name 对应关系,user.user_id ...左关联: select u.*,d.* from user as u left join deal as d on d.user_id = u.user_id; 右关联: select u.*,d.* -
图解SQL多表关联查询(内连接,左连接,全连接)[整理].pdf
2021-10-14 02:21:03图解SQL多表关联查询(内连接,左连接,全连接)[整理].pdf -
Mysql中外连接,内连接,左连接,右连接的区别
2020-09-16 16:00:14外连接2.1左连接2.2右连接3. 内连接 1. 前言 相信大家一定都做过多表的连表查询,并且这其中的查询方式也比较多样. 可能主要就是下面这几种方式: 直接通过where语句将重叠的字段进行匹配就比如下面这种 select *... -
vue实现form表单与table表格的数据关联功能示例
2020-10-17 11:30:34主要介绍了vue实现form表单与table表格的数据关联功能,涉及vue.js表单事件响应及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下 -
MySql-关联查询(内连接,左连接,右连接)
2021-06-01 19:00:06转载MySQL 基础知识笔记 第03期:子查询和关联查询 (qq.com) -
left join(左关联)、right join(右关联)、inner join(自关联)的区别
2018-05-25 15:41:06用一张图说明三者的区别: 总结:left join(左联接) 返回包括左表中的所有记录和右表中关联字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中关联字段相等的记录inner join(等值连接) 只返回两... -
oracle(+)左关联
2021-05-02 02:53:34表示左关联 SELECT a.policyno, a.agentcode, b.agentname FROM prpcmain a, prpdagent b WHERE a.agentcode = b.agentcode(+); 相当于: SELECT a.policyno, a.agentcode, b.agentname FROM prpcmain a LEFT JOIN ... -
sql:普通关联查询和 左连接右连接的区别
2021-04-19 10:13:15文章目录系列文章目录普通关联查询和 左连接由连接的区别 普通关联查询和 左连接由连接的区别 最近发现一段sql 就是普通的关联查询,在项目需求中还挺实用的,我就在想为什么不用左连接/右连接之类的呢,以前不大多... -
sql语句之关联查询,内连接,左连接,右链接,全连接(左右全皆属于外连接)
2021-04-21 17:59:09这几个连接傻傻分不清楚,直接上图再解释 a表 b表数据分别如下 内连接,inner可以省略 内连接:只有匹配的数据才会展示出来 select * from tjh.dbo...左右连接 a表左连接b表 等于 b表右连接a表 左连接:以左边为基准 -
Mysql左关联查询,对应关联字段模糊关联
2021-06-29 17:00:48Mysql左关联模糊查询 两个表关联查询,但是只要对应字段模糊查询,比如a能关联a1 表a 表b 查询语句: SELECT a.nameA, b.nameB FROM a LEFT JOIN b on instr(b.nameB,a.nameA)>0 查询结果; -
论文研究-一种飞行数据的模糊关联规则挖掘算法.pdf
2019-07-22 18:36:40提出利用模糊属性集和关联规则的支持度获得高效率的关联规则增量更新挖掘的方法。首先对输入数据集进行模糊离散化,确定相应的模糊属性集,模糊支持数和各属性原先的模糊聚类中心;然后检查是否满足最小支持度条件,...