java学习笔记之mysql2

mysql

#-----sql指令的查询----------(重点)
#1 排序(order by) ASC:升序 DESC:降序
#SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;
#按照价格进行升序排列
SELECT * FROM product ORDER BY price ASC;
SELECT * FROM product ORDER BY price; #默认是升序
#按照价格进行降序排列
SELECT * FROM product ORDER BY price DESC;
SELECT price FROM product ORDER BY price DESC;
#去除重复的数据
SELECT DISTINCT price FROM product ORDER BY price DESC;
SELECT * FROM product ORDER BY price DESC;

#先按照价格降序排序,如果价格一样,则按照category_id降序
SELECT * FROM product ORDER BY price DESC, category_id DESC;
#按照category_id进行降序排列
SELECT * FROM product ORDER BY category_id DESC; #字符串按照字典顺序与排列

#2 聚合函数: 函数:function 方法:method
#count(): 统计 sum():求和 max() min() 最大和最小值 avg():平均值
#统计有多少种商品名
SELECT COUNT(pname) FROM product; #该函数不会统计NULL值
#统计商品的条数目
SELECT COUNT(*) FROM product; # 只要有一列不是NULL,则就会统计
#查询价格大于200商品的总条数
# from ---> where --->count ---->select
SELECT COUNT(*) FROM product WHERE price > 200;

#查询分类为'c001'的所有商品价格的总和
#求和都是数值类型,其他类型没有意义
SELECT SUM(price) FROM product WHERE category_id = "c001";
#查询分类为'c002'所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_id = "c002";
#查询商品的最大价格和最小价格
SELECT MAX(price)"最大价格",MIN(price)"最小价格" FROM product;

#字符串的最大值和最小值是按照字典顺序的最大值和最小值来定的
SELECT MAX(category_id),MIN(category_id) FROM product;
#3 分组查询(group by)
#SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段 HAVING 分组条件;
# 统计各个分类商品的个数
#from --->GROUP BY --->count --->select
SELECT category_id, COUNT(*) FROM product GROUP BY category_id;

#统计各个分类商品的个数,且只显示个数大于2的信息
#mysql固定,如果分组之后,对分组后的结果再进行条件判断,不能使用where,要使用having
SELECT category_id, COUNT(*) "c" FROM product GROUP BY category_id HAVING c >2;
#4 分页查询(LIMIT)
# SELECT 字段1,字段2... FROM 表名 LIMIT M,N
#M:表示从哪一行开始显示(行索引:从0开始)
#N: 表示要显示多少行(固定)
SELECT * FROM product LIMIT 0, 5; # 1- 5
SELECT * FROM product LIMIT 5, 5; # 6- 10

 



#--- 表与表之间的关系--------
#1 一对一关系:A,B A表的一行对应B表一行
#由于1对1关系可以合并成一张表,所以很少用
#2 一对多关系:A,B A表的一样对应B表多行

#3 多对多关系: A,B A表的一行对应B表多行,B表一行对应A的多行




#一对多的关系
#1 建立主表(分类表)
CREATE TABLE category(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20)
);
#2 建立从表(商品表)
CREATE TABLE product(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20),
price DOUBLE,
category_id INT #外键列:类型必须和主表的主键类型一致
);
#3 建立外键关联 (foreign key)
# alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名)
# references 主表 (主表的主键);
ALTER TABLE product ADD FOREIGN KEY(category_id) REFERENCES category(cid);

#4 给主表添加数据(随意)
INSERT INTO category VALUES(1,'电子'),(2,'服装');

#5 给从表添加数据(受主表的限制)
INSERT INTO product VALUES(NULL,'联想',5000,1);
INSERT INTO product VALUES(NULL,'耐克',300,2);
INSERT INTO product VALUES(NULL,'汽车',300,3);

#主表和从表的数据关系
#1 如果主表的数据被从表关联,则主表的数据不能删除,除非把从表的数据先删除
#2 主表的数据可以随意添加,从表的数据必须依赖主表


#多对多关系
#6 建立订单表(主表)
CREATE TABLE orders(
oid INT PRIMARY KEY AUTO_INCREMENT,
money DOUBLE 
);
#7 建立中间表 (从表)
CREATE TABLE product_orders(
pid INT ,
oid INT
);
#8 建立外键关联(2次)
ALTER TABLE product_orders ADD FOREIGN KEY(pid) REFERENCES product(pid);
ALTER TABLE product_orders ADD FOREIGN KEY(oid) REFERENCES orders(oid);

#9 给订单表添加数据(随意)
INSERT INTO orders VALUES(1,8000),(2,5000);
#10 给中间表添加数据(受限)
INSERT INTO product_orders VALUES(1,1),(1,2);
INSERT INTO product_orders VALUES(1,3);

 
原文地址:https://www.cnblogs.com/xuzhaocai/p/8146587.html