mysql 5.1 concat min_MySQL(0714)学习笔记

一、三大范式

三大范式, 设计数据数据库的一个原则

1. 对于属性(字段)必须是原子性的,不可再进行分割

2. 对于记录的唯一性,要求记录有唯一标识,

数据表中都要求主键,而且主键尽量不要是业务字段,单独拿个字段来做主键

字段与主键要有直接关系,不是间接关系, 确保一张表中只能存储一种类型的数据,不能存储多种

3. 对于字段的冗余性,要求任何字段不能由其他字段派生过来,要求字段没有冗余性

省份的简称可以有 省份派生过来

但是在实现开发中我们允许有适当的冗余来减少数据库操作花费的时间

在一张表中 只能存储一种类型的数据,不能存储多种

二、表关联

一张表中还能存储一种类型数据

班级 (主键,班级名称,班级人数,班级代码)

学生  (主键,名称,学号,班级主键(外键))

三、外键

当我们进行表关联的时候,我们可以通过外键约束一下

1. 创建表的时候直接添加

create table 表名(字段 类型,字段 类型,..., constraint [外键名称] foreign key(外键字段) references 父表(主键字段))

2. 通过alert进行修改 (外键起名要有一个命名规则)

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

3. 删除外键

alter table [表名] drop foreign key [外键名称];

4. 查询外键

show create table [表名]

四、 级联操作 (级联更新,级联删除)

级联更新 , 当父表主键发生变化变化的时候,从表中外键也跟着更新

eg;alter table 表名 add constraint fk_clazz_id_id foreign key(clazz_id) references clazz(id) on update cascade;

级联删除 ,当父表中记录被删除时候,字表外键相关的记录全部被删除

alter table 表名 add constraint fk_clazz_id_id foreign key(clazz_id) references clazz(id) on delete cascade;

级联更新和级联删除可以一起使用,默认情况下不带级联更新和级联删除的

五、表连接查询

查询出表中所有的记录        select * from stu, clazz (笛卡尔积 3*3=9行记录)

添加关联条件(不使用)      select * from stu, clazz where stu.clazz_id = clazz.id

连接查询

内连接  inner join  (on 是关联条件)  两张表中符合条件的交集

select * from 表名 inner join 表名二 on 表名.属性名 = 表名二.属性名

左连接  left join  把左表中内容都列出来,右表有匹配的就匹配,没有匹配的直接为空

1. 哪张表在前面,哪张表就是左表

select * from 左表名 left join 右表名 on 左表名.属性名 = 右表名.属性名

右连接  right join 把右表内容都列出来,左表中有匹配的就匹配,没有匹配的直接为空

select * from stu right join clazz on stu.clazz_id = clazz.id

或者三张表,四张表 多表

子查询

一个查询的结果是另外一个查询的条件

select name from clazz where id in (select clazz_id from stu where name = 'zhangsan');

别名(as)

通过as 可以给表起别名, 也可以给字段起别名

select s.name as sname, c.name as cname, c.number cnumber from stu as s inner join clazz as c on s.clazz_id = c.id;

as 可以省略掉

select s.name sname, c.name cname, c.number cnumber from stu s inner join clazz c on s.clazz_id = c.id;

六、分组查询

1.查询出男生有多少人,女生有多少个人

select gender, count(gender) gcount from stu2  group by gender;

2. 查询出18岁以上的男生有多少人,18岁以上的女生有多少人 (年龄大于18岁) (where 分组之前执行过滤)

select gender ,count(gender) gcount from stu2 where age > 18 group by gender;

3. 查询出18岁以上的男生,人数大于3个的性别才加入统计(having 分组出结果之后,过滤结果)

select gender ,count(gender) gcount from stu2 where age > 18 group by gender having gcount > 3;

七、mysql的函数

1. max 最大值

求男生的最大年龄

select gender, max(age) mage from stu2 group by gender having gender = 'm';

2. min  最小值

求女生最小年龄

select gender, min(age) mage from stu2 group by gender having gender = 'g';

3. count  数量和

分别求男生和女生的数量

select gender, count(gender) gcount from stu2  group by gender;

4. avg 平均数

男生和女生的年龄的平均数

select gender, avg(age) gcount from stu2  group by gender;

5. concat 字段拼接

全表查询,把姓名字段和年龄字段拼接输出

select name,age,concat(name,'-','age') cc from 表名;

6. substring 字段裁剪 substring(字段,begin,count)  begin 是从1开始的

截取姓名的字段的首字母输出

select name ,substring(name,1,1) sub from 表名;

八、sql语句练习

1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数

2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数

3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值