Java开发系列-MySQL
2018-08-12 23:45 iCoderHong 阅读(297) 评论(0) 编辑 收藏 举报概述
数据库 | 公司 | 特点 |
---|---|---|
Mysql | Oracle | 开源的数据库 社区版免费 商业版是收费的 |
Oracle | Oracle | 大型的 收费的数据库 |
DB2 | IBM | 大型的 收费的数据库 一般用于银行系统 特点主要它的硬件比较稳定 |
sqlserver | 微软 | 中型的收费的数据库 c++开发者使用 |
MySQL是属于关系型数据库 ,而Oracle 是属于非关系型数据库(直接存储对象)。 |
MySQL语句
基本语句
-- 创建数据库
CREATE DATABASE mydb;
-- 创建表
CREATE TABLE USER (
uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) DEFAULT NULL
);
-- 插入数据
INSERT INTO USER VALUES(NULL, 'tom');
-- 更新数据
UPDATE USER SET username = 'rose' WHERE id = 1;
-- 删除表
DROP TABLE USER;
-- 删除表中的所有数据
DELETE FROM USER;
-- 查询表中所有数据
SELECT *FROM USER;
聚合函数
对一列进行计算 返回值是一个,忽略null值, sum(), avg(), max(), min(), count();
-- .获得所有商品的价格的总和
SELECT SUM(price) AS totalPrice FROM product;
-- 获得商品表中价格的平均数:
SELECT ROUND(AVG(price), 2) AS vagprice FROM product;
-- 获得商品表中有多少条记录
SELECT COUNT(*) FROM product;
分组查询
-- 根据cno字段分组,分组后统计商品的个数
SELECT cno, SUM(price)FROM product GROUP BY cno;
-- 根据cno分组,分组统计每组商品的总数量,并且总数量> 200;
SELECT cno, SUM(pnum) FROM product GROUP BY cno HAVING SUM(pnum) > 200;
-- 获得商品表中有多少条记录:
select count(*) from products;
注意:having
与where
的区别 1.where 是对分组前的数据进行过滤 ;having 是对分组后的数据进行过滤 2. where 后面不能使用聚合函数,having可以
排序查询
-- 查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
SELECT *FROM product ORDER BY price ASC;
-- 查询名称有"新"的商品的信息并且按价格降序排序
SELECT *FROM product WHERE pname LIKE '%新%' ORDER BY price DESC;
分页查询
limit n, m; 从第n条记录开始查询m条数据。
SELECT *FROM product LIMIT 0, 2;
SELECT *FROM product LIMIT 2, 2;
SELECT *FROM product LIMIT 4, 2;
SELECT *FROM product LIMIT 6, 2;
确定好PageSize,做某一页分页查询的数据公式
limit (n-1)*pageSize pageSize
MySQL表设计
在MySQL中存在三种关系:一对一,一对多,多对多。
一对多
比如开发中用户与订单的关系,对于一表我们也可以称之为主表
,而多表称之为从表
。遵循的设计原则从表中添加一个外键对应主表的主键。
-- 用户表
create table user(
id int primary key auto_increment,
username varchar(20)
);
-- 订单表
create table orders(
id int primary key auto_increment,
totalprice double,
user_id int
);
为了保证数据的有效性和完整性,添加约束(外键约束).
-- alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);
alter table orders add foreign key(user_id) references user(id);
- 添加了外键约束之后有如下特点
- 主表中不能删除从表中已引用的数据
- 从表中不能添加主表中不存在的数据
多对多
比如: 订单与商品的关系。
-- 创建商品表
-- 创建商品表
create table product(
id int primary key auto_increment,
name varchar(20),
price double
);
-- 创建中间表
create table orderitem(
oid int,
pid int
);
-- 添加外键约束
alter table orderitem add foreign key(oid) references orders(id);
alter table orderitem add foreign key(pid) references product(id);
开发中处理多对多:引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,这样就可以将多对多的关系拆分成两个一对多了
多表查询
笛卡尔积
多张表无条件的联合查询.没有任何意思
select a.*,b.* from a,b;
内连接
-- 显示的内连接
select a.*,b.* from a [inner] join b on ab的连接条件
-- 隐式的内连接
select a.*,b.* from a,b where ab的连接条件
外连接
-- 左外连接
select a.*,b.* from a left [outer] join b on 连接条件;
先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展示出来,不符合以null值展示.
-- 右外连接
select a.*,b.* from b right [outer] join a on 连接条件;
先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示.
子查询
一个查询依赖另一个查询. 用()连接。