⑴ 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?