當前位置:首頁 » 編程語言 » sql單表自關聯
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql單表自關聯

發布時間: 2022-09-19 02:43:45

sql一個表能否和自身進行連接說明理由

可以啊,這叫自連接。但是from子句後面都是同一個表,所以必須給這個表取兩個不同的別名然後進行連接。

② 在寫SQL語句時什麼時候需要用到自表關聯,誰能舉個完整的例子

比如公司的部門結構,
人事部門,他的下級 考勤科,數據存儲在一個表中
org_code = 考勤科, up_org_code = 人事部門
,表名是人事 表,我需要查詢人事的上下級部門關系,則需要

select B.org_code, A.org_code
from 人事表 A, 人事表 B
where A.up_org_code = b.org_code
;

結果就是 人事部門 -> 考勤科
明白了嗎?

③ sql server自關聯

對表自身取笛卡爾積,然後去掉客戶名稱相同的

SELECTa.[證件號碼],a.[客戶名稱],b.[證件號碼]AS[證件號碼2],b.[客戶名稱]AS[客戶名稱2]
FROM[測試數據]ASa,[測試數據]ASb
WHEREa.[證件號碼]=b.[證件號碼]ANDa.[客戶名稱]!=b.[客戶名稱]

④ 如何設置SQL資料庫表與表的關聯關系

如果是 父子關系, 或者 一對多 關系。

可以通過 創建外鍵的方式, 在 父表 與 子表之間, 創建一個關聯關系。

例如:

-- 創建測試主表. ID 是主鍵.
CREATE TABLE test_main (
id INT NOT NULL,
value VARCHAR(10),
PRIMARY KEY(id)
);

-- 創建測試子表.
CREATE TABLE test_sub (
id INT NOT NULL,
main_id INT ,
value VARCHAR(10),
PRIMARY KEY(id)
);

-- 插入測試主表數據.
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');

-- 插入測試子表數據.
INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');

SQL> -- 創建外鍵(默認選項)
SQL> ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;

Table altered.

SQL>
SQL> -- 測試刪除主表數據. 將出錯 ORA-02292: 違反完整約束條件
SQL> DELETE
2 test_main
3 WHERE
4 ID = 1;
DELETE
*
ERROR at line 1:
ORA-02292: integrity constraint (HR.MAIN_ID_CONS) violated - child record found

⑤ SQL資料庫中表與表之間的關聯怎麼建立

1、在資料庫窗口中,單擊「創建」中「表格」中的「表設計」,打開表設計窗口。

⑥ SQL 自關聯如何去重復

  1. 你沒有清楚你到底要問的是什麼,去重復只有兩種情景需要用到:

  • 非合並結果去重復記錄

  • 合並結果記錄去重復

2、非合並結果去重復:對單表查詢或者關聯表查詢的返回結果數據集,去除重復的記錄(所有的結果列值全部一致才算重復),這種使用DISTINCT關鍵字實現

SELECTDISTINCT欄位1,欄位2……
FROM數據表

3、合並結果記錄去重復:A UNION B,將B的結果集合並到A中(兩個結果集列數量和對應的列類型必須保持一致),並且如果B中的記錄在A中已經存在,那麼將拋棄不進行合並。注意:如果A本身就存在重復的記錄,還是會都出現,如果不想讓出現,需要用DISTINCT去重復

SELECT欄位1,欄位2……
FROM表A
UNION
SELECT欄位1,欄位2……
FROM表B

⑦ SQL連接 表自己的連接

sql 連接可分為以下幾類:

1、 一個表與自身進行連接,稱為自連接
例子:

有一個學生表,裡面有 學號 功課編號
學生成績三個欄位.用一個SQL查詢語句得出每門功課成績最好的前兩名

學號 功課編號 學生成績
1 1 99
2 1 98
3 1 100
4 2 88
5 2 87
6 2 88
7 3 99
8 3 88
9 3 100

解決方法
SELECT DISTINCT 學生表1.*
FROM 學生表 學生表1 INNER JOIN
學生表 學生表2 ON 學生表1.學號 IN
(SELECT TOP 2 學生表.學號
FROM 學生表
WHERE 學生表.功課編號 = 學生表1.功課編號
ORDER BY 學生成績 DESC)

查詢結果
學號 功課編號 學生成績
1 1 99
2 1 98
4 2 88
6 2 88
7 3 99
9 3 100

2、內聯接(典型的聯接運算,使用像 = 或 <> 之類的比較運算符)。包括相等聯接和自然聯接。
內聯接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。例如,檢索 students和courses表中學生標識號相同的所有行。

3、外聯接。外聯接可以是左向外聯接、右向外聯接或完整外部聯接。
在 FROM子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:
1)LEFT JOIN或LEFT OUTER JOIN
左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。

4、交叉聯接
交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。

FROM 子句中的表或視圖可通過內聯接或完整外部聯接按任意順序指定;但是,用左或右向外聯接指定表或視圖時,表或視圖的順序很重要。有關使用左或右向外聯接排列表的更多信息,請參見使用外聯接。

例子:
-------------------------------------------------
a表 id name b表 id job parent_id
1 張3 1 23 1
2 李四 2 34 2
3 王武 3 34 4
a.id同parent_id 存在關系
--------------------------------------------------
1) 內連接
select a.*,b.* from a inner join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2

2)左連接
select a.*,b.* from a left join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2
3 王武 null

3) 右連接
select a.*,b.* from a right join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2
null 3 34 4

4) 完全連接
select a.*,b.* from a full join b on a.id=b.parent_id
結果是
1 張3 1 23 1
2 李四 2 34 2
null 3 34 4
3 王武 null

⑧ sql合表禁止在同一張中間表中自關聯什麼意思

就是兩個表只能單獨查詢。
只用在查詢的時候用兩個表的查詢就可以了,一般表的id都是自動生成的,你在查詢的時候可以用一個中間表或者視圖來實現,將所需要的信息寫到裡面去,一般是不建議把第一個表的id直接寫到另外一個裡面去,那樣就有兩個查詢的條件了,也就是你的id和name,那樣是沒用的,不利於表之間的優化的,最好是在第一次存取的時候就將表的欄位生成,只進行行內的修改和整體的查詢輸出。
用updatex2setuid=(selectidfromx1wherex1.name=z2.name),來實現就好了,其實吧,我建議你把一個表裡面的name幹掉就留一個表的,然後用id做他們之間的主鍵來實現他們之間的關聯,這個在資料庫方面是通用的,現在資料庫都需要優化,尤其是在多表查詢的時候,所以你還是用心的研究一下,最好不要重復多個欄位在表之間的重復查詢,結果容易重復,所以我還是建議你把表優化,而不是考慮把值加進去,做到用什麼就從表之間查什麼就好了。

⑨ 有個人事表自關聯,sql語句怎麼寫

select id,name,老闆id,老闆名字
from 人事表 inner join 老闆表
on 人事表.老闆id = 老闆表.老闆id

⑩ sql單表自身連接查詢問題

select 姓名name,電話tel,email,家庭住址city

from s as s1
join s as s2 on
s1.專業號MaID=s2.專業號MaID

where s1.姓名name='張三'

select 學號,姓名,生日
from s as s1
join s as s2 on
s1.師號TutorID
=s2.專業號MaID

where s1.姓名name='張三'