3sql
-------------------- 三范式
-- 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
-- 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;
-- 二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分,即字段必须完全依赖一个主关键字。
-- 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。
-- 即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况
-- 1NF: 列原子性
-- 2NF:同一表,如果主键是2个列,那么其他列的字段必须都依赖于这两个列,
-- 如果有的列只依赖于其中一个主键的列,那么就要拆分表,
-- 3NF:非主键一定要依赖主键,并且要直接依赖;不能传递依赖,如果有,也要拆分表
create table goods (
id int unsigned primary key auto_increment,
name varchar(150) not null,
cate_name varchar(40) not null,
brand_name varchar(40) not null,
price decimal(10, 3) not null default 0,
is_show bit not null default 1,
is_saleoff bit not null default 0
);
----------------- SQL 强化
-- 求所有电脑产品的平均价格,并且保留两位小数
select round(avg(price),2) as avg_price from goods;
-- 查询所有价格大于平均价格的商品,并且按价格降序排序
select * from goods where price >
(select avg(price) as avg_price from goods)
order by price desc;
-- 查询类型cate_name为 '超极本' 的商品名称、价格
select name, price from goods where cate_name='超级本';
-- 显示商品的种类
select distinct cate_name from goods; -- 会按出现的顺序显示
select cate_name from goods group by cate_name; -- 会按照cate_name排序
-- 显示每种商品的平均价格
select cate_name, avg(price) from goods group by cate_name;
-- 查询每种类型的商品中 最贵、最便宜、平均价、数量
select cate_name, max(price), min(price), avg(price), count(*) from goods group by cate_name;
-- 查询每种类型中最贵的电脑信息*********************
select * from goods where (cate_name, price) in
(select cate_name, max(price) from goods group by cate_name);
select * from goods inner join
(select cate_name,max(price) as max_price from goods group by cate_name) as g
on goods.cate_name=g.cate_name and goods.price=g.max_price;
----------------------------------------------------拆表
-------------------------- "商品分类"
---- cate_name 是非主键,但是不依赖于主键goods.id,不符合3NF
-------------- 1.创建 "商品分类"" 表
create table if not exists goods_cates(
id int unsigned primary key auto_increment,
name varchar(40) not null
);
-- 查询goods表中商品的种类
select distinct cate_name from goods;
select cate_name from goods group by cate_name;
-- 将分组结果写入到goods_cates数据表*********************
-- 错误 :insert into goods_cates(name) values(select cate_name from goods group by cate_name);
insert into goods_cates(name) select cate_name from goods group by cate_name;
-------------- 2.同步表数据 *******************
update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;
-------------- 3.修改表goods表结构 *****************
alter table goods change cate_name cate_id int unsigned not null;
alter table goods add [constraint `约束名`] foreign key (cate_id) references goods_cates(id);
-------------------------- "商品品牌"
---- brand_name 是非主键,但是不依赖于主键goods.id,不符合3NF
-------------- 1.创建 "商品品牌"" 表,并直接从goods表中导入数据*********
create table if not exists goods_brands (
id int unsigned primary key auto_increment,
name varchar(50) not null
) select brand_name as name from goods group by brand_name;
-------------- 2.同步数据
update goods as g inner join goods_brands as b on g.brand_name=b.name set g.brand_name=b.id;
-------------- 3.修改表goods的表结构
alter table goods change brand_name brand_id int unsigned not null;
alter table goods add foreign key (brand_id) references goods_brands(id);
-------------------------------------
外键和主键的区别:
外键受唯一性约束,也就是说外键不一定就是其他表的主键,可能是其他表中一个普通的列,但是这个列必须是unique的。
但通常情况下外键就是其他表中的主键。
主键本来就是unique的,而且是not null的,它受唯一性约束和非空约束。
-------------------------------------删除外键约束
alter table goods drop foreign key 约束名称;
3sql的更多相关文章
- Ibatis学习总结3--SQL Map XML 映射文件
在前面的例子中,只使用了 SQL Map 最简单的形式.SQL Map 的结构中还有其他更多 的选项.这里是一个 mapped statement 较复杂的例子,使用了更多的特性. <sqlMa ...
- Oracle性能优化3-sql优化一定要等价
做sql优化的前提瞧见是sql等价 1.MAX MIN写法的分与合 drop table t purge; create table t as select * from dba_objects; a ...
- 关于面试总结3-SQL查询
前言 select top n 形式的语句可以获取查询的前几个记录,但是 mysql没有此语法,mysql用limit来实现相关功能. LIMIT子句可以被用于强制 SELECT 语句返回指定的记录数 ...
- sqlserver学习3---sql函数
一.SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新 ...
- 数据库系统概论学习3-SQL 语句和关系代数(一)SQL 入门
3. SQL 语句和关系代数(一)SQL 入门 3.1 数据库的编程语言 SQL 的优点 SQL 集成了数据查询(data query).数据操作(data manipulation).数据定义(da ...
- PHP代码审计3-SQL注入,CSRF,动态函数执行与匿名函数执行,unserialize 反序列化漏洞,变量覆盖,文件管理,文件上传
SQL注入 审计语句 [输入参数] SELECT,DELETE,UPDATE,INSERT 防御 转义: 1.开启gpc:判断解析用户提示的数据 2.mysql_real_escape_string( ...
- MySQL基础3-SQL语言
1.DQL语句分类 重点在于Select语句 2.Sql语句的书写规则 3.怎样使用Navicat导入已经写好的sql文件 (1)在Navicat中右击选中的数据库 (2)将sql文件所在的路径添加进 ...
- 3-SQL过滤
# 筛选最大生命值大于6000,最大法力值大1700的英雄,然后按照二者之和从高到低进行排序 SELECT NAME , hp_max, mp_max FROM he ...
- 数据库sql优化总结之3--SQL优化总结
SQL是每个Java程序员必回的一项技能, 对于项目中的各种复杂业务, 你是否能写出高效率, 简洁的SQL对于项目的运行效率和稳定性是有非常大的作用的. 通过个人的理解和网上的资料总结了一下常见的S ...
随机推荐
- JavaFX简介和Scene Builder工具的安装使用简易教程
JavaFX概述和简介 富互联网应用是那些提供与Web应用程序类似的功能,并可作为桌面应用程序体验的应用.与用户的正常网络应用程序相比,它们提供更好的视觉体验.这些应用程序可作为浏览器插件或作为虚拟机 ...
- vue之页面缓存问题(基于2.0)
为什么会有这篇文章 在vue2.0中出现了列表页面是每次都重新加载数据,但是详情页面却只在第一次加载的时候调用数据,如果返回到列表再进入详情那么页面是不会重新渲染页面. 1 用vue-router 重 ...
- yum安装PHP升级到7.1版本
yum安装PHP升级到7.2版本卸载原来低版本的PHP rpm -qa |grep php|xargs rpm -e 更新yum源 //CentOS/RHEL 7.xrpm -Uvh https:// ...
- Everything 信息泄露
google语法: inurl:Diagnostics/index 这个无意间看到别人找到的,其实是everything自带的http服务器功能开启了忘记关,算是管理员自己的疏忽 可以看到开了ever ...
- 学习笔记22_AspMvc简介
*Mvc和webForm区别 1. Mvc模式下,前台和后台的交流,是后台提供数据,使用对象包裹的形式,前台来使用,类似于webForm定义一个属性那样. 2.Mvc模式下,再也不是使用this.la ...
- [考试反思]0825NOIP模拟测试31:喘息
好吧,我又活了 大脸又. 240,220,210,200,200... T1是个不会证明的傻子找规律算上看了一遍三道题之后一共20分钟搞定. skyh打的是错的可是成功qj全部测试点得到AC(会被手模 ...
- C/C.cpp
我是怎么说服自己这题没有答案单调性的? 当轮数大于最优答案时,B的操作就成了捣乱,会使A多进行若干操作才能回复原状态 嗯,所以答案没有单调性. 就没去想A的操作可以把B的抵消啊.. 另外swap没有交 ...
- 品优购(IDEA版)-第二天
品优购-第2天 学习目标 目标1:运用AngularJS前端框架的常用指令 目标2:完成品牌管理的列表功能 目标3:完成品牌管理的分页列表功能 目标4:完成品牌管理的增加功能 目标5:完成品牌管理的修 ...
- zabbix 4.2 的安装和设置(mysql57----centos7)
一.安装RPM [root@localhost ~]# rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release ...
- 高性能Web动画和渲染原理系列(5)合成层的生成条件和陷阱
目录 一. 硬件加速相关的几个概念 二. 合成层的生成条件 显式提升 隐式提升 三. 硬件加速的权衡 四. 动画实现的一些建议 示例代码托管在:http://www.github.com/dashno ...