一. 什么是数据库
数据库是一个存储数据的容器,用来存储大量的数据,正常来说我们存储数据是使用文本txt、word、excel等,但如果我们想要使用这个数据的时候,获取与写入时IO读取是非常消耗资源的,我们对于数据量比较小的操作比较少的可以使用文本,但是随着现代发展,数据量已经超过了文本所能容纳的最大数据,所以我们在存储以及操作的时候会使用数据库来存储,当数据量巨大的时候,一个数据库可能会有压力,这时我们可以搭建数据库的集群,多个数据库来共同承载数据量大所带来的压力。
二.数据库的种类
-
关系型数据库:mysql、Oracle、SQLserver、SQLite等。
- 优点:容易维护,格式统一;SQL语句通用,可用于复杂的查询;支持事务;
- 缺点:在读取海量的数据时性能比较差;固定的表接口比较死板不灵活;
-
非关系型数据库:MongoDB、Redis、Hbase、Php等。
- 优点:速度快;具有很高的扩展性;成本低;
- 缺点:不支持事务;数据结构比较复杂;
三.数据库的下载与安装
-
下载数据库服务
mysql数据库官网:https://www.mysql.com/
正常来说一般外面公司使用最多的版本是5.X系列的版本,相对来说比较稳定(推荐),8.X系列的是相对比较新的版本。
-
安装数据库服务
- 在下载完成后,我们解压下载好的安装包
里面有个my.ini文件(可以按照我这个配置)
配置环境变量
打开命令行输入
mysqld -install
mysqld --initialize
等两个命令执行完后文件夹会出现一个data目录
这时data目录下就有初始的密码(可以记下来)
不要忘了启动服务
登录成功后我们可以修改之前的复杂密码
通过命令set password for username @localhost(root) = password(newpwd);
修改完密码后重新登录,检查服务是否启动(如果没启动则无法连接数据库)
- 在下载完成后,我们解压下载好的安装包
-
下载连接数据库客户端
客户端介绍:正常来说下载安装好的服务,启动的时候会在命令行输入命令来登录数据库,这一般是数据库管理员才会这样操作的,我们在开发的时候很少去使用命令行来操作,这时我们需要下载可视化工具,可以使用Sqlyog,Navicat,DBServer作为客户端的连接工具,推荐使用DBServer。
DBServer下载地址:https://dbeaver.io/
下载好后我们会得到一个安装包
这时我们解压到该文件下(同目录下会出现dbserver文件夹):
展开文件目录(安装目录任意)
安装后最终是这个界面
这时我们使用客户端来连接数据库服务
这时就已经连接成功,接下来我们简单学习一下数据库的基本语句
四.MYSQL的基本操作
-
4.1 MYSQL服务的启动和停止
方式一:计算机–右击管理–服务(手动停止服务)
方式二:通过管理员身份运行(命令行停止服务)
mysql --install
net start 服务名(启动服务)
net stop 服务名(停止服务)
-
4.2 MYSQL服务的登录和退出
方式一:通过mysql自带的客户端只限于root用户
方式二:通过doc命令行登录
mysql 【-h主机名 -P端口号】 -u用户名 -p密码
退出:exit或者ctrl+C
-
4.3 MYSQL的基本语句
1、查看所有的数据库 show databases; 2、使用指定的库 use 库名 3、查看当前库的所有表 show tables; 4、查看其它库的所有表 show tables from 库名; 5、创建表 create table 表名( 列名 列类型, 列名 列类型, 。。。 ) 6、查看表的结构 desc 表名; 7、查看服务器的版本 - 方式一:登录到mysql服务端 select version(); - 方式二:没有登录到mysql服务端 mysql --version 或 mysql --V
-
4.4 MYSQL的语法规范
1. 不区分大小写,但是建议关键字大写,表明,列名小写 2. 每条命令最好用分号结尾 3. 每条命令根据需要,可以进行缩进 或者换行 4. 注释 - 单行注释:#注释文字 - 单行注释:-- 注释文字 - 多行注释:/*注释文字*/
五.数据库查询的基本使用
-
5.1:条件查询
语法: select 查询列表 from 表名 where 筛选条件 分类: 一、按条件表达式筛选 作用:用于连接条件表达式 条件运算符:> < = <> != >= <= 二、按逻辑表达式筛选 逻辑运算符:&& || ! and or not &&和and:两个条件都为true,结果为true,反之false ||和or:只要有一个条件为true,结果为true,反之为flase !或not:如果连接的条件本身为flase,结果为true 反之为false 三、模糊查询 like between and in isnull
-
5.2:按条件表达式筛选
案例一: 查询工资>12000的员工信息 select * from employees where salary>12000; 案例二: 查询部门编号不等于90号的员工名和部门编号 select last_name,department_id from employees where department_id<>90;
-
5.3:按逻辑表达式筛选
案例一、查询工资在10000到20000之间的员工名、工资以及奖金 select last_name,salary,commission_pct from employees where salary>=10000 && salary<=20000; 案例二、查询部门编号不是在90到110之间的,或者工资高于15000的员工信息 1. select * from employees where department_id not between 90 and 110 or salary>15000; 2. select * from employees where department_id<90 OR department_id>110 OR salary>15000; 3. select * from employees where NOT(department_id>=90 AND department_id<=110) OR salary>15000;
-
5.4:逻辑查询
like between and in is null|is not null
-
5.4.1:like
特点: 1、一般和通配符搭配使用 通配符: % 任意多个字符,包含0个字符 — 任意单个字符 案例一:查询员工中包含字符a的员工信息 select * from employees where last_name like '%a%'; 案例二:查询员工名中第三个字符为n,第5个字符为l的员工名和工资 select last_name,salary from employees where last_name like '__n_l%'; 案例三、查询员工名中第二个字符为_的员工名 1、 select last_name from employees where last_name like '_\_%'; 2、 select last_name from employees where last_name like '_$_%' escape '$';
-
5.4.2、between and
特点: 一、使用between and可以提高语句的简洁度 二、包含临界值 三、两个临界值不要调换顺序 案例一:查询员工编号 select * from employees where employee_id between 100 and 120;
-
5.4.3、in
/* 含义:判断某字段的值是否是属于in列表中的某一项 特点: 一、使用in提高语句的简洁度 二、in列表的值类型必须统一 */ 案例一:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号 1、 select last_name,job_id from employees where job_id='IT_PROT' or job_id='AD_VP' or job_id='AD_PRES'; 2、 select last_name,job_id from employees where job_id in ('IT_PROT','AD_VP','AD_PRES');
-
5.4.4、is null
=或<>不能用于判断null的值 is null或者is not null 可以判断 案例1:查询没有奖金的员工名和奖金率 select last_name, commission_pct from employees where commission_pct is null; -----------以下为错误 select last_name, commission_pct from employees where salary IS 12000;
-
5.4.5、安全等于 <=>
案例1:查询没有奖金的员工名和奖金率 select last_name, commission_pct from employees where commission_pct <=> null; 案例2:查询工资为12000的员工信息 select last_name, commission_pct from employees where salary <=> 12000;
-
5.4.6、isnull pk <=>
is null:仅仅可以判断null值(可读性较高) <=> :既可以判断null的值,又可以判断数值(可读性较低)
-
六.测试题
一、查询没有奖金,且工资小于18000的salary,last_name
select
salary,last_name
from
employees
where
commission_pct is null and salary<18000;
二、查询employees表中,job_id不为‘IT’ 或者 工资为12000的员工信息
select
*
from
employees
where
job_id <> ‘IT’ or salary=12000;
三、查看部门departments表的结构,查询效果如下
desc departments
四、查询部门departments表中涉及到哪些编号
select
distinct location_id
from
departments;
七. 经典面试题:
试问:select * from employees;
和 select * from employees where commission_pct like '%%' and last_name like '%%';
select * from employees where commission_pct like '%%' or last_name like '%%' or employees_id like '%%';
不一样!(如果判断字段有null值)