Java开发系列-MySQL
概述
| 数据库 | 公司 | 特点 | 
|---|---|---|
| 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值展示.
子查询
一个查询依赖另一个查询. 用()连接。
Java开发系列-MySQL的更多相关文章
- 【java开发系列】—— JDK安装
		
前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行j ...
 - Java开发系列-文件上传
		
概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...
 - Java开发系列-JDBC
		
概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...
 - 【java开发系列】—— struts2简单入门示例
		
前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...
 - 【java开发系列】—— 自定义注解
		
之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注 ...
 - 【java开发系列】—— Tomcat编译报错
		
由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...
 - Java开发系列-注解
		
概述 在JDK5之后提供了一个新特性,和类.接口同级.定义时使用的关键字是@interface.注解主要有三个作用,分别是编译检查.替代配置文件.定义注解(元注解).分析代码(用到反射).注解的本质就 ...
 - Java开发系列-JSP
		
概述 JSP是java 服务器页面,它运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下. JSP主要作用是将内容的生成与页面相分离. JS ...
 - 【java开发系列】—— spring简单入门示例
		
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
 
随机推荐
- thinkphp 防止XSS(跨站脚本攻击)
			
XSS(跨站脚本攻击)可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案: 直接过滤所有的JavaScript脚本: 转义Html元字符,使用htmlentities.htm ...
 - 代码格式化工具---prettier配置
			
我自己的常用 prettier 配置如下: // .prettierrc 文件 // 这里修改的都是与默认值不同的,没有修改到的就是启用默认值 // .prettierrc 文件是使用 json 格式 ...
 - BZOJ 3534: [Sdoi2014]重建(Matrix Tree)
			
传送门 解题思路 比较容易看的出来矩阵树定理.然后就怒送一Wa,这个矩阵树定理是不能直接用的.题目要求的其实是这个玩意. \[ ans=\sum\limits_{Tree}( \prod\limits ...
 - luoguP4768 [NOI2018]归程
			
传送门 kruskal重构树: kruskal合并两个联通块时合并的边一定是联通块中权值最大的边,小于等于这条边的边所能联通的所有点在这个联通块中. 在合并两个联通块的时候新建一个点作为两个联通块代表 ...
 - 尚学python课程---15、python进阶语法
			
尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...
 - git 安装 使用过程遇到的问题
			
git add "文件名"->git commit -m 'add' ->>git push origin develop 1.git基础之切换分支 选择gi ...
 - Excel的数据分析—排位与百分比
			
Excel的数据分析-排位与百分比 某班级期中考试进行后,按照要求仅公布成绩,但学生及家长要求知道排名.故欲公布成绩排名,学生可以通过成绩查询到自己的排名,并同时得到该成绩位于班级百分比排名(即该同学 ...
 - mvn clean package:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12
			
原文地址:https://www.cnblogs.com/lxcy/p/8279899.html 事故现场: 解决办法: 一是命令行, mvn clean package -Dmaven.test.s ...
 - Soldier and Number Game-素数筛
			
Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and giv ...
 - 剑指offer——26反转链表
			
题目描述 输入一个链表,反转链表后,输出新链表的表头. 题解: 每次只反转一个节点,先记住cur->next, 然后pre->cur,即可; class Solution { pu ...