sql语句1

本文详细介绍了SQL中的联表查询方法,包括内联接、左外联接和右外联接,并通过实例展示了如何将部门ID替换为部门名称。此外,还讲解了如何进行自联接查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

联表查询

分类: MySQL 171人阅读 评论(0) 收藏 举报
SQL
  1. CREATE TABLE t_employee(  
  2. id INT PRIMARY KEY AUTO_INCREMENT,  
  3. eName VARCHAR(20),  
  4. job VARCHAR(20),  
  5. deptid INT,  
  6. CONSTRAINT fk_deptid FOREIGN KEY(deptid) REFERENCES t_dept(id)  
  7. )DEFAULT CHARSET=utf8;  
  8. CREATE  TABLE t_dept(  
  9. id INT PRIMARY KEY AUTO_INCREMENT,  
  10. dName VARCHAR(20)  
  11. )DEFAULT CHARSET=utf8;  
  12.   
  13. INSERT INTO t_dept(dName) VALUES('市场部');  
  14. INSERT INTO t_dept(dName) VALUES('财务部');  
  15. INSERT INTO t_dept(dName) VALUES('技术部');  
  16. INSERT INTO t_dept(dName) VALUES('拓展部');  
  17. INSERT INTO t_employee(eName,job,deptid) VALUES('张天','经理',1);  
  18. INSERT INTO t_employee(eName,job,deptid) VALUES('李典','职员',1);  
  19. INSERT INTO t_employee(eName,job,deptid) VALUES('王双','职员',1);  
  20. INSERT INTO t_employee(eName,job,deptid) VALUES('典韦','职员',1);  
  21.   
  22. INSERT INTO t_employee(eName,job,deptid) VALUES('李渊','经理',2);  
  23. INSERT INTO t_employee(eName,job,deptid) VALUES('何元庆','经理',2);  
  24. INSERT INTO t_employee(eName,job,deptid) VALUES('秦琼','职员',2);  
  25. INSERT INTO t_employee(eName,job,deptid) VALUES('尉迟恭','职员',2);  
  26.   
  27. INSERT INTO t_employee(eName,job,deptid) VALUES('赵匡胤','经理',3);  
  28. INSERT INTO t_employee(eName,job,deptid) VALUES('石守信','经理',3);  
  29. INSERT INTO t_employee(eName,job,deptid) VALUES('赵光义','职员',3);  
  30. INSERT INTO t_employee(eName,job,deptid) VALUES('杨继业','职员',3);  
  31. INSERT INTO t_employee(eName,job,deptid) VALUES('八贤王','职员',3);  
  32. INSERT INTO t_employee(eName,job) VALUES('陈近南','职员');  
  33.   
  34. SELECT * FROM t_employee;  
  35. SELECT * FROM t_dept;  
  36. -- 内联接:是指使用比较运算符根据每个表共有的列的值匹配两个表中的行  
  37. -- 查询员工表的所有信息,同时将部门id 替换为部门名称  
  38. SELECT e.id,eName,e.job ,d.dName FROM t_employee e JOIN t_dept d ON e.deptid=d.id  
  39.   
  40. -- 左外联接:包含LEFT JOIN前面一个表的所有记录  
  41. SELECT e.id,eName,e.job ,d.dName FROM t_employee e LEFT JOIN t_dept d ON e.deptid=d.id  
  42.   
  43. -- 右外联接:包含LEFT JOIN后面一个表的所有记录  
  44. SELECT e.id,eName,e.job ,d.dName FROM t_employee e RIGHT JOIN t_dept d ON e.deptid=d.id  
  45.   
  46. CREATE TABLE t_em(  
  47. id INT PRIMARY KEY AUTO_INCREMENT,  
  48. emName VARCHAR(20),  
  49. headId INT  
  50. )DEFAULT CHARSET=utf8;  
  51. INSERT INTO t_em(emName,headId)VALUES('boss',NULL);  
  52. INSERT INTO t_em(emName,headId)VALUES('张三',1);  
  53. INSERT INTO t_em(emName,headId)VALUES('李四',1);  
  54. INSERT INTO t_em(emName,headId)VALUES('王五',2);  
  55. INSERT INTO t_em(emName,headId)VALUES('赵六',3);  
  56. SELECT * FROM  t_em  
  57. -- 自联接,表和本身表做联接查询  
  58. SELECT e1.emName,e2.emName FROM t_em e1 LEFT JOIN t_em e2 ON e1.headId=e2.id;  
CREATE TABLE t_employee(
id INT PRIMARY KEY AUTO_INCREMENT,
eName VARCHAR(20),
job VARCHAR(20),
deptid INT,
CONSTRAINT fk_deptid FOREIGN KEY(deptid) REFERENCES t_dept(id)
)DEFAULT CHARSET=utf8;
CREATE	TABLE t_dept(
id INT PRIMARY KEY AUTO_INCREMENT,
dName VARCHAR(20)
)DEFAULT CHARSET=utf8;

INSERT INTO t_dept(dName) VALUES('市场部');
INSERT INTO t_dept(dName) VALUES('财务部');
INSERT INTO t_dept(dName) VALUES('技术部');
INSERT INTO t_dept(dName) VALUES('拓展部');
INSERT INTO t_employee(eName,job,deptid) VALUES('张天','经理',1);
INSERT INTO t_employee(eName,job,deptid) VALUES('李典','职员',1);
INSERT INTO t_employee(eName,job,deptid) VALUES('王双','职员',1);
INSERT INTO t_employee(eName,job,deptid) VALUES('典韦','职员',1);

INSERT INTO t_employee(eName,job,deptid) VALUES('李渊','经理',2);
INSERT INTO t_employee(eName,job,deptid) VALUES('何元庆','经理',2);
INSERT INTO t_employee(eName,job,deptid) VALUES('秦琼','职员',2);
INSERT INTO t_employee(eName,job,deptid) VALUES('尉迟恭','职员',2);

INSERT INTO t_employee(eName,job,deptid) VALUES('赵匡胤','经理',3);
INSERT INTO t_employee(eName,job,deptid) VALUES('石守信','经理',3);
INSERT INTO t_employee(eName,job,deptid) VALUES('赵光义','职员',3);
INSERT INTO t_employee(eName,job,deptid) VALUES('杨继业','职员',3);
INSERT INTO t_employee(eName,job,deptid) VALUES('八贤王','职员',3);
INSERT INTO t_employee(eName,job) VALUES('陈近南','职员');

SELECT * FROM t_employee;
SELECT * FROM t_dept;
-- 内联接:是指使用比较运算符根据每个表共有的列的值匹配两个表中的行
-- 查询员工表的所有信息,同时将部门id 替换为部门名称
SELECT e.id,eName,e.job ,d.dName FROM t_employee e JOIN t_dept d ON e.deptid=d.id

-- 左外联接:包含LEFT JOIN前面一个表的所有记录
SELECT e.id,eName,e.job ,d.dName FROM t_employee e LEFT JOIN t_dept d ON e.deptid=d.id

-- 右外联接:包含LEFT JOIN后面一个表的所有记录
SELECT e.id,eName,e.job ,d.dName FROM t_employee e RIGHT JOIN t_dept d ON e.deptid=d.id

CREATE TABLE t_em(
id INT PRIMARY KEY AUTO_INCREMENT,
emName VARCHAR(20),
headId INT
)DEFAULT CHARSET=utf8;
INSERT INTO t_em(emName,headId)VALUES('boss',NULL);
INSERT INTO t_em(emName,headId)VALUES('张三',1);
INSERT INTO t_em(emName,headId)VALUES('李四',1);
INSERT INTO t_em(emName,headId)VALUES('王五',2);
INSERT INTO t_em(emName,headId)VALUES('赵六',3);
SELECT * FROM  t_em
-- 自联接,表和本身表做联接查询
SELECT e1.emName,e2.emName FROM t_em e1 LEFT JOIN t_em e2 ON e1.headId=e2.id;

更多 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值