SQL—多表查询

目录

一.外键

二.交叉连接

三 内连接

四 外连接

1.左连接

2.右连接

五 带IN关键字的子查询

六 带EXISTS关键字的子查询

七 带ANY关键字的子查询

八 带ALL关键字的子查询

九 带比较运算符的子查询


一.外键

外键用于建立和加强两个表数据之间的链接。

1.添加外键

alter table 表名 add constraint FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键字段名);

eg:

前提:创建两个表 grade(id, name)       student(sid, sname, gid)

 为表student添加外键约束,具体语句如下:

alter table student add constraint FK_ID foreign key(gid) REFERENCES grade (id);

2.删除外键-需要解除两个表之间的关联关系时就需要删除外键约束

alter  table 表名 drop  foreign  key  键名;

二.交叉连接

SELECT * from 1 CROSS JOIN 2;

−交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积即行数的乘积。

三 内连接

SELECT 查询字段 FROM 1 [INNER] JOIN 2 ON 1.关系字段 = 2.关系字段

SELECT 查询字段 FROM 1 ,2  WHERE 1.关系字段 = 2.关系字段

四 外连接

SELECT 所查字段

FROM 1 LEFT|RIGHT [OUTER] JOIN 2 ON1.关系字段 = 2.关系字段

WHERE 条件

1.左连接

左连接的结果包括LEFT JOIN子句中指定的左表的所有记录,和所有满足连接条件的记录。

2.右连接

 右连接与左连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。

eg:Department(did, dname)     Employee(id, name, age, did)

1在 department 表和 employee 表之间使用左连接查询。

 
  SELECT department.did, dname,name FROM department
     LEFT JOIN employee on department.did=employee.did;
2在 department 表和 employee 表之间使用右连接查询。
 SELECT department.did, dname, name FROM department

   RIGHT JOIN employee ON department.did=employee.did;

五 带IN关键字的子查询

eg:Department(did, dname)     Employee(id, name, age, did)

1.查询存在年龄为20岁的员工的部门信息

SELECT * FROM department
WHERE did IN
(SELECT did FROM employee WHERE age=20);

2.查询不存在年龄为20岁的员工的部门信息。

SELECT * FROM department
WHERE did NOT IN
(SELECT did FROM employee WHERE age=20);

六 带EXISTS关键字的子查询

EXISTS关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回TRUEFALSE,当返回值为TRUE时,外层查询才会执行

eg:查询employee表中是否存在年龄大于21岁的员工,如果存在,则查询department表中的所有记录。Department(did, dname)     Employee(id, name, age, did)

SELECT *  FROM department
WHERE EXISTS
(select did from employee where age > 21);


七 带ANY关键字的子查询

eg:使用ANY关键字的子查询,查询满足条件的部门(最小)。

Department(did, dname)     Employee(id, name, age, did)

SELECT * FROM department
WHERE did>any(select did from employee);

八 带ALL关键字的子查询

使用带ALL关键字的子查询,查询满足条件的部门(最大)。

Department(did, dname)     Employee(id, name, age, did)

SELECT *  FROM department
WHERE did>all(select did from employee);

九 带比较运算符的子查询

eg:使用带比较运算符的子查询,查询赵四是哪个部门的员工。

        Department(did, dname)     Employee(id, name, age, did)

SELECT did FROM department
WHERE did=(select did from employee where name='zhaosi');

注:•明确子查询的结果只有唯一的一个值才可以用比较运算符号

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值