mysql学习——02 约束、查询

一、完整性约束条件

1 概念
在执行DML操作时,对表中的数据进行一种强制性校验规则。这样可以保证数据的完整性、安全性、商业逻辑性,也简称约束。
2 非空约束
not null,简称NN
表示设置了非空约束的字段里值不能为空

建表: create table tbname(colname type not null,...);
建表后:alter table tbname modify colname type not null;
3 唯一性约束
unique,简称UK
表示设置了唯一性约束的字段的值不能重复,但可以为null

建表:create table tbname(colname type unique,...);
建表后:alter table tbname modify colname type unique;
4 主键约束
primary key
非空和唯一性的组合形式。要求字段非空且唯一。每张表只能有一个主键

建表:create table tbname(colname type primary key,...);
create table tbname(colname1 type1,colname2 type2,...,primary key(colname1));
建表后:alter table tbname add CONSTRAINT pk_id primary key(id);
tips:尽可能在单列上设置,设置的字段尽可能的没有商业价值
自增长序列:auto_increment 通常与主键约束一起使用,用于给此字段自动赋值,
值的特点是连续自增的序列,默认从1开始
create table tbname(colname type primary key auto_increment,...);
5 外键约束
foreign key,简称FK
表示设置外键约束的字段B的值依赖于某一个字段A的值
不支持列级写法
建表
create table tbname(colname1 type1,colname2 type2,...,CONSTRAINT fk_col_col foreign key(colname) references tbname(colname));
建表后
alter table tbname add CONSTRAINT consname foregin key(id) references tbname(colname);
6 检查性约束
check,简称CK
表示设置有检查性约束的字段的值必须符合检查条件
tips:mysql的检查性约束无效。语法通过。
用枚举替换

二、基本查询语句

1.基本结构
select ... from ... where ... group by ... having ... order by 
执行顺序:from->where->group by->having->select->order by
2.列别名、表别名
1.通配符:*,表示所有的字段		select * from tbname
2.指定字段进行查询			select colname1,colname2 from tbaname
3.使用列别名		select col1 [as] nickname1,col2 nickname2 from tbname
4.使用表别名		select tbname.id,nickname.name from [as] tbname nickname
3.where子句
4.group by子句
分组查询,将表中某些记录按照某个/某些字段的值进行分组
通常在分组查询时,都会使用到聚合函数(分组函数)
比如:max(colname) min(colname) sum(colname) 
avg(colname) :ifnull(colname,val)如果colname为null就将val赋值给colname
count(colname) 统计每一组中的记录数目。count(*)
tips:聚合函数会忽略掉字段里的空值,不会统计空值
分组查询时,一般情况下,分组字段放在select子句中,其他子句不能放在select子句中
查询特点
5.having子句
是对分组查询进行再一次过滤筛选,having子句后面是条件
6.order by子句
用于对已选择的数据根据需求的字段进行排序(asc 升序/desc 降序)
order by colname [asc / desc]
7.去重查询
关键字:distinct。放在select关键字之后
8.分页查询
关键字limit
limit m,n 通常放在order by子句后
m:表示从第m条记录开始
n:表示查询n条记录

三、关联查询基础

1 概念
实际应用中,我们所需要的数据不仅仅只在一张表中,而是在多张表中存在。
因此我们在查询时,需要进行多表查询,也叫关联查询
2 笛卡尔积
在进行多表查询时,表A有m条记录,表B有n条记录,表A中的每条记录都会与表B中的每条记录
进行匹配组合成一条新纪录。最终会有m*n条记录,m*n就是笛卡尔积。通常情况下笛卡尔积没有实际意义。
3 等值连接
多表查询时,使用两张张表中有关系的字段进行等值匹配。就是等值连接
4 内连接
是等值连接的另外一种写法
from tbname1 join tbname2 on 关联条件
5 外连接
两张表,有一张表A中的数据全部显示,另外一张表B的数据只显示满足条件的数据。
表A我们称之为驱动表,表B称之为从动表

左外连接:左边为驱动
from tbnme1 left join tbname2 on

右外连接:右边为驱动
from tbnme1 right join tbname2 on
6.自连接
外连接的特殊情况,即两张表示同一张表,也称之为自连接

四、高级关联查询

1 概念
在一个查询语句A中所需要的数据不是直观体现在表中的,而是需要通过另外一个查询语句B获取的结果。
这种查询成为关联查询
A为主查询,B为子查询
案例1:查询工资大于smith的工资的所有员工信息

分析:  
        第一步:先查询smith的工资,假如是num
         select sal from emp where ename = 'smith'
        第二步:再查询工资大于num的所有员工信息
         select * from emp where sal >num;
        第三步:组合:
         select * from emp where sal >(select sal from emp where ename = 'smith');
2 子查询语句在where中
3 子查询语句在from子句中
4 子查询语句在having子句中
5 子查询语句在select子句中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值