Java(mysql数据库)

一.DDL,DML,DQL概念

DDL:数据库定义语言,操作数据库中对象,数据库,表,列
    ***创建数据库
        create database 数据库名;# 以默认的编码创建数据库
        create database 数据库名 charset 编码名;
        create database 数据库名 character set 编码名;
    ***创建表
        create table 表名(
            字段1 数据类型(长度) [约束],
            字段2 数据类型(长度) [约束]
            );    
        约束:
            主键约束:primary key,该列的值必须唯一,并且不为空
            自动增长列约束:auto_increment 该列值交给数据库维护

ps:几个约束:
    主键约束:primary key
    唯一约束:unique
    非空约束:not null
    默认约束:default 值
    自动增长约束:auto_increment

DML:数据库操作语言,操作数据库表中数据,对数据进行增删改
    ****添加一条记录
        insert into 表名 (列名1.列名2..) values (值1,值2..);
        注意:
            1.列名和后面的值 必须一一对应
            2.(列名1.列名2..) 这里的列名可以写一个或者多个
            3.如果要写全列名,可以省略不写
            4.如果值是数字类型的可以不加'',否则必须加上'' 或者 ""
    ****删除一条记录
        delete from 表名;# 删除表中所有数据,不会重置自动增长值
        truncate table 表名;#删除表所有数据,先把表摧毁再重建
        delete from 表名 where 条件;# 这里条件和查询共用
    ****修改一条记录
        update 表名 set 字段名=值,字段名=值;#表中所有记录的字段都修改了
        update 表名 set 字段名=值,字段名=值 where 条件;# 这里条件和查询共用

DQL:数据库查询语言,操作数据库表中数据,对数据进行查询
    ***基本查询:
        格式:select distinct *|字段1,字段2 from 表名;
    ***条件查询
        比较条件
            >,<,>=,<=,<>,=
            between xx and xx (含头行尾)
            in (值1,值2)
            like '_a%' 模糊查询
            is null ,is not null 判断空或者不空
        逻辑条件
            与 and
            或 or
            非 not

ps:乱码问题, 在DOS创建 查询uft8编码的数据库数据时,会出现乱码
        解决方案:
            临时方案:set names gbk;//临时地把告诉数据库 我们用gbk来查询
            永久方案:修改 my.ini的配置文件(不建议)

二.查询

    基本查询:不加条件的查询
    条件查询:增加where条件的查询
    
    排序查询: order by 
        select * from 表名 order by 字段名 ASC(默认)|DESC;
        此处的字段,最好是有大小关系的,比如是数值,单文单词
    
    聚合查询: 纵向查询,查询出的结果就一个
        COUNT:统计个数,忽略NULL值
        求数值类型
        MAX:求最大值
        MIN:求最小值
        AVG:求平均值
        SUM:求总和
    
    分组查询: group by
     select count(*)| sum(price) from 表名 group by 字段名 having 条件;
     where和having区别:
     where用于基本查询后数据过滤,针对的是一张表
     having用于分组查询后的数据过滤,针对不同的组(表),而不是一张表


    分页查询: limit 序号,记录数(索引从0开始
        查询第m页的n条记录
        limit (m-1)*n,n

三.表关系

一对多(多对一)关系:
        建表原则:有主表,有从表,从表必须有一个外键,引用到主表的主键

ps:属于数据库第三范式,解决了一张表上的非主属性之间存在依赖关系,造成与主属性之间的传递依赖关系,通过分表在从表上建立外键与主表上的主键进行关联起来。(从表是多,主表是一


多对多关系:
        建表原则:通过一个中间表把多对多关系分成两个多对一关系。中间表至少三个字段
            1.一个主键 2.两个外键(分别关联两张表)

ps:属于数据库BCNF范式,解决主属性之间的传递依赖关系和不完全依赖关系,通过主属性之间构建中间表的形式,把多对多关系分成多对一关系,来解决的。


一对一关系:
        一般我们建立一张表!

总结

        不管是一对多还是多对多关系,都是处理了重复数据,冗余数据的问题,通过分表加外键关联可以解决。

四.表连接

交叉连接查询
        语法:
        select * from 表1,表2;
        总字段 =  表1字段+表2字段
        总记录数= 表1记录数*表2记录数
        交叉查询是没意义的,实际上是一个笛卡尔积
    
内连接查询: inner join,以两个表的列为基础,任何一列都不能为null否则不会查询出来。
        隐式内连接查询:不写关键字 inner join
            select * from 主表,从表 where 主键.主键 = 从表.外键
        显示内连接查询:写上关键字 inner join 
            select * from 主表 inner join 从表 on 主键.主键 = 从表.外键

   
外连接查询: outer join,以某一个表的列为基础,不能为空但是另一个表的列可以为空。
        左外连接: left outer join
            左外连接 以左表为准,左表中的数据必须每条都有
        右外连接: right outer join

ps:全连接是内连接和外连接进行集合的结果。详细:https://www.cnblogs.com/superAng/p/5607079.html

总结

与表连接相对应的是子查询,区别是表连接会构造一个临时表,而子查询不会构造而是表里查询。

子查询分为:相关子查询和不相关子查询。

相关子查询:外查询的键与内查询的键构成了关系,会扫描n遍表

不相关子查询:外查询的键与内查询的键无关系,只会扫描一遍表

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值