‘壹’ sql两表查询用什么命令
命令:
select
sql 数据库查询表格的命令:用SELECT 语句
用法:
查询某一列:SELECT 列名称 FROM 表名称
查询所有列:SELECT * FROM 表名称
注释:
SQL 语句对大小写不敏感。SELECT 等效于 select。
1、sql多表关联查询跟条件查询大同小异,主要是要知道表与表之前的关系很重要;
2、userinfo(用户信息表)表中有三个字段分别为:user_di(用户编号),user_name(用户姓名),user_dep(用户部门) 。(关系说明:userinfo表中的user_dep字段和dep表中的dep_id字段为主外键关系,userinfo表中的user_sex字段和sex表中的sex_id字段为主外键关系)。
‘贰’ SQL 查找两表中不同的数据
使用except函数,select * from B where (select count(1) from A where A.ID = B.ID) = 0.
方法一(推荐)
WITH C AS ( SELECT Name
FROM ConsumerCouponApply A
WHERE NOT EXISTS ( SELECT 1
FROM ConsumerCouponApply B
WHERE B.Name = A.Name
GROUP BY B.Name )
GROUP BY A.Name
)
SELECT COUNT(1)
FROM C
方法二
WITH C AS ( SELECT A.Name
FROM ConsumerCouponApply A
GROUP BY A.Name
EXCEPT
SELECT B.Name
FROM ConsumerCouponApply B
GROUP BY B.Name
)
SELECT COUNT(1)
FROM C
方法三
SELECT COUNT(A.Name)
FROM ConsumerCouponApply A
LEFT JOIN ConsumerCouponApply B ON A.Name = B.Name
WHERE B.ID IS NULL
(2)sql语句怎么查出两个表格扩展阅读:
高级查询运算词:
A: UNION 运算符:
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个
结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行
不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当
ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
‘叁’ 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怎么连接查询2个表
如果是外连接:select 列名1,列名2
from 表1 left outer join 表2
on 表1.id = 表2.id
如果散简是等值连接:select 列名1,列名2
from 表1,表2
where 表1.id = 表2.id
结构化查询语言简称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="你输入的名字"));
延展阅读:
A表字段stuid,stuname。
B表字段bid,stuid,score,coursename,status。
要用一条sql查出A表中所有记录的对应的stuid,max(score),coursename,status,并且status=1,sql语句要求跨数据库,不能使用rownum,top,limit等方言。
比如数据:
A
stuid stuname
11 zhangshan
22 lisi
B
bid sutid coursename scoure status
a 11 yuwen 66 1
b 11 shuxue 78 1
c 11 huaxue 95 0
最后要得到的数据是
stuid couresname scoure status
11 shuxue 78 1
22 null null null
‘陆’ 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="你输入的名字"));
‘柒’ 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怎么连接查询2个表
使用where语句进行查询,如:
select Emp.E_Id,Company.C_OraName from Emp,Company where Companey.C_Id=Emp.C_Id
但是往往会碰到比较复杂的语句,这时候使用where就不太合适了,其实SQL可以用较为直接的形式进行连接操作,可以凳滚在From子句中以直接的形式指出:
select top 10 E_Id,E_Name,C_Name
from
Emp join Companey on Companey.C_Id=Emp.C_Id
where
E_Id not in (select top 20 E_Id from Emp order by E_Id asc)
order by E_Id asc
//查询表Emp中第21到第30条数据以升序排列,其中C_Name来自于另一个表
(8)sql语句怎么查出两个表格扩展阅读:
SQL查询语句
1、获取当前数据库中的所有用户表select Name from sysobjects where xtype='u' and status>=0
2、获取某一个表的所宴粗裤有字段select name from syscolumns where id=object_id('表名')select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')
3、查看与某一个表相关的视图、存晌简储过程、函数select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
4、查看当前数据库中所有存储过程select name as 存储过程名称 from sysobjects where xtype='P'
5、查询用户创建的所有数据库select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
6、查询某一个表的字段和数据类型select column_name,data_type from information_schema.columnswhere table_name = '表名'