㈠ 连接两表查询结果的sql语句
如果只查询两个表有对应关系的资料,则用内连接:
select
*
from
table1
inner
join
table2
on
table1.id=table2.id;
如果查询表1中有的资料,表2中若有则也显示,则使用左连接:
select
*
from
table1
left
join
table2
on
table1.id=table2.id;
不管两个表是否有关联,所有资料都显示,则用外链接:
selecg
*
from
table1
outer
join
table2
on
table1.id=table2.id;
㈡ SQL语句两表联查
可以用谓词或联结实现:
连接实现:
select * from b join a on b.id=a.id where a.b=21
联结实现的条件是两表id来自同一值域,表示意义相同.在连接时其实两可以作成一个表的:
也就是
id,a.b,a.c,b.b.b.c
但由于空值的问题,导致了部分依赖所以才会拆分成两个表的.
使用谓词实现:
select * from b where id in (select id from a where a.b=21)
这个可以实现两表id来自同一值域,但表示意义不同的情况.也就是说两表中的id有无关性.
相比较而言,连接的方式更快一些,但这种情况是两表来自同一值域,且意义相同,如果不是这种情况,可能得不到你正确的值的.而使用谓词不管意义是否相同,都可以得到正确的值.
玩数据库必须知道这两个表是否具有相关性,也就是设计时的意义,否则优化词句什么的都没有办法去做的!
有几种方式可以实现你的这个需求.
1. 使用表 关联
SELECT * FROM 表2 JOIN 表1 ON ( 表2.ID = 表1.列1 );
2. 使用 IN
SELECT * FROM 表2 WHERE ID IN ( SELECT 列1 FROM 表1);
3.使用 EXISTS
SELECT * FROM 表2
WHERE EXISTS ( SELECT 1 FROM 表1 WHERE 表2.ID = 表1.列1 );
select * from t2 left join t1 on t2.ID = t1.列1 where t1需要啥条件 and t2需要啥条件
select * from 表2 where 某列 in (select 列1 from 表1) and id=1
㈢ SQL LEFT JOIN
left join 就是左连接,class是主表,content是从表,左连接就是class显示为主,无论左边有没关联其他信息,都显示出来,就像牧马人(主)和马(从)的关系,牧马人可以有很多匹马,也可以有很少马,也可以没有马,没有马就不是牧马人了吗?这太变扭了!楼主还可以试下用right join来连接两表!
㈣ SQL左连接查询
select * from a left join b on a.id=b.id left join c on a.id=c.id where c.id=XX;
㈤ sql 多表 左右多次链接
为什么你那么喜欢用left join?、
我们首先来看表表间的关系,看看需不需要left join。
按照你的表格意思?
t_emp.name='张三'
的入职时间,团队名称和团队所属部门名称。
一个员工,不管何时入职都有一个编号,和入职时间的,都有所属团队和所属部门。
应该不会存在一个员工,没有入职时间,没有编号,不存在所属团队和部门的情况吧。
所以个人感觉觉得你这里的多次左右连接其实是增加了查询的成本,很多应该是没有必要的,直接用hash连接应该就可以。。
当然我并不知道你的业务结构,可能你的设计没问题,如果这样的话,上面的就当我没说。
SELECT t_emp.name 员工名字,t_hr.Indate 入职日期,t_dept.name 团队名称,dept.name 部门名称 from t_emp,t_hr,t_dept,t_dept dept where t_emp.name='张三' and t_emp.H_num=t_hr.num and t_emp.d_num=t_dept.num and t_dept.d_num=dept.num
其实你上面的查询也可以,再套一层就行了,你已经查到所属部门了,在你的结果中加一个t_dept.d_num,然后外面再套一层,让这个t_dept.d_num=t_dept.num就能找到所属部门了。
㈥ 如何在一张表上两次用左连接同一张表
表一是表二的子集,有必要用左连接吗?直接等连就行了,用个union全解决了
select teacher_id as id,people_name as name
from 表1,表2
where
表1.teacher_id=表2.people_id
union select student_id as id,people_name as name
from 表1,表2
where
表1.student_id=表2.people_id
㈦ SQL语句中两个表的连接
1、打开数据库管理工具,在数据库中新建两个表用于测试,这里,两个表的表结构要一样,分别建立TEST 和 TEST1。
㈧ sql语句如何两表连查
多表查询分为
内、外连接
外连接分为左连接(left
join
或left
outer
join)、右连接(right
join
或者
right
outer
join)、和完整外部连接
(full
join
或者
full
outer
join)
左连接(left
join
或
left
outer
join)的结果就是left
join子句中的左表的所有行,而不仅仅是链接列所匹配的行,如果左表中的某行在右表中没有匹配,则在相关联的结果行中右表的所有选择列均为空值(NULL)
SQL语法select
*
from
table1
left
join
table2
on
table1.条件列名
=
table2.条件列名;
注释:
显示的就是table1中的所有列和能匹配的列
右连接(right
join
或
right
outer
join
)在这里不做多说这左连接很象但是是相反的,只说一下语法
select
*from
table1
right
join
table2
on
table1.
条件列=
table2.条件列
完全外部连接(full
join
或
full
outer
join)
显示左右表中的所有行,当某一个表中没有匹配的行时,则另一个表的选择列表列包含空值(NULL)如果有则显示全部数据
SQL语法:
select
*from
table1
full
join
table2
on
table1.条件列名=
table2.条件列名
内连接:
概念:内连接就是用比较运算符比较要用连接列的值的连接
内连接(join
或者inner
join
)
SQL语法:
select
*fron
table1
join
table2
on
table1.条件列名
=
table2.条件列名
返回符合匹配条件的两表列
等价于:
select
A*
,B*
from
table1
A
,table2
B
where
A.条件列名
=B.条件列名
select
*form
table1
cross
join
table2
where
table1.条件列名
=
table2.条件列名(注:
Cross
join
后面不能跟on
只能用where)
交叉连接(完全)
概念:没有用where子句的交叉连接将产生连接所涉及的笛卡尔积第一个表的行数乘以第二个表的行数等于笛卡尔积和结果集的大小
交叉连接:
Cross
join(不带条件where,如果带返回或显示的是匹配的行数)
SQL语法:
select
*from
table1
cross
join
table2
如果有条件(where)
select
*
from
table1
cross
join
table2
where
table1.
条件列名=
table2.条件列名
等价于
select
*from
table1,table2
(不带where)
㈨ sql中这两个左连接的sql语句代表的意思是一样的么
不一样,left jion是左表为主体,把右表按照on后面的条件联接到左表中去,因为是以左表为主的,所以当遇到右表中无匹配的数据时,左表的数据照样输出,就以你的sql语句为例子,
select * from T_student s left join T_class c on s.classId = c.classId
如果T_student 中有一些数据的classId在T_class中是没有的,那么它还是会继续输出
㈩ sql联合查询语句(两张表)
sql联合查询语句(两张表)是:
select A.ID,A.VALUE,A.TYPE,A.NAME,B.KEY,B.ID,B.VALUE,B.NAME
min(VALUE),max(VALUE) from A left join B on A.ID = B.ID
where B.NAME="你输入的名字"
and B.VALUE > (select min(VALUE) from B where NAME="你输入的名字"))
and B.VALUE < (select min(VALUE) from B where NAME="你输入的名字"));