zoukankan      html  css  js  c++  java
  • 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;
    

    注意: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值展示.
    

    子查询

    一个查询依赖另一个查询. 用()连接。

  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/CoderHong/p/9465563.html
Copyright © 2011-2022 走看看