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 ...
随机推荐
- 修改List<Map<String, Object>>的值
List<Map<String, Object>> aList = new ArrayList(); //加入一个Map元素Map map = new HashMap();m ...
- 媒体查询文字大小.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 按钮组件.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- apply 、 call 、 bind的用法
1.apply 方法 apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. apply方法最多只能有两个参数——新 ...
- windows下搭建开发环境
PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...
- Nmap的一些常用的nse脚本
转自freebuf.com/ 点击跳转 在这篇文章中,我们将研究最著名的渗透工具之一 Nmap 一款标志性的跨平台扫描器.它的原意为Network Mapper(网络映射器),具有相当强大的扫描功能 ...
- Netty连接处理那些事
编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等,针对高性能RPC,一般都是基 ...
- P3043 [USACO12JAN]牛联盟(并查集+数学)
(m<n<=1e5,有重边) 题目表述有问题..... 给定一张图(不一定联通),每条边可以选择连接的两个点之一,剩余的点可以自己成对,问方案数. 一开始是真的被吓到了....觉得可写性极 ...
- Chrome DevTools调试微信X5内核页面
起因:公司最近在做一个双十一的H5宣传页面,大概需求就是模拟微信视频来电,接通视频后弹出某某明星的视频巴拉巴拉@#%!!!~.看到需求我的第一反应是So easy,正当我码代码码的开心的时候,难题他来 ...
- What's your name?
Hello. My name is james. What's your name? Hi, I'm Jessica. Nice to meet you. Nice to meet you, too. ...