MYSQL外键,三种连接,数据查询

上期总结

从dos中登录mysql

mysql -h地址 -u账号 -p密码

DDL(database)

create | alter | drop | show | use

库操作

create database 库名;

drop database 库名;

alter database 库名 character set 字符集(utf8)

表操作(table)

create | alter | drop | desc

create table 表名 ( 列名 类型(长度)... );

 

DML(数据的增删改)

insert into 表名 (列) value (值);

insert into 表名 (列) values (值),(值),(值);

update 表名 set 列=值,列=值 where 列=值;

delete from 表名 where 列=值;

truncate 表名

DQL

select * from 表名 where 条件;

DCL

 

约束

主键约束:primary key auto_increment

外键约束

默认约束:default

唯一约束:unique

非空约束:not null

 

数据类型

int | float | double | char | varchar | date | time

datetime | timestamp(时间戳)

 

增删改查(CRUD)

create | retrieve | update | delete

外键(foreign key)

表与表之间是存在关系的,这种我们叫做表关系,一般使用外键去维护。

外键是两表或多表之间建立一个关系,我们将这种关系叫做外键关系。例如:订单 - 用户

 

笛卡尔积

给x,y两个集合,如果需要展示这两个集合的数据,理论上应该一一对应。 但是对于数据库而言,这种结果是没有任何意义的。

所以在表设计的过程中,需要我们避免笛卡尔积结果集。可以在数据表中指定外键关联,通过外键关联作为条件来检索数据,可以避免笛卡尔积结果集。

表关系:多对一,多对多,一对一

多对一 / 一对多

用户可以创建多个订单  可以说 用户和订单是一对多关系。多个订单可以同时对用一个用户。 订单和用户的多对一。

外键的作用就是维护数据的完整性

在一对多或多对一的关系中,外键添加到多的一方。

  1. 在订单表对多增加一个列 建议加对方表的主键名称。(uid)
  2. 给当前新创建的列增加外键约束

第一个括号里写的是自己表中的新建的列名,第二个括号中写的是对方表中主键

连接查询

多表操作的时候,不再按照每张表单独查询得到结果再去另一张表中查询(太麻烦)。

使用是连接查询

内连接

隐式内连接查询

特点:使用where 关键字进行条件拼接

显示内连接查询

使用关键字:inner join on  (和where功能一样,写法不同)

左外连接

左外连接指多表操作时,以左边的表数据为主,如果右表中没数据使用null补位

以左为尊  关键字: left join  on

右外连接

右外连接指多表操作时,以右边的表数据为主,如果左表中没数据使用null补位

以右为尊  关键字: right join  on

多对多

      

使用中间表的好处是即不破坏原来表的结构,有能够清晰的表述出当前的一个完整的逻辑关系。

一对一表关系

人(person)  身份证(id_card)

实现方式:

人(主表)的主键pid 在身份证表中做外键,且这个外键是身份证表的主键。

主表中不受限制,可以填写任何数据。

从表中可以没数据,一旦有数据从表ID必须是主表中存在ID

条件查询(综合)

 

 

总结

外键的两种添加方式

 

第一种创建表的时候添加外键

foreign key(列名) references 主表(主键)

第二种添加方式

alter table 表名 add constraint foreign key(列名) references 主表(主键)

 

表关系: 多对一、多对多 、一对一

多对一的外键需要添加到多的一方。

多对多的外键添加到中间表中(无主键)分别创建外键关联

一对一主表的主键是从表的外键,且从表的外键指定到从表的主键上。

 

连接查询:内连接 、 左外连接 、 右外连接

 

隐式内连接:where

显示内连接:inner join * on

 

左外连接:left join on

右外连接:right join on

 

条件查询(综合)

基本条查询  = | != <> | > < >= <=  between and | is null |

is not null | in  | not in

模糊查询 like % _

%匹配符号

_占位符

 

排序查询   order by  列名  asc|desc   前面不要加where

去重复关键字: distinct

分组查询   group by 列名        having

聚合函数

max | min | avg | sum | count

limit

一个参数的是取前几条数据

两个参数做分页。

 

子查询

一个SQL的结果当做了另一个SQL的条件。 子查询使用()包起来即可。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值