概念
在Java中程序存储数据,数据是被保存在内存中的,属于瞬时存储,在方法执行完毕数据就会被回收掉,不能长久的保存在计算机中,如何把数据长期存储在计算机中,并且有组织的,能共享的,能统一管理的存储数据,这时就要提到“数据库”的概念。
数据库:是一个按照数据结构来组织和存储管理数据的仓库,是一个长期存储在计算机内部,有组织的,共享的,可以统一管理的数据集合。
数据库的分类
数据库分为四种:
- 网状结构数据库 :
最早版本的数据库,通过网状数据库管理系统(DBMS),是由通用电气公司在1961年开发成功,并且IDS(Integrated DataStore,集成数据存储)是世界上第一个网状DBMS,也是第一个DBMS。但是它只能运行于通用电气的主机上,且数据库只有一个文件,所有的表必须通过手工编码生成,有着极大的局限性,它是以节点形式存储和访问。 - 层次结构数据库:
层次模型数据库系统是最早研制成功的数据库系统,这种数据库最成功的典型是IMS,IMS的全称是(Information Management System),是由IBM公司研制成功,并且在1969年投入运行,它是定向有序的数据结构实现存储和访问。 - 关系结构数据库:
关系型数据库是以行和列的形式存储数据的,关系型数据库一系列的行和列被称为表,以表格(Table)存储,多个表之间建立联系,通过分类、合并、连接、选取等运算实现访问。常见的关系型数据库有:Oracle、DB2、MySQL、SQL Server - 非关系型数据库:
非关系型数据库(NoSQL)多数是使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据,NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
数据库管理系统
概念:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS,它可以对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS可以访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。
常见的数据库管理系统:
- Oracle:被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
- DB2:IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
- SQL Server:Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。
- SQLLite:应用在手机端的数据库。
MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL配置文件
在MySQL安装目录中找到my.ini文件,打开my.ini文件可以查看几个常用配置参数
参数 | 描述 |
---|---|
default-character-set | 客户端默认字符集 |
character-set-server | 服务器端默认字符集 |
port | 客户端和服务器端的端口号 |
default-storage-engine | MySQL默认存储引擎 INNODB |
数据查询
基本查询
1.查询部分列
#SELECT 列名 FROM 表名
SELECT id,name,age,email
FROM student;
2.对列中的数据进行运算
#查询表中所有员工的编号、名字、年薪(每个月的薪资*12)
#+加法、-减法、*乘法、/除法
SELECT id , name , salary*12
FROM student;
3.列的别名
#查询表中所有员工的编号、名字、年薪(列名均为中文)
SELECT id as "编号" , name as "名字" , salary*12 as "年薪"
FROM student;
4.查询结果去重
#DISTINCT 列名
SELECT DISTINCT id
FROM student;
5.依据多列排序
#查询编号,名字,薪资。按照工资高低进行升序排序(薪资相同时,按照编号进行升序排序)。
#ASC 对前面排序列做升序排序
#DESC 对前面排序列做降序排序
SELECT id , name , salary
FROM student
ORDER BY salary DESC , employee_id ASC;
一、条件查询
1.等值判断(=)
#查询薪资是11000的员工信息(编号、名字、薪资)
#WHERE 条件
SELECT id , name , salary
FROM student
WHERE salary = 11000;
2.逻辑判断(and、or、not)
#查询薪资是11000并且编号是1的员工信息(编号、名字、薪资)
SELECT id , name , salary
FROM student
WHERE salary = 11000 AND id = 1;
3.不等值判断(> 、< 、>= 、<= 、!= 、<>)
#查询薪资在6000~10000之间的员工信息(编号,名字,薪资)
SELECT id , name , salary
FROM student
WHERE salary >= 6000 AND salary <= 10000;
4.区间判断(between and)
#查询薪资在6000~10000之间的员工信息(编号,名字,薪资)
SELECT id , name , salary
FROM student
WHERE salary BETWEEN 6000 AND 10000;
5.模糊查询
LIKE _ (单个任意字符) 列名 LIKE '张_'
LIKE %(任意长度的任意字符) 列名 LIKE '张%'
#查询名字以"L"开头并且长度为4的员工信息(编号,名字,薪资 , 部门)
SELECT id , name , salary , department
FROM student
WHERE name LIKE 'L___';
二、分组查询
1.查询各部门的总人数
#SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列)
#思路:
#1.按照部门编号进行分组(分组依据是 department)
#2.再针对各部门的人数进行统计(count)
SELECT id,COUNT(employee)
FROM student
GROUP BY id;
2.分组过滤查询
#SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列 HAVING 过滤规则
#统计60、70、90号部门的最高工资
#思路:
#1). 确定分组依据(department_id)
#2). 对分组后的数据,过滤出部门编号是60、70、90信息
#3). max()函数处理
SELECT department , MAX(salary)
FROM student
GROUP BY department
HAVING department in (60,70,90)
3.限定查询
#SELECT 列名 FROM 表名 LIMIT 起始行,查询行数
#查询表中前五名员工的所有信息
SELECT * FROM t_employees LIMIT 0,5;
三、查询总结
1.SQL 语句编写顺序
SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组 HAVING 过滤条件 ORDER BY 排序列(asc|desc)LIMIT 起始行,总条数
2.SQL 语句执行顺序
1.FROM :指定数据来源表
2.WHERE : 对查询数据做第一次过滤
3.GROUP BY : 分组
4.HAVING : 对分组后的数据第二次过滤
5.SELECT : 查询各字段的值
6.ORDER BY : 排序
7.LIMIT : 限定查询结果
DML 操作
1.新增(INSERT)
#添加一条工作岗位信息
#INSERT INTO 表名(列 1,列 2,列 3....) VALUES(值 1,值 2,值 3......);
INSERT INTO t_jobs(ID,TITLE,MIN_SALARY,MAX_SALARY) VALUES('JAVA_Le','JAVA_Lecturer',2500,9000);
2.修改(UPDATE)
#修改编号为100 的员工的工资为 25000
#UPDATE 表名 SET 列 1=新值 1 ,列 2 = 新值 2,.....WHERE 条件;
UPDATE t_jobs SET SALARY = 25000 WHERE EMPLOYEE_ID = '100';
3.删除(DELETE)
#删除编号为135 的员工
#DELETE FROM 表名 WHERE 条件
DELETE FROM t_jobs WHERE EMPLOYEE_ID='135';
4.清空整表数据(TRUNCATE)
#清空t_countries整张表
#TRUNCATE TABLE 表名;
TRUNCATE TABLE t_countries;