⑴ sql语句 INNER JOIN 后如何降序排列
SELECT tbscore.username,tbscore.score, tbuser.nianji, tbuser.banji,tbuser.tname FROM tbscore INNER JOIN tbuser ON tbscore.username = tbuser.username where paperno="&id
order by tbscore.score desc
直接加在sql最后就可以了
⑵ 两张结构相同的表合并到一起的sql语句
这个问题首先必须基于table1,table2,table3这3张表各自的time字段无重复值,否则每个有重复的时间,都可能会组合成n多种组合(假如这3张表每一张都有两条时间为2012-07-31
01:00:00的记录,那么单单就“2012-07-31
01:00:00”这个时间就可以组合成2x2x2=8中组合,重复愈多出现的组合越多,大的重复记录,因互相乘积的原因,很容易会导致出现天文数字种组合。它一方面会导致效率低下,另一方面还会出现在这些组合中到底取舍那条记录的问题,有时候单凭sql是很难解决。因此如要实现楼主的要求,应确保各自表中无重复时间记录,否则合并结果将难令人满意,楼主可以测试各种情况和代码以证实的本人说法。
先用union操作符求出3张表唯一的时间列表,该子查询表取别名t,然后分别用
t
与其它3张表基于time字段进行left
join,最后求出最终结果集。
为了便于理解该sql语句,我对那3张表未使用表别名,代码字符数看起来会比较多。
select
table1.[value]
as
value1,table2.[value]
as
value2,table3.[value]
as
value3,t.[time]
from
(((select
[time]
from
table1
union
select
[time]
from
table2
union
select
[time]
from
table3)
t
left
join
table1
on
t.[time]=table1.[time])
left
join
table2
on
t.[time]=table2.[time])
left
join
table3
on
t.[time]=table3.[time]
order
by
t.[time]
注:基于单独表内无重复时间记录。代码已测试通过,如果楼主有超过3张以上相同的表,照套上面写法即可,
如果4张以上的表相关sql代码不知如何写,可以向我发追问。
⑶ 请教sql200数据库 3个表合并成为一个表语句
用下面这个语句就行了,Table1-3的表名改成你自己的
SELECT
[Table3].[mname],
[temp1].[no],
[temp2].[rmb]
FROM
[Table3]
INNER
JOIN
(SELECT
[id],
SUM([no])
AS
[NO]
FROM
[Table1]
GROUP
BY
[id])
AS
[Temp1]
ON
[Table3].[id]
=
[Temp1].[id]
INNER
JOIN
(SELECT
[id],
SUM([rmb])
AS
[rmb]
FROM
[Table2]
GROUP
BY
[id])
AS
[Temp2]
ON
[Table3].[id]
=
[Temp2].[id]
ORDER
BY
[Table3].[mname]
⑷ SQL数据库关联是什么怎么用
使用外联接
仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回
FROM
子句中提到的至少一个表或视图的所有行,只要这些行符合任何
WHERE
或
HAVING
搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。
Microsoft®
SQL
Server™
2000
对在
FROM
子句中指定的外联接使用以下
SQL-92
关键字:
LEFT
OUTER
JOIN
或
LEFT
JOIN
RIGHT
OUTER
JOIN
或
RIGHT
JOIN
FULL
OUTER
JOIN
或
FULL
JOIN
SQL
Server
支持
SQL-92
外联接语法,以及在
WHERE
子句中使用
*=
和
=*
运算符指定外联接的旧式语法。由于
SQL-92
语法不容易产生歧义,而旧式
Transact-SQL
外联接有时会产生歧义,因此建议使用
SQL-92
语法。
使用左向外联接
假设在
city
列上联接
authors
表和
publishers
表。结果只显示在出版商所在城市居住的作者(本例中为
Abraham
Bennet
和
Cheryl
Carson)。
若要在结果中包括所有的作者,而不管出版商是否住在同一个城市,请使用
SQL-92
左向外联接。下面是
Transact-SQL
左向外联接的查询和结果:
USE
pubs
SELECT
a.au_fname,
a.au_lname,
p.pub_name
FROM
authors
a
LEFT
OUTER
JOIN
publishers
p
ON
a.city
=
p.city
ORDER
BY
p.pub_name
ASC,
a.au_lname
ASC,
a.au_fname
ASC
⑸ 浅谈,SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别
(8)SELECT(9)DISTINCT(11)(1)FROM[left_table](3)JOIN(2)ON(4)WHERE(5)GROUPBY(6)WITH(7)HAVING(10)ORDERBY逻辑查询处理阶段简介FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesianproct)(交叉联接),生成虚拟表VT1ON:
⑹ SQL语句中
USE Northwind ---------调用数据库 Northwind
GO
SELECT P.ProctID S.SupplierID S.CompanyName -------查询表中的字段
FROM Suppliers AS S JOIN Procts AS P-------------将两张表用s 和p 简称代替
ON (S.SuppliersID = P.SuppliersID) -------------以下都是判断条件
WHERE P.UintPrice>$10
AND S.CompanyName LIKE N'F%
⑺ 用sql语句关联A,B两张表,要获取到B中的一个字段,但是这个字段A表中没有,怎么写,求解。
selectselect__conditions[wheresearch_conditions][orderbyorder_expression]
⑻ SQL order by ID desc/asc加一个排序的字段解决查询慢问题
解决方法就是在order
by
ID
desc再加一个排序的字段,这样子可能会把速度提高很多。再加止排序的字段因查询而异了
如表
复制代码
代码如下:
CREATE
TABLE
[dbo].[CMPP_SendCentre]
(
[id]
[int]
IDENTITY
(1,
1)
NOT
NULL
,
[SendType]
[varchar]
(10)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[SendDate]
[datetime]
NOT
NULL
,
[Port]
[varchar]
(50)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[Service_ID]
[varchar]
(20)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[FeeType]
[varchar]
(2)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[FeeCode]
[varchar]
(6)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[Msg_Content]
[varchar]
(1024)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[SendCount]
[int]
NOT
NULL
,
[SucceedCount]
[int]
NOT
NULL
)
ON
[PRIMARY]
GO
CREATE
TABLE
[dbo].[CMPP_SendCentreMo]
(
[id]
[int]
IDENTITY
(1,
1)
NOT
NULL
,
[SendCentreID]
[int]
NOT
NULL
,
[Mo]
[varchar]
(20)
COLLATE
Chinese_PRC_CI_AS
NOT
NULL
,
[Stat]
[varchar]
(10)
COLLATE
Chinese_PRC_CI_AS
NULL
)
ON
[PRIMARY]
GO
CMPP_SendCentreMo.SendCentreID
与CMPP_SendCentre.ID成外建关系
于是建了一个视图
复制代码
代码如下:
CREATE
VIEW
dbo.ViewCMPP_SendCentreMo
AS
SELECT
dbo.CMPP_SendCentreMo.id,
dbo.CMPP_SendCentreMo.SendCentreID,
dbo.CMPP_SendCentreMo.Mo,
dbo.CMPP_SendCentreMo.Stat,
dbo.CMPP_SendCentre.SendType,
dbo.CMPP_SendCentre.SendDate,
dbo.CMPP_SendCentre.Port,
dbo.CMPP_SendCentre.Service_ID,
case
dbo.CMPP_SendCentre.FeeType
when
'01'
then
'免费'
when
'02'
then
'点播'
else
'包月'
end
as
FeeType,
cast(dbo.CMPP_SendCentre.FeeCode
as
smallint)
as
FeeCode,
dbo.CMPP_SendCentre.Msg_Content
FROM
dbo.CMPP_SendCentre
INNER
JOIN
dbo.CMPP_SendCentreMo
ON
dbo.CMPP_SendCentre.id
=
dbo.CMPP_SendCentreMo.SendCentreID
一开始的查询语句为
复制代码
代码如下:
select
top
6*from
[ViewCMPP_SendCentreMo]
where
SendType
=
'扣费'
order
by
id
desc
发现非常的慢
经过了解,原因是order
by
id
desc/asc的查询是一行一行的找数据,所以非常的慢
于是改成了
复制代码
代码如下:
select
top
6*from
[ViewCMPP_SendCentreMo]
where
SendType
=
'扣费'
order
by
SendCentreID
desc,
id
desc
查询就非常的快了
⑼ SQL表join联合处理问题
一个是外连接,另一个是内连接,由于a或a1表中no,name,tel可能会出现null的情况,所以第一个select语句才会进行判断,从而选择不是null的字段,而第二个表达式没有进行判断,如果出现null的情况,那么可能就会出错,也就是不能显示含有null的那一行
⑽ SQL Oracle 查询数据,汇总数据 oracle数据查询
假设存储这些数据的表名为cal_amount,sunmber表示序号,amount表示数量,sdate表示日期,以下语句为一点拙见,望抛砖引玉。。。
with
cal_amount_temp
as
(select
c.sunmber
+
1
as
sunmber,
c.amount,
c.sdate
as
sdate
from
cal_amount
c)
select
a.sunmber,
a.amount
+
nvl(b.amount,
0)
as
amount,
a.sdate
from
cal_amount
a
left
join
cal_amount_temp
b
on
a.sunmber
=
b.sunmber
order
by
a.sunmber
但是,如果说“数量这一列为当天数量加上前一天的数量”,那么楼主结果中的最后一行为什么是22,而不是14?