javaWeb系列之十一(数据库)

1.数据库的简介

常见数据库:

oracle:是收费

DB2数据库:收费,银行,

SQLServer数据库,中型的数据库

MySQL数据库:被Oracle

SQLite数据库,小型嵌入式的数据库,用在安卓

sybase数据库:没有使用,建模的数据库powerDesigner

都叫关系数据库:实体之间的关系

非关系数据库:mongodb redis

2.mysql的存储结构

数据库

数据库表:相当于javabean

表中的记录:相当于javabean里面的对象

3.标准sql:这种语句不仅可以在mysql数据库里面使用,

4.SQL语言的简介

Structured Query Language,结构化查询语言

非过程形语言:不需要依赖任何条件就可以执行

sql的分类

DDL :数据库定义语言:(Data Definition Language)用来定义数据库的对象,如数据表,视图,索引

DML :数据操作语言,(Data Manipulation Language)曾删改查 :update,

DCL :数据控制语言:Data Control Language 指用于设置用户权限和控制事务语句

如grant,revoke,if…else,while,begin transaction

=========官方分类===========

DQL:数据查询语言:Data Query Language

5.对数据库进行操作

要对数据库进行操作,首先连接数据库

执行这个命令的前提:mysql服务必须是启动的

打开cmd窗口,在窗口里面输入一个命令

mysql -u root -p

-u : username

-p :password

输入命令之后,当出现 mysql>,表示连接成功

创建数据库

语句:create database 数据库的名称;

查看数据库(显示当前所有的数据库)

语句:show databases

删除数据库

语句:drop database 要删除的数据库的名称;

切换数据库

语句:use 要进入的那个数据库的名称;

6.对数据库表进行操作

(1) 创建数据库表

如果想要创建表,首先要到某个数据库里面去

语句:

create table 表名 (

字段名称1 字段类型,

字段名称2 字段类型

);

向数据库表里面添加记录时候,如果记录类型是一个字符串类型或者日期类型,

注意一:字符串类型需要写长度

注意二:这两个类型的值必须使用引号括起来(单引号)

字段的类型

字符串型

VARCHAR、CHAR

如果把字段的类型设置成字符串类型,类型后面必须要加上长度 varchar(20) char(20)

VARCHAR和CHAR区别:

char类型长度是固定的

如果定义char(20),长度固定20,记录比如值aa,到数据库表里面存储的方式 aa加很多空格

varchar类型长度是可变的

如果定义varchar(20),记录值是bb,到数据库表里面存储方式:直接存bb,没有空格

大数据类型

BLOB、TEXT

主要用于存储文件到数据库,但是在实际应用中,不可能直接把文件存到数据库里面

数值型

TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

对应于java里面基本数据类型里面

byte        short    int long    float   double

逻辑性

BIT

对应于java基本数据类型的boolean

日期型

DATE、TIME、DATETIME、TIMESTAMP

data:只能表示日期

time:只能表示实际

==========================

下面两个类型既可用表示日期,也可以表示时间

datetime:需要手动输入日期的格式

TIMESTAMP:不需要手动输入,字段添加当前的日期到数据库表里面

创建一个员工表 employee

字段 属性

id int型

name 字符型

sex 字符型

bir 字符型

job 字符型

sal int型

语句

create table employee (

id int,

name varchar(40),

sex varchar(20),

bir varchar(40),

job varchar(40),

sal int

)

(2) 查看创建的表结构

语句:desc 表名称;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| name  | varchar(40) | YES  |     | NULL    |       |

| sex   | varchar(20) | YES  |     | NULL    |       |

| bir   | varchar(40) | YES  |     | NULL    |       |

| job   | varchar(40) | YES  |     | NULL    |       |

| sal   | int(11)     | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

关于desc语句的使用中问题

如果电脑上安装了杀毒软件,在某些情况下,这个语句不能执行,

卖咖啡,卡巴斯基....

(3)创建带约束的标签

约束有三种

第一种约束:主键约束

定义的类型后面

语句:primary key :非空,唯一性

自动增长:auto_increment

每次插入记录,自动增加一个值

比如添加第一条记录 自动添加一个值 1

比如添加第二条记录,在之前的基础之上+1

第二种约束:唯一性约束

这条记录值不能有重复的

定义的类型后面 unique

第三种约束:非空约束

表里面字段上面不能有空数据,必须有数据

语句 在name varchar(40) not null,

创建一个带约束的表

create table person (

id int primary key,

name varchar(40) not null,

sex varchar(20) not null,

bir varchar(40) not null,

job varchar(40) not null,

sal int

)

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   | PRI | NULL    |       |

| name  | varchar(40) | NO   |     | NULL    |       |

| sex   | varchar(20) | NO   |     | NULL    |       |

| bir   | varchar(40) | NO   |     | NULL    |       |

| job   | varchar(40) | NO   |     | NULL    |       |

| sal   | int(11)     | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

(4)删除数据库表

语句 drop table 要删除的表;

(5)查看数据库里面所有的标签

语句 show tables;

(6)向数据库表中添加记录操作

语句 insert into  要添加的表名称 values(要添加的值);

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| name  | varchar(40) | YES  |     | NULL    |       |

| sex   | varchar(20) | YES  |     | NULL    |       |

| bir   | varchar(40) | YES  |     | NULL    |       |

| job   | varchar(40) | YES  |     | NULL    |       |

| sal   | int(11)     | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

insert into employee values(100,‘lucy‘,‘nv‘,‘2015-11-11‘,‘worker‘,500);

查看表中的记录

语句 select * from 表名;

insert into employee values(100,‘lucy‘,‘nv‘,‘2015-11-11‘,‘worker‘,500)

insert into employee values(101,‘小黑‘,‘unknow‘,‘2011-01-11‘,‘door‘,1000)

insert into employee values(102,‘小白‘,‘nv‘,‘1911-11-11‘,‘it‘,2000)

insert into employee values(103,‘大白‘,‘nan‘,‘1811-11-01‘,‘aaa‘,100000)

+------+------+------+------------+--------+------+

| id   | name | sex  | bir        | job    | sal  |

+------+------+------+------------+--------+------+

|  100 | lucy | nv   | 2015-11-11 | worker |  500 |

+------+------+------+------------+--------+------+

(7)修改表中的记录操作

语句 update 表名 set 要修改字段名称=要修改成的值  where ....

练习

将所有员工薪水修改为5000元。

update employee set sal=5000;

将姓名为’lucy’的员工薪水修改为3000元

update employee set sal=3000 where name=‘lucy‘;

将姓名为’lucy’的员工薪水修改为4000元,job改为ccc。

update employee set sal=4000,job=‘ccc‘ where name=‘lucy‘;

将姓名为’lucy’的员工薪水在原有基础上增加1000元。

update employee set sal=sal+1000  where name=‘lucy‘;

(10)删除表中的记录的操作

语句 delete from 表名称 where...

如果添加where添加,根据添加进行删除;如果没有添加where,把表里面的所有数据都删除

练习

删除表中名称为’lucy’的记录。

delete from employee where name=‘lucy‘;

删除表中所有记录。

delete from employee;

===========================================================

查询语句是今天最重要的内容,重点掌握

7、查询数据库表中的记录

(1)sql分类:DQL (数据查询语言)

语句 select 要查询的字段(写*表示所有的字段) from 要查询的表名称 where  ..........

关键字 DISTINCT:表示去除表中重复的记录

创建一个学生表

create table stu (

id int,

sname varchar(40),

chinese int,

english int,

math int

)

* +---------+-------------+------+-----+---------+-------+

| Field   | Type        | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| id      | int(11)     | YES  |     | NULL    |       |

| sname   | varchar(40) | YES  |     | NULL    |       |

| chinese | int(11)     | YES  |     | NULL    |       |

| english | int(11)     | YES  |     | NULL    |       |

| math    | int(11)     | YES  |     | NULL    |       |

+---------+-------------+------+-----+---------+-------+

insert into stu values(201,‘熊大‘,120,20,80);

insert into stu values(202,‘熊二‘,50,100,60);

insert into stu values(203,‘光头强‘,200,100,500);

insert into stu values(204,‘李老板‘,300,10,1000);

练习:

查询表中所有学生的信息。

select * from stu;

查询表中所有学生的姓名和对应的英语成绩。

select sname,english from stu;

去除重复的记录

select distinct * from stu;

(2)别名操作

使用 as 别名的名称

select sname as n1,english as e1 from stu;

练习

在所有学生分数上加10分特长分。

select chinese+10,english+10,math+10 from stu;

统计每个学生的总分。

select chinese+english+math as sum1 from stu;

查询姓名为熊二的学生成绩

select * from stu where sname=‘熊二‘;

查询英语成绩大于90分的同学

select * from stu where english>90;

(3)显示当前的数据库 : select database();

(4)select语句里面where条件部分有关键字

in:记录在范围里面值

练习:查询数学分数为60,500的同学

select * from stu where math in(60,500);

like:用在模糊查询

练习:查询表里面名字里面包含熊的学生

select * from stu where sname like ‘%熊%‘;

and:表示条件同时满足

练习:查询数学分>80和语文分>80的同学

select * from stu where math>80 and chinese>80;

or: 表示或者

练习:查询数学分>80 或者 语文分>50的同学

select * from stu where math>80 or chinese>50;

(5)查询操作排序

语句:order by 要排序的字段

order by语句要写在select语句的最后

默认是升序的排序 order by 要排序的字段 asc

设置降序排序  order by 要排序的字段 desc

练习:对数学成绩降序排序后输出。

select * from stu order by math desc;

8、sql语句中的聚集函数

封装了一些固定的功能,可以在sql语句里面直接使用这个函数实现某些功能

count函数:得到表中有多少条记录

语句 select count(*) from 表名  where....

练习:

统计一个班级共有多少学生?

select count(*) as count1 from stu;

统计数学成绩大于90的学生有多少个?

select count(*) from stu where math>500;

统计总分大于220的人数有多少?

select count(*) from stu where math+chinese+english>500;

sum函数: 求和的操作

语句 select sum(要求和的字段) from 表名 where.....

练习:

统计一个班级数学总成绩?

select sum(math) from stu;

统计一个班级语文、英语、数学各科的总成绩

select sum(chinese),sum(english),sum(math) from stu;

统计一个班级语文成绩平均分

平均分:总成绩/总人数

select sum(chinese)/count(*) from stu;

avg函数:计算平均数

语句 select  avg(字段) from 表名 where....

练习:

求一个班级数学平均分?

select avg(math) from stu;

求一个班级总分平均分

select avg(math+chinese+english) from stu;

max函数:计算最大值

min函数:计算最小值

练习

求班级数学最高分

select max(math) from stu;

select min(math) from stu;

9、sql语句的分组的操作

使用分组操作

语句 group by  要分组字段

创建一个orders 订单表

insert into orders(id,product,price) values(1,‘电视‘,900);

insert into orders(id,product,price) values(2,‘洗衣机‘,100);

insert into orders(id,product,price) values(3,‘手电‘,90);

insert into orders(id,product,price) values(4,‘桔子‘,9);

insert into orders(id,product,price) values(5,‘手电‘,90);

insert into orders(id,product,price) values(6,‘电视‘,900);

insert into orders(id,product,price) values(7,‘洗衣机‘,100);

练习:显示每一类商品的总价

总价格 使用sum(price)

每一类商品 group by product

select product,sum(price) from orders group by product;

having关键字

在分组的基础上再进行条件的判断

group by product having sum(price)>100;

where后面不能写聚集函数,但是having后面可以写聚集函数

练习:查询购买了几类商品,并且每类总价大于100的商品

这种写法从逻辑上没有问题的,但是where后面不能写聚集函数

select product,sum(price) from orders where sum(price)>100  group by product;

select product,sum(price) from orders  group by product having sum(price)>100;

10、sql语句里面关键字顺序

select ... from  ... where  .... group by  ... having  .... order by...

S-F-W-G-H-O 组合

==========================================================

1、对数据库表中的记录插入,修改,删除操作

2、对数据库表中记录的查询操作

11、mysql可视化工具的使用

通过cmd窗口,向表中插入中文记录,有乱码问题

解决方法:找到mysql的安装路径,找到一个文件my.ini

注意:如果要修改mysql里面的文件,首先备份

default-character-set=gbk

可视化工具的使用

在不建议使用这个工具,先通过cmd窗口把sql语句熟悉之后再使用这个工具

12、mysql里面limit关键字

imit使用

首先可以写一个参数  limit  3:查询前三条记录

也可以写两个参数    limit 2,3 : 第一个参数开始位置,从0开始

第二个参数,从第一个参数位置开始向后取几条记录

查询数据库表中前几条记录

select * from stu limit 2;

查询数据库表中的第几条到第几条记录

select * from stu limit 1,2;

这个关键字一般用在分页功能里面

limit关键字不是标准sql的一部分,只能在mysql里面使用,在其他数据库里面不能使用

在oracle里面:使用 rownum关键字

在sqlserver里面:使用top关键字

13、表之间的关系

一对多的关系

一个学生只能在一个学院,但是一个学院有多个学生

一个员工只能在一个部门,一个部门有多个员工

多对多的关系

一门课程可以被多个学生选择,一个学生也可以选择多门课程

一对一的关系

在中国,一个男人只能有一个妻子

一个女人只能有一个丈夫

一个公司只能有一个注册地址,一个注册地址包含一个公司

14、一对多建表原则

一个员工只能在一个部门,一个部门有多个员工

首先要确定一对多里面,谁是多的那一边,谁是一的那一边

其次在多的那一边创建一个字段,这个字段指向一的那一边的主键

15、多对多的建表原则

一门课程可以被多个学生选择,一个学生也可以选择多门课程

首先确定表之间的关系

其次创建第三张表,在创建两个字段,分别指向那两张表的主键

用第三张表作为两个表关系表

16、一对一建表原则

一个公司只能有一个注册地址,一个注册地址包含一个公司

在实际开发中,一般都把数据存到一张表里面

17、多表之间的查询的操作

创建一个部门表

create table dept (

did int,

dname varchar(40)

)

insert into dept values(101,‘丐帮‘);

insert into dept values(102,‘少林‘);

insert into dept values(103,‘血刀门‘);

insert into dept values(104,‘崆峒‘);

insert into dept values(105,‘太极门‘);

insert into dept values(106,‘宣武门‘);

* 创建一个员工表

create table employee1 (

eid int,

ename varchar(40),

did int

)

insert into employee1 values(2001,‘乔峰‘,101);

insert into employee1 values(2002,‘田伯光‘,102);

insert into employee1 values(2003,‘二师兄‘,102);

insert into employee1 values(2004,‘孙二娘‘,104);

insert into employee1 values(2005,‘扈三娘‘,103);

insert into employee1 values(2006,‘苗人凤‘,103);

insert into employee1 values(2007,‘苗若兰‘,null);

insert into employee1 values(2008,‘李寻欢‘,null);

* 查询员工对应的门派显示出来

select * from dept,employee1

* 得到结果是 笛卡尔积

(1)使用内连接进行操作

* 语法 inner join 表 on 两个表关联的条件

* 最终语句

select dept.*,employee1.* from dept inner join employee1 on dept.did=employee1.did;

* 使用内连接其实实现的是交集操作

* 还有另外一种方式,也可以实现类似于内连接的效果

select dept.*,employee1.* from dept,employee1 where dept.did=employee1.did;

(2)使用外连接进行操作

* 外连接有两种:

** 左外连接:left outer join 表 on 两个表关联的条件

select dept.*,employee1.* from dept left outer join employee1 on dept.did=employee1.did;

*** 左边的表里面的所有内容都显示出来,右边的表只是显示关联的内容

** 右外连接:right outer join 表 on 两个表关联的条件

select dept.*,employee1.* from dept right outer join employee1 on dept.did=employee1.did;

*** 效果;右边的表里面所有内容都显示出来,左边的表显示关联的内容

===================================================

1、掌握对数据库表中记录的操作的语句 (插入,修改,删除语句)

** 把插入,修改,删除语句至少写一遍

2、重点掌握查询表中记录的语句

** 把查询语句至少两遍

* 希望不要使用工具,直接使用cmd窗口进行操作

3、昨天案例,继续完成

时间: 2024-10-16 21:08:52

javaWeb系列之十一(数据库)的相关文章

JavaWeb系列-JSP基础语法

JSP注释(页面中,右键->查看源代码是否可见) 1.客户端可见的显式注释 <!-- 注释内容 --> 2.客户端不可见的隐式注释 单行注释    //注释内容 多行注释    /*注释内容*/ JSP注释     <%-- 注释内容 --%> 显式内容会发送到客户端,而隐式内容不发送到客户端 Scriptlet 所有在嵌入在HTML代码中的Java程序都必须使用Scriptlet标记出来. <%%> 可在标记中定义局部变量.编写语句 <%!%> 可在

hbase源码系列(十一)Put、Delete在服务端是如何处理?

在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTable探秘>的朋友都会有印象,没看过的建议回去先看看,Put是通过MultiServerCallable来提交的多个Put,好,我们就先去这个类吧,在call方法里面,我们找到了这句. responseProto = getStub().multi(controller, requestProto); 它调用了Region Server的multi方法.好,我们立即杀到HReg

SCCM 2012 R2 实战系列(十一)—配置EndPoint Protection

最后来看下如果通过SCCM发布EndPoint Protection 1.首先我们必须要添加EndPoint Protection的站点系统角色,方法很简单,在管理->概述->服务器和站点系统角色里点击添加站点系统角色,选择EndPoint Protection 2.接受条款 3.添加完成 4.首先现在SCCM当中更新EndPoint Protection 5.更新完成后,我们需要创建一个自定义的客户端配置来启用EndPoint Protection,我们可以单独把这个配置单独分配给某个集合

1Python全栈之路系列之MySQL数据库基本操作

Python全栈之路系列之MySQL数据库基本操作 MySQL数据库介绍 MySQL是一种快速易用的关系型数据库管理系统(RDBMS),很多企业都在使用它来构建自己的数据库. MySQL由一家瑞典公司MySQL AB开发.运营并予以支持.它之所以非常流行,原因在于具备以下这些优点: 基于开源许可发布,无需付费即可使用. 自身的功能非常强大,足以匹敌绝大多数功能强大但却价格昂贵的数据库软件. 使用业内所熟悉的标准SQL数据库语言. 可运行于多个操作系统,支持多种语言,包括 PHP.PERL.C.C

oracle学习入门系列之二 数据库基础知识

oracle学习入门系列之二 数据库基础知识 本篇蛤蟆要梳理下那些被淡忘的数据库基础知识,也许根本就没被人记住过.不管是哪种情况,该记住的必须记住,记不住就把他记下来吧. 首先问几个问题如下: 数据库基础知识是什么? 好吧,蛤蟆直接吐后而不亡,看目录开始吧. 本人邮箱:[email protected] 微信公众号:HopToad 欢迎各界交流 1      基本概念 概念就是概念,大伙对这些名词不要死磕,但是对定义一定要理解,理解方能领悟,领悟方能运用自如后创新. 1.1      数据 数据

MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  mapper根节点下配置ResultMap节点信息 <resultMap type="Student" id="studentMapper"> <result column="sname" property="stunam

(Mirage系列之十一)终端初始化

在(Mirage系列之四)Mirage经典案例之集中桌面管理中我们讲了如何使用Mirage集中管理终端桌面,其第一步是把终端桌面备份到Mirage服务器上.但是在有些客户环境下,需要首先将客户端清理干净甚至重新安装操作系统.这个需求可以通过Mirage的BaseLayer Provisioning这个功能来完成.下面详细介绍如果通过Base Layer Provisioning来将终端统一化. 前提条件: ·        在需要统一化的终端上安装Mirage客户端并连接到Mirage服务器上.

代码收藏系列--mysql创建数据库、数据表、函数、存储过程命令

创建mysql数据库 CREATE DATABASE IF NOT EXISTS `database_name` DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 创建mysql数据表 drop table if exists `table_name`; create table if not exists `table_name` ( id int auto_increment primary key comment '主键编号', `name` va

oracle学习入门系列之四 oracle数据库简介

oracle学习入门系列之四 oracle数据库简介 终于平滑过渡到oracle了,我们在第一篇中黑了拉里一次,这里就需要给拉里洗白了.话说当年钱钟书先生写完<围城>之后,无意中说,一个鸡蛋就算好吃,也没必要知道下蛋的母鸡是哪只.蛤蟆觉得有点不妥,钱钟书先生那是文人,自然要清高,而且他本是"下蛋"的母鸡当然不愿意被吃蛋的俗人打扰的,况且当时也没有统计粉丝一说.可是我们是吃蛋的啊,而且是大老粗,现在还统计粉丝数量,我们就需要知道谁下的蛋,是不是毒蛋,对不对?也得看看下了这么好