一. 数据库介绍

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

每个数据库都有一个或多个不同的API接口用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢,所以现在我们使用关系型数据库管理系
统(RDBMS)来存储和管理的大数据量。
所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的
数据。
按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网状数据库和关系型数据库。
而在当今的互联网企业中,最常用的数据库模式主要有两种,即关系型数据库和非关系型数据库。
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即表格形式)。在关系型数据库中,对数据的操
作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管
理。

1. 数据库的重要性

  • 数据一致性:数据库设计有严格的数据完整性和一致性规则,这确保了即使在并发操作的情况下,数据仍然

保持正确无误。

  • 数据共享:数据库允许多个应用程序或多个用户同时访问相同的数据集,这提高了数据的可用性和工作效

率。

  • 安全性:数据库通常具有安全措施,如权限控制和加密技术,以保护敏感信息免受未授权访问或篡改。

  • 备份与恢复:数据库管理系统支持定期备份数据,以便在硬件故障或其他灾难性事件发生时能够迅速恢复数

据。

  • 可扩展性:随着业务增长,数据库可以进行扩展以处理更多的数据量和更高的访问频率,这对于长期运营的

系统来说是非常重要的。

2. 常用关系型数据库

Oracle数据库

Oracle前身叫SDL,由Larry Ellison和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场
上大量销售,1979年,Oracle公司引入了第一个商用SQL关系数据库管理系统。Oracle公司是最早开发关系数
据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二。
Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。
2007年7月12日,甲骨文公司在美国纽约宣布推出数据库Oracle llg,这是Oracle数据库的最新版本。
Oracle介绍说,Oracle llg有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。
Oraclellg在安全,XML DB,备份等方面得到了很大提升。
主要应用范围:传统大企业,大公司,政府,金融,证券等等。
版本升级:Oracle8i,Oracle9i,Oracle10g,Oracle11g,Oracle12c。

MySQL数据库

MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司。在2008年1月16号被
Sun公司收购,后Sun公司又被oracle公司收购。目前MySQL被广泛地应用在Internet上的大中小型网站中。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多大中小型网站为了降低网站总体拥有
成本而选择了MySQL作为网站数据库,甚至国内知名的淘宝网也选择弃用ORACLE而更换为更开放的MySQL。
MySQL数据库主要应用范围:互联网领域,大中小型网站,游戏公司,电商平台等等。

SQL Server数据库

Microsoft SQL Server是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面,效率高,
可以作为中型企业或单位的数据库平台。SQL Server可以与Windows操 作系统紧密集成,不论是应用程序开
发速度还是系统事务处理运行速度,都能得到较大的 提升。对于在Windows平台上开发的各种企业级信息管理
系统来说,不论是C/S(客户机/ 服务器)架构还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的
选择。SQL Server的缺点是只能在Windows系统下运行

二. SQL语言概述

SQL(Structured Query Language)是一种用于管理和处理关系数据库的标准语言。

它主要用于执行查询、更新、管理数据库中的数据以及定义和操作数据库结构。

数据库相关操作

1.创建数据库

创建数据库是通过SQL语句来完成的,通常使用 create database 语句。一旦创建了数据库,就可以在其上定义表和其他数据库对象。

SQL语句:

create database bookstore;
-- 这条语句创建了一个名为 bookstore 的数据库

2. 删除数据库

删除数据库是通过SQL语句来完成的,通常使用 drop database 语句。

删除数据库会永久删除数据库及其所有内容,因此在执行此操作前请谨慎考虑。

SQL语句:

drop database bookstore;
-- 这条语句删除了名为 bookstore 的数据库

数据库表

数据库表是用来存储数据的二维表格,每一行称为一条记录(或元组),每一列表示一个属性(或字段)。

表中的每一行记录代表一个对象的状态,而每一列表示对象的一个属性。

在面向对象编程中,对象是类的实例,具有状态和行为。

在数据库设计中,表可以看作是对类的实例化,每条记录就是一个对象,而每一列表示对象的属性。

在这个表格中, id 是主键, name 是作者的名字, bio 是作者的简介。

idnamebio
1莫言中国当代著名作家,诺贝尔文学奖得主。
2金庸中国武侠小说泰斗,代表作《射雕英雄传》

数据类型

数据类型定义了可以存储在字段中的数据种类。选择合适的数据类型对于保证数据完整性和提高性能至关重要。

常用数据类型:

  • 整型 ( int ):用于存储整数。
  • 浮点型 ( double ):用于存储带有小数的数值。
  • 字符型 ( varchar ):用于存储文本字符串。
  • 日期时间型 ( date ):用于存储日期。

表的创建

创建表是通过SQL语句来完成的,通常使用 create table 语句。创建表时可以定义表中的各个字段及其数据类型。

SQL语句

create table student (
id int,
name varchar(100),
age int
);

表的约束

主键约束 (primary key)

主键约束用于唯一标识表中的每一条记录。每张表都应该具备一个主键。

作用:确保字段值的唯一性。数据不可重复。

SQL语句:

create table student (
id int primary key,
name varchar(100),
age int
);
-- 主键约束确保了表中的每一条记录都是唯一的,这有助于后续的操作,例如查询、更新或删除单条记录

非空约束 (not null)

非空约束确保字段值不能为空。

作用:防止数据丢失或错误。

SQL语句:

create table student (
id int primary key,
name varchar(100) not null,
age int
);
非空约束确保了某些关键字段(如姓名)必须有值,这样可以避免数据的不完整性。
-- 非空约束确保了某些关键字段(如姓名)必须有值,这样可以避免数据的不完整性。

唯一约束 (unique)

唯一约束确保字段或字段组合的值在表中是唯一的。

作用:避免重复数据。

SQL语句:

create table student (
id int primary key,
name varchar(100) not null,
email varchar(255) unique
);

默认值约束 (default)

默认值约束为字段提供默认值,在插入新记录时不指定值时自动使用。

作用:简化数据输入。

SQL语句:

create table student (
id int primary key,
name varchar(100) not null,
age int default 18
);
-- 默认值约束可以在插入记录时如果没有指定某些字段的值时,默认使用设定的值,从而简化数据输入过程

检查约束 (check)

检查约束确保字段值满足特定条件。

作用:防止无效数据的插入

SQL语句:

create table student (
id int primary key,
name varchar(100) not null,
age int check (age ≥ 0 and age ≤ 150)
);
-- 检查约束确保了年龄字段的值在合理的范围内,这样可以避免无效的数据插入。

自增字段 (auto_increment)

自增字段在每次插入新记录时自动增加,通常用于主键字段。

作用:简化主键的管理。

SQL语句:

create table student (
id int auto_increment primary key,
name varchar(100) not null,
age int
);
-- 自增字段确保了每次插入新记录时,主键字段自动递增,不需要手动指定,这样可以简化主键的管理。

三. 数据相关操作

插入(INSERT)

INSERT INTO tb (c1, c2,...)
VALUES (v1, v2,...);

查询(SELECT)

SELECT column1, column2, ...
FROM table_name
WHERE condition;

删除(DELETE)

DELETE FROM table_name WHERE condition;

更新(UPDATE)

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

四. 数据查询

1.查询-字段别名

语法说明:

字段别名是通过 AS 关键字或者直接跟在列名后使用,可以给查询结果中的列名赋予新的名称,方便展示或者处理。

查询用户信息并给电话列命名为“联系电话”
SELECT name, phone AS 联系电话 FROM user;

2.查询-条件查询

语法说明:

条件查询是通过 WHERE 子句指定查询条件,只返回符合条件的记录

查询特定用户的电话号码
SELECT * FROM user WHERE phone = '13812345678';

3.查询-模糊查询

语法说明

模糊查询是通过 LIKE 操作符配合通配符 % 和 _ 实现模式匹配。

%表示一个或多个字符,_表示一个字符

查询身份证号码包含 “678” 的用户
SELECT * FROM user WHERE nric LIKE '%678%';
查询房间编号中第三个字符为 “号” 的房间
SELECT * FROM room WHERE no LIKE '__号%';

4.查询-排序查询

语法说明:

排序查询是通过 ORDER BY 子句对查询结果进行排序,可以指定一个或多个列,并指定升序(ASC,默认)或降序(DESC)

按价格升序显示所有房间的信息
SELECT * FROM room ORDER BY price ASC;
按类型名称降序显示所有房间的信息
SELECT * FROM room ORDER BY type_id DESC;

5.查询-去重查询

语法说明:

去重查询是通过 DISTINCT 关键字去除查询结果中的重复行,常用于统计不同的值。

显示所有房间的价格分段
SELECT DISTINCT price FROM room;

6.LIMIT 的使用

LIMIT 子句用于限制从数据库表中选择的记录数量。它通常用于分页显示结果或者获取前几条记录。

SELECT ... FROM table_name
LIMIT offset,count;

7.SQL中的函数

字符串函数

  1. UPPER(column) - 将字符串转换为大写。
  2. LOWER(column) - 将字符串转换为小写。
  3. CONCAT(column1, column2, ...) - 将多个字符串连接成一个字符串。
  4. SUBSTRING(column, start, length) - 截取字符串的一部分。
  5. LENGTH(column) - 获取字符串的长度。
  6. replace(column, old, new) - 将字符串转换为小写。

数学函数

  1. ABS(column) - 计算绝对值。
  2. CEIL(column) - 向上取整。
  3. FLOOR(column) - 向下取整。
  4. ROUND(column) - 四舍五入。

日期函数

  1. NOW() - 获取当前日期和时间。
  2. YEAR(date) - 提取日期中的年份。
  3. MONTH(date) - 提取日期中的月份。
  4. DAY(date) - 提取日期中的天数。

聚合函数

COUNT() : 计算符合条件的行数。

计算所有用户的总数:
SELECT COUNT(*) AS 总用户数
FROM user;

SUM() : 计算数值列的总和。

计算所有房间的价格总和:
SELECT SUM(price) AS 总价格
FROM room;

AVG() : 计算数值列的平均值。

计算所有房间的平均价格:
SELECT AVG(price) AS 平均价格
FROM room;

MAX() : 找出一列中的最大值。

找出最贵的房间价格
SELECT MAX(price) AS 最高价格
FROM room;

MIN() : 找出一列中的最小值。

找出最便宜的房间价格
SELECT MIN(price) AS 最低价格
FROM room;

其他函数

  1. IFNULL(column, default_value) - 如果列值为 NULL,则返回默认值。

8.联表查询

内联接(INNER JOIN)

概念:

INNER JOIN 只返回两个表中匹配的行。如果某一行在其中一个表中没有匹配,则该行不会出现在结果集中。

列出所有房间及其对应的类型名称:
SELECT r.no AS 房间编号, t.name AS 类型名称
FROM room r
INNER JOIN type t ON r.type_id = t.id;

左联接(LEFT JOIN)

概念:

LEFT JOIN 返回左表中的所有行和右表中匹配的行。如果右表中没有匹配,则使用NULL填充右表中的列。

列出所有房间及其对应的类型名称(即使没有类型也要列出):
SELECT r.no AS 房间编号, t.name AS 类型名称
FROM room r
LEFT JOIN type t ON r.type_id = t.id;

右联接(RIGHT JOIN)

概念:

RIGHT JOIN 返回右表中的所有行和左表中匹配的行。如果左表中没有匹配,则使用NULL填充左表中的列。

列出所有房间类型及其对应的房间信息(即使没有房间也要列出):
SELECT t.name AS 类型名称, r.no AS 房间编号, r.description AS 描述, r.price AS 价格
FROM type t
RIGHT JOIN room r ON t.id = r.type_id;

9.分组及筛选

概念:

GROUP BY 子句用于组合数据,通常与聚合函数一起使用。

HAVING 子句用于对 GROUP BY 子句生成的结果集进行筛选。

计算每个用户的预定次数:
SELECT u.name AS 用户姓名, COUNT(*) AS 预定次数
FROM user u
INNER JOIN plan p ON u.id = p.user_id
GROUP BY u.name;

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部