在千锋“逆战”学习第38天
每日一句:这句话不是很文雅,彻底鄙视那些害怕别人超越自己而拒绝回答别人问题的程序员。
今天学习了MySQL数据库的知识以及语法。
明天继续努力。
笔记
一、引言
1.1 现有的数据存储方式有哪些?
- Java中存储数据(变量、对象、数组、集合),数据都是保存在内存中,属于瞬时状态数据
- 文件(File)存储数据,保存在硬盘上,属于持久化状态存储
1.2 以上存储方式存在哪些缺点?
- 程序停止,数据就没了。
- 文件存储的数据:没有数据类型的区分
- 没有访问安全限制
- 没有备份、恢复机制。
二、 数据库
2.1 概念
数据库是 “按照数据结构来组织、存储、管理数据的仓库”。是一个可以长期存储在计算机内的、有组织的、有共享的、可以统一管理的数据集合
2.2 数据库的分类
- 网状结构数据库:以节点形式存储数据和访问数据
- 层次结构数据库:IBM[IMS]。定向有序的树状结构实现存储和访问。
关系结构数据库
:Oracle、MySQL、DB2、SQL Server,以表格(Table)形式存储,多表之间建立关联关系,通过分类、合并、连接、选取等方式实现访问。- 非关系型数据库:MongDB、Redis,使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据
- ElastecSearch
三、数据库管理系统
3.1 概念
数据库管理系统:指的是一种操作和管理数据库的大型软件,用于建立、使用、维护数据库,对数据库进行统一的管理和控制,保证数据库的安全性和完整性。
用户通过数据库管理系统访问数据库中的数据
3.2 常见的数据库管理系统
- Oracle:可以运行在UNIX、Windows等主流操作系统,支持所有的工业标准,并获得了最高级别的ISO标准安全性认证。
- DB2:IBM公司的,满足中大公司的需要
- SQL Server:微软退出的。
- SQLLite:手机端的数据库
- Mysql:免费、适合中小型企业
四、MySQL
4.1 简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发的。属于Oracle旗下的产品。
MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,是最好的应用软件之一。
4.2 访问与下载
官网:https://www.mysql.com
4.3 配置环境变量
- Windows:
- 创建MYSQL_HOME:C:\Program Files\MySQL\MySQL Server 5.7
- 追加Path:%MYSQL_HOME%\bin;
4.4 MySQL的目录结构
核心文件介绍
文件夹名称 | 内容 |
---|---|
bin | 命令相关文件 |
include | 库文件 |
lib | 头文件 |
Share | 字符集、语言等信息 |
4.5 MySQL配置文件
在MySQL安装目录中找到my.ini的文件,MySQL的一些配置参数
参数 | 描述 |
---|---|
default-character-set | 客户端默认字符集 |
character-set-server | 服务端默认字符集 |
port | 客户端和服务端的端口号 |
default-storage-engine | MySQL的默认存储引擎INNODB |
五、 SQL
5.1 概念
SQL:结构化查询语言,用于存取数据、更新、查询和管理关系数据库系统的程序设计语言。
5.2 MySQL应用
对于数据库的操作,需要在连接MySQL的环境下进行指令输入,并在一行指令的末尾使用 ; 结束
5.3 基本命令
查看MySQL中所有数据库
#连接到MySQL
mysql> SHOW DATABASES; #显示当前MySQL中所有的数据库
创建自定义数据库
CREATE DATABASE
mysql>CREATE DATABASE nz2002; #创建了名称为nz2002的数据库
mysql>CREATE DATABASE NZ2002 CHARACTER SET gbk;#创建数据库并设置其默认字符集为GBK
mysql>CREATE DATABASE NZ2002 CHARACTER SET GBK COLLATE gbk_chinese_ci;#支持简体中文和繁体中文
mysql>CREATE DATABASE IF NOT EXISTS NZ2002;#如果NZ2002不存在,则创建,反之,不创建
删除数据库
DROP DATABASE
mysql>DROP DATABASE NZ2002;#删除数据库
查看数据库创建信息
SHOW CREATE DATABASE
mysql>SHOW CREATE DATABASE NZ2002;# 查看创建数据库时的基本信息
修改数据库
ALTER DATABASE
mysql>ALTER DATABASE NZ2002 CHARACTER SET UTF8;#修改数据库nz2002的字符集为utf-8
使用数据库
USE
mysql>USE NZ2002;#当前环境下,操作NZ2002数据库
查看当前使用的数据库
SELECT DATABASE();
mysql>SELECT DATABASE();#查看当前使用的数据库
六、客户端工具
6.1 Navicat
是一套快速、可靠并且价格便宜的数据库管理工具,专为简化数据库管理及降低系统管理成本而设。
6.2 SQLyog
也拥有图形化界面。拥有广泛的预定义工具和查询、友好的视觉界面。类似Excel的查询结果编辑界面
6.3 DataGrip(Idea开发工具集成)
捷克公司的产品。需要付费。如果买了idea,DataGrip通用
七、 执行SQL脚本
创建一个companyDB的数据库,然后在对象浏览器区,右键->执行SQL脚本->找到文件,打开->点击执行
八、 数据查询【重点】
8.1 数据表的基本结构
关系结构数据库是以表格(Table)进行数据存储,表格由
行
和列
组成
8.2 基本查询
关键字 | 描述 |
---|---|
SELECT | 指定要查询的列 |
FROM | 指定要查询的表 |
8.2.1 查询所有列
#查询t_employees表中所有员工的所有信息
SELECT * FROM t_employees;
SELECT 所有的列名 FROM t_employees;
8.2.2 查询部分列
#查询表中的所有员工的编号、姓氏、邮箱
SELECT EMPLOYEE_ID,FIRST_NAME,Email FROM t_employees;
#查询表中所有员工的编号、部门编号
SELECT EMPLOYEE_ID,DEPARTMENT_ID FROM t_employees;
8.2.3 对列中的数据进行运算
#查询员工表中所有员工的编号、姓名、年薪
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY * 13 FROM t_employees;
算术运算符 | 描述 |
---|---|
+ | 列与列之间做加法运算 |
- | 列与列之间做减法运算 |
* | 列与列之间做乘法运算 |
/ | 列与列之间做除法运算 |
8.2.4 列的别名
列 AS ‘列名’
#查询员工表中所有员工的编号、姓名、日薪(列的运算 / 22),列名均为中文
SELECT EMPLOYEE_ID AS '编号',FIRST_NAME AS '姓',LAST_NAME AS '名',SALARY / 22 AS'日薪' FROM t_employees;
#起别名,没有对原表的列名发生影响
8.2.5 查询结果去重
distinct 列名
#查询员工表中,所有经理的ID编号
SELECT DISTINCT MANAGER_ID AS '经理编号' FROM t_employees;
#查询员工表中,所有的工资 (去掉重复的)
SELECT DISTINCT SALARY FROM t_employees;
8.3 排序查询
语法: SELECT 列名 FROM 表名 ORDER BY 排序列名 [排序规则]
排序规则 | 描述 |
---|---|
ASC | 做升序排序 |
DESC | 做降序排序 |
8.3.1 依据单列进行排序
#查询员工的编号,名字,薪资,按照工资进行升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees ORDER BY salary ASC;
#查询员工的编号,名字,薪资,按照姓名进行升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees ORDER BY FIRST_NAME ASC;
#查询员工的编号,名字,薪资,按照工资进行降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees ORDER BY salary DESC;
8.3.2 依据多列进行排序
#查询员工编号,名字,薪资,按照工资进行升序排序,如果工资相等,按照编号降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
ORDER BY SALARY ASC,EMPLOYEE_ID DESC
#查询员工编号,名字,薪资,按照工资进行升序排序,如果工资相等,按照姓名降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
ORDER BY SALARY ASC,FIRST_NAME DESC
8.4 条件查询
语法: SELECT 列名 FROM 表名 WHERE 条件
关键字 | 描述 |
---|---|
WHERE | 在查询结果中,筛选符合条件的查询结果。条件为布尔表达式 |
8.4.1 等值判断(=)
#查询工资为2500的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE salary = 2500;
#查询姓为Steven的
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE FIRST_NAME='Steven';
8.4.2 不等值判断(>、<、>=、<=、!=、<>)
#查询员工工资大于6000的员工的信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary>=6000;
#查询员工工资不等于2500的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary<>2500;(!=同理)
8.4.3 逻辑判断(and、or、not)
#查询员工工资在6000~10000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary>=6000 AND salary<=10000;
#查询工资是10000的或者是9000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary =10000 OR salary = 9000;
#查询除了工资是10000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE NOT salary =10000;
8.4.4 区间判断(between and)
#区间判断 包含区间边界的两个值
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary BETWEEN 6000 AND 10000;
8.4.5 NULL值判断(IS NULL、IS NOT NULL)
- IS NULL
- 列名 IS NULL
- IS NOT NULL
- 列名 IS NOT NULL
#查询出 没有经理编号的员工 IS NULL
SELECT EMPLOYEE_ID,FIRST_NAME,MANAGER_ID FROM t_employees
WHERE MANAGER_ID IS NULL;
#查询出 没有经理编号以外的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,MANAGER_ID FROM t_employees
WHERE MANAGER_ID IS NOT NULL;
#查询出 没有经理编号以外的员工信息(此处NOT为取反。两个结果)
SELECT EMPLOYEE_ID,FIRST_NAME,MANAGER_ID FROM t_employees
WHERE NOT MANAGER_ID IS NULL;