MySQL进阶--字段约束,表的设计关系,连接查询,高级查询,子查询

一:字段约束

主键约束:primary key

针对主键,提供了一种自增长机制,关键字是  auto_increment

整合是:primary key auto_increment

非空约束:not null

唯一约束:unique

默认约束:default

标准语法-----gender varchar(5) default "男",

如果想要选取默认值,可以忽略此字段的赋值,或者为该字段赋值为null

如果想要改变默认约束字段的值,就手动赋值,进行覆盖

外键约束:foreign key

标准语法(比如学生表关联老师表)---

(声明一个字段,去连接另一张表的主键,此字段和需要连接的表的主键字段一致)

tid int,

(外键约束设置)

/*

*foreign key(tid) 当前表中的tid字段作为了外键

*references 关联,参照

*teacher(tid) 当前表中的外键关联的是teacher表中的tid字段

*/

foreign key(tid) references teacher(tid)

外键的特点:

a.外键必须关联另一张表的主键

b.外键的值必须要有对应值

c.外键的值可以为空

d.一张表可以由多个外键

e.一般外键的名称与关联主键的名称一致

二:表的设计关系

表关系有三种:一对一 ,一对多,多对多

(表关系的设计必须使用到外键)

一对一关系的设计方式:

两张表 A  B,分别添加主键,选取任意一张表,设置外键关联另一张表的主键,而且作为外键的是当前这张表的主键:主键连主键

一对多关系的设计方式:

一方的表称为主表,多方的表称为从表,在从表中设置一个外键,去关联主表的主键。(就比如学生和教师表,在学生表中设置外键   一个老师可以对应多个学生,所以多方的表是学生,称为从表)

多对多关系的设计方式:

两张表A,B,分别添加主键,此时创建一张中间表C,在C中设置两个外键,分别关联A B表的主键。借助中间表C,可以实现A  B的多对多关系。

三:连接查询

内连接总结

  1. 内连接中,前后表书写的顺序不会影响结果集中的数据,先写哪个表都可以!
  2. 以后推荐使用显式内连接!

         inner join单词的意思就是内连接,所以sql的语义更强,可读性更强

        on后面书写连接条件、where后面书写筛选条件,条件的分类更加明确

        显式出现的时间要比隐式晚,所以选用先进的、较新的语法

     3.   内连接只能获取到多表去除错误数据(连接条件的作用)后的公共数据,也就是取交集!!!

外连接总结

  1. 外连接可以依附于某一张表进行查询,该表中的数据都可以获取,如果不满足连接条件,另一张表中的数据全部补null
  2. 外连接因为表的位置不一样,会影响sql语句的执行语义,会改变依附的查询表,所以前后的顺序不能发生改变,与内连接完全不一样
  3. 左外与右外其实本质上是一致的!把关键字left join换成right join,再将表的位置一调换,结果没有区别!

四:高级查询

1-分页查询:

1:关键字:limit

a.  limit  参数:参数代表获取的数据量,默认从第一条开始获取

select * from 表名 limit 7;

b.  limit 参数1,参数2 : 参数1代表获取数据的开始位置,索引(索引是从0开始的)

                                        参数2代表获取的数据量

select * from 表名 limit 3,4;

2:分页解决的问题:

a.解决了服务器擦讯数据的压力

b.解决了页面显示数据的压力

2-排序:

语法:order by 字段 排序规则

排序规则有两种:升序 asc     降序desc     默认是asc

如果存在多个排序条件,使用逗号隔开

3-分组:

1:分组查询的关键字:group by 字段名

2:什么时候需要用到分组查询:

当需求中出现了关键字   每个  每组时,此时就需要按照每个,每组后面的字段进行分组,获取数据

3:分组查询的原理:

先对数据进行分组,再对分组的数据使用聚合函数进行汇总。分组查询与聚合函数的使用是密不可分的。

4.案例代码

5:where和having的区别

a.having在分组后才能使用,where在分组前使用

b.where是从原始表中寻找条件,having是在分组后的临时表中寻找条件

c.where关键字出现在group  by 之前,having出现在group  by  之后

d.如果条件中有聚合函数作为运算内容,那么只能出现在having中,不能写在where中(具体参考最后一个案例代码)

4-聚合函数:

能够获取到单一的数据

max(字段) 求最大值

min(字段) 求最小值

sum(字段) 求和

avg(字段) 求平均数

count(字段) 获取该字段下非空值的个数

 

5-查询语句的关键字书写顺序是怎样的?

select

      字段列表

from

      表名

where 分组前的条件

group by  分组字段

having  分组后的条件

order by   排序

limit    分页

五:子查询

查询语句中又有另外一个查询语句,一个查询语句的结果作为了另一个查询语句的条件,这种称为子查询

一个查询语句的返回结果集的表现形式有几种?

单行单列----单一数据:聚合函数的查询

多行多列-----select * from student;

单行多列-----select * from student  where tid =1;

单列多行-----select tname from student;

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值