概述

数据库 公司 特点
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;

注意:havingwhere的区别 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的更多相关文章

  1. 【java开发系列】—— JDK安装

    前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行j ...

  2. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  3. Java开发系列-JDBC

    概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...

  4. 【java开发系列】—— struts2简单入门示例

    前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...

  5. 【java开发系列】—— 自定义注解

    之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注 ...

  6. 【java开发系列】—— Tomcat编译报错

    由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...

  7. Java开发系列-注解

    概述 在JDK5之后提供了一个新特性,和类.接口同级.定义时使用的关键字是@interface.注解主要有三个作用,分别是编译检查.替代配置文件.定义注解(元注解).分析代码(用到反射).注解的本质就 ...

  8. Java开发系列-JSP

    概述 JSP是java 服务器页面,它运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的word目录下. JSP主要作用是将内容的生成与页面相分离. JS ...

  9. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

随机推荐

  1. LUOGU P1501 [国家集训队]Tree II (lct)

    传送门 解题思路 \(lct\),比较模板的一道题,路径加和乘的维护标记与线段树\(2\)差不多,然后剩下就没啥了.但调了我将近一下午.. 代码 #include<iostream> #i ...

  2. NX二次开发-UF_MODL_intersect_objects获取两个对象的交点

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> #include < ...

  3. 简单理解vue的slot插槽

    slot的意思是插槽,想想你的电脑主板上的各种插槽,有插CPU的,有插显卡的,有插内存的,有插硬盘的,所以假设有个组件是computer,其模板是 <template> <div&g ...

  4. ionic:创建 APP

    ylbtech-ionic:创建 APP 1.返回顶部 1. ionic 创建 APP 前面的章节中我们已经学会了 ionic 框架如何导入到项目中. 接下来我们将为大家介绍如何创建一个 ionic ...

  5. windows中无法访问共享问题

    http://jingyan.baidu.com/article/456c463b66d9320a5831448b.html 很多情况下我们遇到我们设置的共享没有密码别人无法访问,为此为大家推荐几步操 ...

  6. 去除vim ^M符号

    来自: https://zhidao.baidu.com/question/267905868.html 有两种情况,会出现打开的文件都显示^M符号:1. vim被配置为fileformat=unix ...

  7. Python3实用编程技巧进阶✍✍✍

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  8. numpy基本函数

    在学习python的时候常常需要numpy这个库,每次都是用一个查一个,这个,终于见到一个完整的总结了http://blog.csdn.net/blog_empire/article/details/ ...

  9. 21个CSS技巧

    级联样式表(CSS)在当代Web设计中已经成为重要的环节,如果没有CSS现在的网站将像10年前一样不堪入目.随着CSS技术的普及,越来越多的高质量CSS教程涌入互联网,让我们的学习更加方便. 1.CS ...

  10. @Formula

    @Formula  计算临时属性. 相当于可以关联查询字段,然后放在实体中当做属性使用. 任务:在User实体层,增加一个额外的属性,来获取Test表中的name字段. 1 表结构 User表 Tes ...