数据库专题 MySQL基础进阶,SQL运算符使用,表关系

笛卡尔积

在SQL语句中直接查询两张表的时候出现的是两张表的所有记录可能产生的所有组合。

如果一张表有三条记录,另一张表有四条记录,直接查询两张表就会出现十二条记录,也就是 3*4 = 12 ,其中一张表的每一条记录都会和另一张表的所有记录合并一次产生一条新的结果,所以会出现相乘的结果。

外键约束

通过设置外键让一张表的某一个字段与另一张表的某一个字段产生联系。
主表和从表
从表:含有外键的表
主表:被关联的表

举个栗子:
数据库专题 MySQL基础进阶,SQL运算符使用,表关系
这里表示两张表,第一张users(用户)表,和第二张orders(订单表),
这里两张表之间的连线表示某一个用户拥有哪些订单的关系。
如图,users中的张三拥有orders中的前两条订单记录,而王五拥有orders中的第三条订单记录,用红色标明的uid就是外键,其值对应于users表的uid,使两张表产生联系,这样在orders表中也可以判别出每一条订单记录所属的用户是谁。
这里的从表就是orders,主表就是users。

一般来说当给某张表设置了逻辑上的外键时可以在创建表的时候也声明该表的某一个或多个字段为外键,但是在后期整理数据的时候颇为麻烦,因为当你的表外键关系越多,表越多,往往一条记录会牵扯到多张表,当你想修改某一条记录的时候会提示你因为外键的原因无法修改,由此你必须向上追溯是那些表与这个外键产生了联系,所以在使用时我们可以采用设置逻辑上的外键但是并不显式的声明为外键,由此可能会出现脏数据的情况,但这可以通过逻辑代码自己处理来避免,避免出现脏数据的手段是存在的,但需要操作人员自己细心,多做测试。

表关系

表的关系大致分为四种:

一对一,一对多,多对一,多对多。

一对多和多对一可以统称为一对多,因为这是看待角度的问题,站在一的角度就是一对多,站在多的一方就是多对一。

一对一:
举个栗子就是一个人只有唯一的身份证号。

一对多,多对一:
举个栗子就是一个学生可以有多个老师,多个老师可以同时教导同一个学生。

多对多:
举个栗子,当同时满足一对多和多对一的时候也就满足了多对多,比如说我一个人可以买多种商品,同时一件商品也可以被多个人买。

当需要实现多对多的时候,两张表之间就需要一个中间表,用来同时存储两张表之间多对多的关系,例如:
数据库专题 MySQL基础进阶,SQL运算符使用,表关系
关系就可以如下表示
数据库专题 MySQL基础进阶,SQL运算符使用,表关系

SQL运算符

一般来说使用比较频繁的SQL语句就是查询,增删改虽然也有,但是并不是相当频繁。

这里介绍sql语句中查询常用的运算符和函数,具体列子放到下一次具体展示

条件查询关键字:where

= 等于
<>或者!= 不等于
< 小于
<= 小于等于

大于
= 大于等于
between…and 两个值之间
is null 为null(is not null 不为null)
and 并且
or 或者
in 包含(not in 不包含范围中)
not not否的意思,主要和is 或者in一起使用
like
like称为模糊查询,支持%或者下划线 _
%匹配任意字符
_一个下划线只匹配一个字符