Mysql操作SQL基础知识点

一、能够理解外键约束

作用: 一张主表的主键来约束一张从表的外键

  • 主表: 约束别人
  • 副表/从表: 使用别人的数据,被别人 约束
语法: constraint 外键名 foreign key(从表字段名) references 主表名(主表主键) 添加外键: 

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

create table 表名(
    字段名 字段类型 字段约束,
    字段名 字段类型 字段约束,
    ...
    constraint 外键名 foreign key(从表字段名) references 主表名(主表主键)
);

删除外键:
alter table 表名 drop foreign key 外键名;

外键级联操作:
on update cascade
on delete cascade

例子:

二、多表间关系

  1. 一对多: 在多的一方创建一个字段作为外键,指向一的一方的主键
  2. 多对多: 创建一张中间表,至少有2个字段都作为外键,分别指向各自一方的主键
  3. 一对一: 直接创建一张表

三、内连接查询【重点】

3.1  隐式内连接

select [字段,字段,字段][*] from 表1,表2 where 连接条件 --(外键的值等于主键的值)

select * from emp,dept where emp.dept_id = dept.id;

3.2 显示内连接

显示里面是有inner关键字的

select [字段,字段,字段][*] from a [inner] join b on 连接条件 [ where 其它条件]

select * from emp inner join dept on emp.dept_id = dept.id
select * from emp inner join dept on emp.dept_id = dept.id where emp.id = 2
select * from emp join dept on emp.dept_id = dept.id where emp.id = 2

3.3 小结

1. 内连接的特点(查的是什么东西) 内连接查询的是公共部分,满足连接条件(主外键关系)的部分

2. 使用内连接的关键点

  • 使用主外键关系做为条件来去除无用信息. 抓住主外键的关系,用主外键作为连接条件 ==b表 里面的外键 = a表里面的主键==
  • 显示内连接里面的,on只能用主外键关联作为条件,如果还有其它条件,后面加where

3. 语法

-- 隐式(不出现inner)
select * from a,b where a.主键=b.外键 and 其它条件

-- 显示(出现inner)
select * from a [inner] join b on a.主键=b.外键 where 其它条件

四、外连接【重点】

我们发现内连接查询出来的是公共部分. 如果要保证某张表的全部数据情况下进行连接查询. 那么就要使 用外连接查询了.

外连接分为:

  • 左外连接
  • 右外连接

4.1 左外连接

以join左边的表为主表,展示主表的所有数据,根据条件查询连接右边表的数据,若满足条件则展示,若不满足则以null显示.

可以理解为:在内连接的基础上保证左边表的数据全部显示

1. 语法 

select [字段][*] from 左表 left join 右表 on 条件

4.2 右外连接

以join右边的表为主表,展示右边表的所有数据,根据条件查询join左边表的数据,若满足则展示,若不满足 则以null显示

可以理解为:在内连接的基础上保证右边表的数据全部显示

select 字段 from 左表 right join 右表 on 条件

4.3 内连接和外连接的区别 ?

  • 内连接: 查询的是公共部分,满足连接条件的部分
  • 左外连接: 以左边表为主表, 查询出左边表的所有的数据. 再通过连接条件匹配出右边表的数 据, 如果满足连接条件, 展示右边表的数据; 如果不满足, 右边的数据通过null代替
  • 右外连接: 以右边表为主表, 查询出右边表的所有的数据. 再通过连接条件匹配出左边表的数 据, 如果满足连接条件, 展示左边表的数据; 如果不满足, 左边的数据通过null代替

4.4 应用

1. 用户1和订单m

    查询所有的用户的订单信息   外连接

    查询下单的用户的信息          内连接

2.  用户1和账户m

    查询所有的用户的账户信息   外连接

    查询所有用户的开户信息       内连接

五、子查询【重点】

我们刚刚讲解了内连接和外连接查询, 但是如果遇到很复杂的场景, 内连接和外连接查询可能查询不出来. 我们就可以使用子查询。

5.1 什么是子查询

直观一点: 一个查询语句里面至少包含2个select

  • 一个查询语句的结果作为另一个查询语句的条件
  • 有查询的嵌套,内部的查询称为子查询
  • 子查询要使用括号
  • 子查询结果的三种情况:
  1. 子查询的结果是一个值的时候
  2. 子查询结果是单列多行的时候
  3. 子查询的结果是多行多列
1.子查询的结果是一个值: 作为where条件
select ... from 表 where 字段 [><=<>...] (子查询);

2.子查询的结果是单列多行:作为where条件
select ... from 表 where 字段 in (子查询);

3.子查询的结果是多列多行:作为一张虚拟表(注意要给子查询的结果(虚拟表)取别名)
select ... from (子查询) 别名 where 条件;
select ... from 表 别名,(子查询) 别名 where 条件;
select ... from 表 别名 left join (子查询) 别名 on 条件;
select ... from 表 别名 right join (子查询) 别名 on 条件;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值