Ⅰ sql語句中交叉報表的使用
DECLARE@sNVARCHAR(4000)
SELECT@s=ISNULL(@s+',','')+QUOTENAME(標志)
FROM表
---行列轉換
DECLARE@SQLNVARCHAR(4000)
SELECT@SQL='
SELECT*
FROM表(帶有轉換標志)PIVOT(SUM(實際需要欄位)
for[標志]in('+@s+')
)A'
EXEC(@SQL)
Ⅱ 關於SQL中的交叉連接到底有什麼實際的用途呢剛剛學習資料庫
交叉連接一般是在一定的限定條件下查詢兩張表表中的數據,比如通過部門ID去查詢對應的員工集合,這樣就需要用到交叉連接。
Ⅲ SQL 交叉查詢
再把另外的表欄位給出來就更好了,
如果不合適就自己改吧,最關鍵的一點是要將成績表旋轉,列轉行。
=================
如果這樣的話,這個查詢就用不上科目表了,如下即可
select
a.科目,a.代課教師,sum(c.成績)
總分,avg(c.成績)
均分,
sum(case
when
c.成績>=60
then
1
else
0
end)/count(*)
及格率,
sum(case
when
c.成績>=80
then
1
else
0
end)/count(*)
優秀率
from
代課教師表
a,
(select
'語文'
as
科目,語文
as
成績
from
成績表
union
all
select
'數學'
as
科目,數學
as
成績
from
成績表
union
all
select
'英語'
as
科目,英語
as
成績
from
成績表)
c
where
a.科目名稱=c.科目
group
by
a.科目,a.代課教師
Ⅳ SQL中的內連接外連接和交叉連接是什麼意思
內連接又分為等值連接、自然連接和不等連接三種。
外連接分為左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行。
交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
連接操作中的ON (join_condition) 子句指出連接條件,它由被連接表中的列和比較運算符、邏輯運算符等構成。
無論哪種連接都不能對text、ntext和image數據類型列進行直接連接,但可以對這三種列進行間接連接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一) 內連接
內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。內連接分三種:
1、等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
2、不等連接: 在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!& lt;和<>。
3、自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重復列。
例,下面使用等值連接列出authors和publishers表中位於同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然連接,在選擇列表中刪除authors 和publishers 表中重復列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二) 外連接
內連接時,返回查詢結果集合中的僅是符合查詢條件( WHERE 搜索條件或 HAVING 條件)和連接條件的行。而採用外連接時,它返回到查詢結果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時)、右表(右外連接時)或兩個邊接表(全外連接)中的所有數據行。
如下面使用左外連接將論壇內容和作者信息連接起來:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外連接將city表中的所有作者以及user表中的所有作者,以及他們所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三) 交叉連接
交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等於6*8=48 行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
介紹了表連接,更確切的說是inner joins內連接.
內連接僅選出兩張表中互相匹配的記錄.因此,這會導致有時我們需要的記錄沒有包含進來。
為更好的理解這個概念,我們介紹兩個表作演示。蘇格蘭議會中的政黨表(party)和議員表 (msp)。
party(Code,Name,Leader)
Code: 政黨代碼
Name: 政黨名稱
Leader: 政黨領袖
msp(Name,Party,Constituency)
Name: 議員名
Party: 議員所在政黨代碼
Constituency: 選區
Ⅳ sqlserver 的交叉連接和內部連接有什麼區別嗎
假設有兩張表,A表和B表,A表有m條記錄,x個屬性;B表有n條記錄,y個屬性
交叉連接(cross join):A表和B表交叉連接就是,A表中的每條記錄都和B表的的記錄進行連接。A表和B表交叉最後會得到一個表會有m×n條記錄,屬性會有x+y個。而且這種連接比較消耗資源。
內部連接: 它是交叉連接的一個變形,內部連接一般都會有一個連接條件,只有滿足條件的連接才會被選中。如果內部連接沒有設置合理的條件,那它和交叉連接是等價的。一般得到的表會是<=m×n條記錄,<=x+y個屬性。
Ⅵ sql的交叉聯接和完全連接有什麼區別!舉例子啊
你的意思是 Cross JOIN 與 FULL JOIN 的區別么?
測試表
--學生表
CREATETABLEstudent(
SNOINT,
SNAMEVARCHAR(10),
ICNOINT
);
--食堂IC卡表
CREATETABLEIC(
ICNOINT,
ICNAMEVARCHAR(10),
ICMoneyINT
);
INSERTINTOstudentVALUES(1,'張三',1);
INSERTINTOstudentVALUES(2,'李四',2);
INSERTINTOstudentVALUES(3,'王五',NULL);
INSERTINTOICVALUES(1,'張三',500);
INSERTINTOICVALUES(2,'李四',250);
INSERTINTOICVALUES(3,'趙老師',600);
CROSS JOIN : 沒有任何條件, 完全是排列組合
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
CROSSJOINIC;
+------+-------+--------+---------+
|SNO|SNAME|ICNAME|ICMoney|
+------+-------+--------+---------+
|1|張三|張三|500|
|2|李四|張三|500|
|3|王五|張三|500|
|1|張三|李四|250|
|2|李四|李四|250|
|3|王五|李四|250|
|1|張三|趙老師|600|
|2|李四|趙老師|600|
|3|王五|趙老師|600|
+------+-------+--------+---------+
9rowsinset(0.08sec)
FULL JOIN 是 有條件的, 全部數據都顯示出來。
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
FULLJOINIC
ON(student.ICNO=IC.ICNO);
go
SNOSNAMEICNAMEICMoney
------------------------------------------
1張三張三500
2李四李四250
3王五NULLNULL
NULLNULL趙老師600
(4行受影響)
對比普通的 INNER JOIN
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
JOINIC
ON(student.ICNO=IC.ICNO);
+------+-------+--------+---------+
|SNO|SNAME|ICNAME|ICMoney|
+------+-------+--------+---------+
|1|張三|張三|500|
|2|李四|李四|250|
+------+-------+--------+---------+
2rowsinset(0.00sec)
Ⅶ sql 交叉表是個什麼概念
就是笛卡爾積啊!R表x行n列,S表y行m列,得到的交叉表是x*y行,(m+n)列
Ⅷ SQL交叉查詢問題
select * from a where a.id not in (select id from b)
數據量大速度快點用下面的
select * from a left outer jion b on a.id = b.id where b.id is null
Ⅸ SQL里的交叉連接有什麼實用的意義誰能給我舉個現實的例子要用到交叉連接查詢的
其實所有的查詢都是源於cross join 來的,所以說他的意義太大了。
Ⅹ SQL server 交叉連接 怎麼用
交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數
據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等
於6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示,即執行聯合查詢。UNION的語法格式為:
select_statement
UNION [ALL] selectstatement[UNION [ALL] selectstatement其中selectstatement為待聯合的SELECT查詢語句。
ALL選項表示將所有行合並到結果集合中。不指定該項時,被聯合查詢結果集合中的重復行將只保留一
行。聯合查詢時,查詢結果的列標題為第一個查詢語句的列標題。因此,要定義列標題必須在第一個查詢語
句中定義。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。
在使用UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選
擇表達式應具有相同的數據類型,或是可以自動將它們轉換為相同的數據類型。在自動轉換時,對於數值類
型,系統將低精度的數據類型轉換為高精度的數據類型。例如:SELECT A1,A2,A3 FROM AUNION SELECT B1,B2,B3 FROM B其中(A1,B1),(A2,B2),(A3,B3)必須為具有相同的數據類型,或是可以自動將它們轉換為相同的數據類型在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括弧可以改變這一執行順序。例如:
查詢1 UNION (查詢2 UNION 查詢3)