java基础17(Javaoo12)——数据库

数据库(Data Base----DB):
-----作图是用圆柱表示。
数据在数据库中的存储形式:
-----关系模型。(比较广泛的)
-----对象模型。
-----------------------------------------------------------------------------------------
数据库:一种技术,以关系型模型的方式来存储数据的仓库。

关系型数据库管理系统(RDBMS):
1.Oracle(Oracle)
2.DB2(IBM公司)
3.SQL Server (微软)
4.My SQL
………………
---------- 1,2 是大型级别的,重量级的。
3 中型
4.JavaEE首选数据库
4.My SQL.
包含DB(数据库)。
1>系统库
2>用户库
创建数据库:
CREATE DATABASE 数据库名字
名字不能有相同。 第一个字符:字母下划线@,数字符号#
后续字符:数字,字母,@,$,数字符号或者下划线。
------------数据库语句不区分大小写。
删除数据库:
drop database 数据库名字;
使用数据库:
use 数据库名字;

=================================包含表(table)

表操作:
--整型
MIDDLEINT----3位int。
--浮点数据:
DECIMAL(M,D) M为总位数,D为小数位。M必须大于D。--30位小数。
--字符串:
CHAR(N)
VARCHAR(N)----------N表示最大可以装多少位
--二进制数据
BLOB-- TINYBLOB() 0-255
BLOB 65K
MEDIUMBLOB 16M
LONGBLOB 4G
--布尔数据类型
没有BOOLEAN 使用TINYINT(1)--------0,1
--日期数据类型
YEAR DATA TIMESAMP DATATIME

创建表:
create table t_表名(pk_xxxid 数据类型,f_xxxxx 数据类型, ……);
用逗号隔开。
主键字段要加 PK_
其余字段要加f_
show tables ; 显示表。
主键约束: pk_数据类型 PRIMARY KEY, 这样就添加了主键约束。
或者:
在最后
primary key(s_id)-----也是主键约束。
不是固定只有1列,也可以是两列或者多列组合,但是只要保证唯一就可以了。
普通约束: f_xxxxx 数据类型 + unique not null
---唯一且非空约束。
默认约束:f_xxxxx 数据类型 +default +默认数据
检查约束:f_xxxxx 数据类型 +check( f_xxxxx >xx )
My SQL不支持检查约束。
删除表:
drop table +表的名字;
修改表:
增加:alter table +表的名字 add 增加的字段名字+数据类型;
更改:alter table +表的名字 change 改变的字段的原名字 +改变后的新名字+新类型+新
约束
更改多个可以在change 后面完了后逗号再写一个change。
add同上。
表与表的关系:
1.一对一关系
只需要某一张表上有外键字段,并设置外键约束,和唯一约束。
外键 fk_ xxxxx
2.一对多关系
在-多方-表身上有外键字段,并设置外键约束。
---------- 设置默认约束的时候应该先创建主表,再创建从表。
3.多对多关系
必须设计一张中间表来作为关系存放表,关系表当中设立双方的外键字段,并设置
外键约束。
--------- 最后写关系表。
----------------------------------------------在建表的时候写上:
engine=innodb
才能接受外键约束。


------------------------------------------------------------------------------
数据库语句:
SQL语句:
1.DDL语句 → 创建, 删除,使用
表:创建,删除,修改
-------------→数据库及数据库中表的结构
2.DML语句 →对数据的增删改

使用insert语句添加数据
===========================
insert into 表名 (列列表)
values(值列表);
字符串的值要用 单引号或者 双引号引起来。
也可以省略(列列表),但是值列表就必须要和表中的所有列值对应(少
用)。
---------------------------

使用update语句修改数据
============================
update 表名 set 要修改的字段 = 新值,列名=新值;(修改列中所有行)
-------------------------------------------
update 表名 set 要修改的字段 = 新值,列名=新值
where 需要改的行字段 = 多少 ;(过滤字段 <,>……)
不等于符号为: <>
这个也可以多条件查询修改。中间用 and 连接
也有或条件查询修改, or 连接
(赋值为空可以用来操作删除一些内容-非null不行)

使用delete语句删除数据
============================
delete from 表名 where 过滤条件;


3.DQL语句 →对各种数据的查询
-----------------------------------------------------------------------------------------------
1>简单查询的投影操作
指定查询结果中显示的哪些列
2>简单查询的选择操作
指定哪些行出现在结果中
3>简单查询的排序操作
指定查询结果以什么样的顺序显示

DQL标准结构:
select 列名 from 表名 where 条件过滤(多条件也是用and或者or连接)
order by+以哪个字段排序(默认升序); ----如果要降序就在后面加上desc
asc是升序。
order by+第一排序字段,第二排序字段;

date 的表示和varchar的表示方式一样 需要 ‘ ’ ,在比较where的时候

可以在列名前面加上表 前缀 如:t_player.f_name 这样查询更准确(
主要用在多表查询,有相同的名字)

也可以给表的列名起 别名,只影响映射部分,不影响实际的表。
语法为: t_player ad xxxx 在from后在加上
同理列也可以起别名。
列的别名在where的时候不能用,列的别名在后面投影中查找元素中的使用。

concat('xxxx','xxx',f_name)
完成 字符串之间的连接

排出重复项目:
需要保证返回唯一的数据的时候,。
在要排出重复项目的前面加上 distinct

返回限定行(分页操作):
关键字:limit + 开始序号 +,+ 返回行数
序号是从0开始的
---最后一页 剩多少返回多少。no err
where 语句:
关键字:between 下限 and 上限
在什么之间 包括上限下限。
in(xxxx1,xxxx2)
in是值的匹配,表示满足其中一个才行,多个逗号连接
noin(xxxx1,xxx2)
noin则就是不在这几个值之中。
模糊匹配:
关键字:like
"_" 通配符 一个下划线代表一个字符。
%加在前面 表示不知道多少个字符
加在前后,则表示前后字符不确定。
都要用单引号引起来。
处理空值数据:
is null / is not null 不用 = 和 <>
-------------------------------------------------------------------------------
聚合函数与分组:
1.count :统计行数量 -----------------满足条件的行数
2.sum :获取单个列的合计值--------
3.avg :计算某个列的平均值
4.max :
5.min :

1.count
select count (* /all 列 / distinct 列) from 表名
* 有多少行是多少行 包括null
all +列 ------则是用某列来计算不为空的有多少行
distinct +列 -----则是用来统计 去掉重复数据的该行非空行数
2.sum
select sum(all+列 /distinct+列) from 表名
没有*
3.avg
avg也只有all和distinct两种规范。
注意:如果有的数据为空。那么数据就会有误差。
如果要正确计算,还是要用sum /count(*)
4.max/min
select max(列名)from 表名
没有all distinct 两种规范。
-----------------------------------------------------------------------------
数据分组:
select 列A 聚合函数 from 表名
where 过滤条件
group by 列A(可以多列)
注意:select 后面的列一定填的是分组列。

在有分组的SQL语句中,投影的列就会有限制,
要求select满足就2个列:
1.使用聚合函数的列
2.该列在group by 子句中
---------------------------------------------------------
在分组之后还能进行过滤与where 一样的效果 只是实现时间不一样
关键字: having
写在group by 之后
执行顺序:
1.from
2.where
3.group by
4.select 投影
5.having
6 order by
-----------------------------------------
子查询和组合查询:
1.from 嵌套
2.where 嵌套
3.group by 嵌套
4.select 嵌套
5.having 嵌套
6 order by 嵌套
---------------------------------
1.select 嵌套
要求:返回只能是单行单列的。单对单
2.from 嵌套
用子查询的表作为基础表中进行再次查询
这个查询可以是多行多列
3.where 嵌套
让某一列等于一个子查询的结果
子查询返回的结果只能是单列或者单行
(比如 in关键字就可以去在其中的,单列或者多行)
ALL运算符(子查询) ----表示怎么怎么所有的子查询结果才满足
ANY运算符(子查询)----表示比其中一个的怎么怎么的就满足了
exsits/not exsits 运算符 (子查询) 表示和其中一个的结果相同
和in的效果差不多。
4. ----------其余的用的地方比较少。
为了使用不混乱, 可以在写代码的时候加上t_xxxx. 前缀就很清晰了
==================================================
子查询分类:
1.相关子查询(SELECT )
外部查询一行,内部就要查一次--------性能比较低
2.非相关子查询(from)
子查询总共执行一次
-----------------------------------------------------------------------------------------
union 运算符:联合两条或者以上查询的 运算符。
将两个的查询结果连接在一起,表头显示第一个的表头。
上下列数不匹配会报错。
上下类型不匹配,会出现乱码。
============================================================
联接:

什么是表连接:将多个表联合在一起实现查询效果。
表连接原理:采用笛卡尔乘积合成一张新表,产生临时大表。很多数据是错误的,需要
用外键来删除
在数据库中使用关键字:join
select 列1 ,列2 from 表1 join 表2 on 表1.列 = 表2.列
是外键和pk键列
两表联接 容易出现相同列名,用表前缀来进行分隔。
分类:
内联接
使用比较运算符根据每个表共有的列的值匹配两个表中的行
标准语法是: inner join (inner可以省略)
----也有语法:
select xxx from 表1,表2 where 表1.列 = 表2.列
外联接
被定义了外连接的表数据,就表示左边或者右边的数据一定要留下来,无论配的上右
边的数据不。匹配不上的数据就留空。
左外联接
left join
右外联接

自联接
就是內联接和外联接的一种特例,同样可以使用 inner join 或者 outer join
自联接索联接的信息来自于同一张表。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值