课程引入
为什么要学数据库
常见的数据库管理系统有MySQL、Oracle、DB2、SqlServer。程序员在客户端程序,通过数据库管理系统,对数据进行增删改查。其中,MySQL由于开源、免费等因素,是当前最受欢迎的数据库管理系统。淘宝、网易、百度、Facebook等众多互联网公司都在使用MySQL,学精了MySQL,就业市场广阔。
将数据存放在内存中不能持久化存储,存放在普通文件中不方便管理。
数据库管理系统的好处:
- 实现数据持久化
- 使用完整的管理系统统一管理,易于查询
数据库相关概念
DB:数据库(database),存储数据的“仓库”,他保存了一系列有组织的数据。
DBMS:数据库管理系统(database management system),数据库是通过DBMS进行管理的。
SQL:结构化查询语言(structure query language)。
SQL的优点
- 几乎所有的DBMS都支持SQL
- 简单易学
- 虽然简单,但是功能强大,灵活使用可以完成诸多复杂、高级的功能。
数据库是如何存储数据的
- 将数据放在表上,再将表放进库中。
- 一个数据库可以有多个表,每个表名称具有唯一性。
- 表有自己的特性,表示表中数据的属性,一张表就类似于C++中的一个类。
- 表由列组成,列也称为字段。每一个列就类似于C++中类的一个属性。
- 表中数据按行存储,每一行类似于C++中的一个对象。
MySQL服务的登陆和退出
# MySQL服务的启动
net start 服务名
# MySQL服务的停止
net stop 服务名
# 连接本机
mysql -u root -p
# 退出
exit
MySQL常见命令
# 查看当前所有数据库
show databases;
# 打开指定的库
use 库名;
# 查看库中的表
show tables from 库名;
# 创建表
creat table 表名(
列名 列类型,
列名 列类型,
列名 列类型,
... ...
);
# 查看表结构
desc 表名;
MySQL语法规范
- 不区分大小写,但是建议关键字大写,其他小写
- 每条命令用分号结尾
- 命令可以缩进和换行
- 单行注释
# 单行注释
-- 单行注释(--后有空格)
- 多行注释
/*
多行注释
*/
SQL语言的细分
- DQL语言(Data Query Language):查询功能
- DML语言(Data Manipulation Language):增删改功能
tips:也有书籍将上面两种语言统称为DML,也即合并了增删改查四个功能。 - DDL语言(Data Define Language):数据定义语言
- TCL语言(Transaction Control Language):事务控制语言
查询
基础查询
# 语法
select 查询列表 from 表名;
# 查询单个字段
select first_name from employees;
# 查询多个字段 逗号隔开
select first_name,last_name from employees;
# 查询所有字段
select * from employees;
# 起别名 AS关键字 (空格也行)
select first_name AS 名,last_name 姓 from employees
# 去重 Distinct关键字
select distinct last_name 姓 from employees
条件查询
# 语法
select
查询列表
from
表名
where
筛选条件;
# 条件运算符
>
<
<=
>=
<> 或 !=
# 逻辑运算符
and 或 &&
or 或 ||
not 或 !
# 按条件运算符查询
select
*
from
employees
where
salary>12000;
# 逻辑运算符连接条件运算符查询
select
*
from
employees
where
salary>12000
and
salary<180000;
# 模糊查询
like
between and
in
is null
/*
like 关键字 查询字符串
需要使用通配符
% 可以匹配若干个字符(包含0)
_ 可以匹配一个字符
*/
select
last_name
from
employees
WHERE
last_name like '_r%'
/*
结果
Ernst
Greenberg
Urman
... ...
*/
# 转义字符:反斜杠 或 escape关键字
select
last_name
from
employees
WHERE
last_name like '\_%'#查询以下划线开头的字符串
last_name like 'a_%' escape 'a' #与上面语句等价
# between and 查找区间范围内的数字
select
last_name,salary
from
employees
WHERE
salary between 10000 and 15000
# in 判断字段值是否属于列表中的某一项
select
last_name,salary
from
employees
WHERE
salary in (12000,13000)
# is null 判断字段值是否为null
# =和!=不能判断null
select
last_name,salary
from
employees
WHERE
commission_pct is null;
# commission_pct is not null;
排序查询
# order by 排序列表(asc升序,desc降序)
# 注意先筛选(where)后排序
SELECT
employee_id,salary,manager_id
From
employees
where
salary BETWEEN 10000 and 20000
order by
salary desc;
# 多关键字排序
SELECT
employee_id,salary,manager_id
From
employees
where
salary BETWEEN 10000 and 20000
order by
manager_id asc,salary desc;
# 从前往后排序,先按manager_id升序,再按salary降序。
函数
# 调用
select 函数名(实参列表)
常见的字符函数
注意,SQL语言中的索引都从1开始。
# 获取字符串长度(字节)
select length("abc123");
# 字符串拼接
select concat(first_name,' ',last_name) '姓名'
from employees;
# 将last_name中第一个字母大写,其余小写
select concat(upper(substr(first_name,1,1)),lower(substr(first_name,3))) '姓名'
from employees;
常见的数学函数
# round 四舍五入
select round(1.456,2);
# ceil 向上取整
select ceil(1.1);
# floor 向下取整
select floor(1.9);
SQL中的+号
SQL中的+号只能用于数字间的运算,如果一方为非数字,会尝试将其转换为数字进行运算。如果其中一方为NULL,那么结果必然为NULL。
未完待续... ...