1. 程式人生 > 其它 >54-2·100 sqlserver多對多查詢-部門和員工表詳情註釋版

54-2·100 sqlserver多對多查詢-部門和員工表詳情註釋版

 

 

--01 部門表
create table t_dept(
ID int identity(1,1),
Depname varchar(100) null, --部門名稱 
loc nvarchar(100) null,-- Location 所在地 

primary key(ID)

);
go
--查詢部門表
select * from t_dept;


--刪除資料
delete from t_dept where id>0 and id<5;
--add 部門資訊
insert into t_dept(Depname,loc)values('法師部','A國');
insert
into t_dept(Depname,loc)values('戰士部','B國'); insert into t_dept(Depname,loc)values('射手部','C國'); --02 員工表 create table t_emp( ID int identity(1,1), name varchar(100) null, --員工姓名 sal decimal(18,1) null, dept_id int not null, --外來鍵設定. 參考部門的主鍵. 部門ID簡寫 primary key(ID), foreign key(dept_id) references t_dept(ID), );
go --查詢員工表 select * from t_emp; --add data 部門表 主鍵ID從5開始. 2個表的關係欄位為部門ID,dept_id insert into t_emp(name,sal,dept_id)values('諸葛亮',3000,5); insert into t_emp(name,sal,dept_id)values('周瑜',2000,5); insert into t_emp(name,sal,dept_id)values('關羽',1500,7); --找對應的關聯欄位的ID insert into t_emp(name,sal,dept_id)values('
張飛',1000,7); insert into t_emp(name,sal,dept_id)values('孫尚香',5000,9); --查詢每個員工的全部資訊和部門全部資訊 01 select * from t_emp as a left join t_dept as b on a.dept_id=b.ID; -- 員工表為主表,部門表為從表。 /* about 查詢 1. 查詢每個員工的名字和所在部門的名稱 2. 查詢A國的員工姓名 3. 查詢張飛的部門名稱 4. 查詢工資在2000以下員工姓名,所在地 */ --1. 查詢每個員工的名字和所在部門的名稱 -- 邏輯關係分析:員工表的dept_id 部門ID關聯部門表的主鍵 ID. --關聯查詢 左關聯 -- 1. 查詢每個員工的名字和所在部門的名稱 select name,Depname from t_emp as a left join t_dept as b on a.dept_id=b.ID --擴充套件訓練 拓展鍛鍊learn and write01 --1.1查詢每個員工的名字,薪水和所在部門的名稱 select name,sal,Depname from t_emp as a left join t_dept as b on a.dept_id=b.ID --1.2 查詢每個員工的名字,薪水,部門ID和所在部門的名稱 select name as 員工名字,sal as 薪水,dept_id as 部門ID, Depname as 所在部門 from t_emp as a left join t_dept as b on a.dept_id=b.ID --顯示部門在前面,員工姓名在後面. 這是主表在上,部門表為主表,員工表為從表. 誰為主表,誰的查詢資訊查詢就靠前. -- 1.3 查詢每個部門的名稱和員工的名字. select depname,name from t_dept as a left join t_emp as b on a.ID=b.dept_id /* 2 分析 查詢基礎3條件:資料,來源,條件 1 首先A國資訊在部門表。關聯查詢 2 員工姓名. 員工姓名自然在員工表中,關聯員工表查詢,需要查詢A國的所有員工姓名,員工表為主表,用左關聯查詢,主表在上. 從表在下 3 條件查詢. A國的ID主鍵確認是5,6. 關聯學生表的部門ID是? 為5. dept_id 部門ID為5. 關聯欄位為 5. 3.1 條件選擇: 僅僅取用部門ID 為5的資料. 查詢的關鍵是 員工表中 部門ID的資訊不同 首先想查哪國, 修改部門ID就行了。A國的部門ID為5. B國為7.修改數字就行了。 */ -- 2. 查詢A國的員工姓名 select name as A國員工姓名 from t_emp as a left join t_dept as b on a.dept_id=b.ID where a.dept_id=5; -- 重要的是員工表關聯欄位的資訊.A國的部門ID為5. B國為7. --查詢部門表 select * from t_dept; --查詢員工表 select * from t_emp; --3. 查詢張飛的部門名稱 /* 1 張飛在員工表. 1.1 張飛在員工表的(部門ID)資訊是什麼? 為數字7. 1.2 查詢7 指向的部門名稱是什麼? 2 所在部門-在部門表. 3 條件查詢. 用左關聯查詢 需要 張飛員工表的部門ID等於 部門表的主鍵ID7. 才能關聯聯絡起來. 就能查詢出來張飛的部門名稱資訊了 注意: 因為name不是唯一標識 可能有兩個叫張飛的 ID就是身份證號,是唯一標識 */ --3 查詢張飛的部門名稱 select name,Depname from t_emp as a left join t_dept as b on a.dept_id=b.ID where a.name='張飛'; /* 1 工資欄位在員工表 2 */ --4 查詢工資在2000以下員工姓名,所在地 select name as 員工姓名,loc as 所在地 from t_emp as a left join t_dept as b on a.dept_id=b.ID where sal<2000; select * from t_dept as a left join t_emp as b on a.id=b.dept_id; --分組查詢 select name from t_emp group by name; --部分欄位,去掉星號,選擇需要的列寫入 select name from t_emp;

效果

 同簡化版結果一樣.有需要全部查詢效果的可以加微信好友(微訊號:madaochenggong10000)