数据库概述
什么是数据库
数据库是持久化数据的一种介质,可以理解成用来存储和管理数据的仓库!
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件、XML数据文件中。
数据库的优点:
- 可将数据持久化到硬盘
- 可存储大量数据
- 方便检索
- 保证数据的一致性、完整性
- 安全,可共享
- 通过组合分析,可以产生新数据
常见的数据库产品:
Oracle:甲骨文
DB2:IBM;
SQL Server:微软;
MySQL:甲骨文;
数据库相关概念
DB:数据库( database ):存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS:数据库管理系统( Database Management System )。数据库是通过 DBMS 创建和操作的容器
SQL:结构化查询语言( Structure Query Language ):专门用来与数据库通信的语言。
数据库存储数据的特点
- 将数据放到表中,表再放到库中
- 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
- 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
- 表中的数据是按行存储的,每一行类似于java中的“对象”
表——类
列,字段——属性
行——对象
MySQL数据库
MySQL产品的介绍
MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择MySQL作为网站数据库(Facebook, Twitter, YouTube)。阿里提出“去IOE”,更多网站也开始选择MySQL。
MySQL产品的优点
成本低:开放源代码,一般可以免费试用
性能高:执行很快
简单:很容易安装和使用
MySQL服务端的安装和卸载
DBMS分为两类:
基于共享文件系统的DBMS (Access )
基于客户机——服务器的DBMS C/S
安装
卸载
MySQL的使用
启动和停止服务
命令行:
以管理员身份运行(非管理员身份是无法启动的)
net start MySQL服务名
net stop MySQL服务名
管理员身份启动
非管理员身份启动
登录MySQL
mysql -h 主机名 -P 端口号 -u 用户名 -p密码
例如:mysql -h localhost -P 3306 -u root -proot
-p与密码之间不能有空格,其他参数名与参数值之间可以有空格也可以没有空格
mysql -hlocalhost -P3306 -uroot -proot
密码建议在一行输入
mysql -h localhost -P 3306 -u root -p
Enter password:****
如果是连本机:-hlocalhost就可以省略,如果端口号没有修改:-P3306也可以省略
简写成:mysql -u root -p
Enter password:****
查看版本:
select version(); 不区分大小写
可视化工具
SQL语法要
SQL语句可以单行或多行书写,以分号结尾;
可以用空格和缩进来来增强语句的可读性;
关键字不区别大小写,建议使用大写;
分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
DQL
DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
基础查询
#根据单个字段查询
select last_name from employees;
#查询表中多个字段
select last_name,salary from employees;
#查询表中所有字段
select * from employees;
#查询常量值
select 100;
#查询表达式
select 100%98;
#查询函数
select VERSION();
#起别名
-- 方式一 as
select 100%98 as 结果;
select last_name AS 姓 ,first_name as 名 from employees;
-- 方式二 使用空格
select last_name 姓,first_name 名 from employees;
#案例:查询salary,显示结果为 out put
select salary 'out put' from employees;
#去重
select distinct department_id from employees;
/*
java中的+号:
①运算符,两个操作数都为数值型
②连接符,只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90;只要其中一方为字符型,试图将字符型数值转换成数值型
如果转换成功,则继续做加法运算
select 'john'+90; 如果转换失败,则将字符型数值转换成0
select null+10; 只要其中一方为null,则结果肯定为null
*/
#案例:查询员工名和姓连接成一个字段,并显示为 姓名
select concat(last_name,first_name) 姓名 from employees;
结果就不全部演示了
条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
- =、!=、<>、<、<=、>、>=;
- AND、OR、NOT
- BETWEEN…AND、IN(set)、IS NULL
模糊查询
like
between and
两个区间值包含
in
is null
-- 条件查询
/*
语法:
select
查询列表
from
表名
where
筛选条件;
分类:
一、按条件表达式筛选
简单条件运算符:> < = != <> >= <=
二、按逻辑表达式筛选
逻辑运算符:
作用:用于连接条件表达式
&& || !
and or not
&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false
三、模糊查询
like
between and
in
is null
*/
#一、按条件表达式筛选
#案例1:查询工资>12000的员工信息
select * from employees where salary > 12000;
#案例2:查询部门编号不等于90号的员工名和部门编号
select last_name,department_id
from employees where department_id <> 90;
select last_name,department_id
from employees where department_id != 90;
#二、按逻辑表达式筛选
#案例1:查询工资z在10000到20000之间的员工名、工资以及奖金
select last_name,salary,commission_pct
from employees where salary >= 10000 and salary <= 20000;
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
select *
from employees where department_id >= 100 or department_id <= 90 or salary >= 15000;
select *
from employees where not(department_id < 100 and department_id >90) or salary >= 15000;
#三、模糊查询
/*
like
between and
in
is null|is not null
*/
#1.like
/*
特点:
①一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
*/
#案例1:查询员工名中包含字符a的员工信息
select *
from employees where last_name like '%a%';
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select *
from employees where last_name like '__e_a%';
#案例3:查询员工名中第二个字符为_的员工名
select *
from employees where last_name like '_\_%';
#2.between and
/*
①使用between and 可以提高语句的简洁度
②包含临界值
③两个临界值不要调换顺序
*/
#案例1:查询员工编号在100到120之间的员工信息
select * from employees where employee_id between 100 and 120;
#3.in
/*
含义:判断某字段的值是否属于in列表中的某一项
特点:
①使用in提高语句简洁度
②in列表的值类型必须一致或兼容
③in列表中不支持通配符
*/
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
select employee_id,job_id from employees where job_id = 'IT_PROG' or job_id = 'AD_VP'or job_id = 'AD_PRES';
select employee_id,job_id from employees where job_id in ('IT_PROG','AD_VP','AD_PRES');
#4、is null
/*
=或<>不能用于判断null值
is null或is not null 可以判断null值
*/
#案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct
from employees where commission_pct is null;
#案例2:查询有奖金的员工名和奖金率
select last_name,commission_pct
from employees where commission_pct is not null;
#安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct
from employees where commission_pct <=> null;
#案例2:查询工资为12000的员工信息
select *
from employees where salary <=> 12000;
/*
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
*/