文章目录
- 一. 数据库介绍
- 1. 数据库的重要性
- 2. 常用关系型数据库
- Oracle数据库
- MySQL数据库
- SQL Server数据库
- 二. SQL语言概述
- 数据库相关操作
- 1.创建数据库
- 2. 删除数据库
- 数据库表
- 数据类型
- 表的创建
- 表的约束
- 主键约束 (primary key)
- 非空约束 (not null)
- 唯一约束 (unique)
- 默认值约束 (default)
- 检查约束 (check)
- 自增字段 (auto_increment)
- 三. 数据相关操作
- 插入(INSERT)
- 查询(SELECT)
- 删除(DELETE)
- 更新(UPDATE)
- 四. 数据查询
- 1.查询-字段别名
- 2.查询-条件查询
- 3.查询-模糊查询
- 4.查询-排序查询
- 5.查询-去重查询
- 6.LIMIT 的使用
- 7.SQL中的函数
- 字符串函数
- 数学函数
- 日期函数
- 聚合函数
- 其他函数
- 8.联表查询
- 内联接(INNER JOIN)
- 左联接(LEFT JOIN)
- 右联接(RIGHT JOIN)
- 9.分组及筛选
一. 数据库介绍
数据库(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 是作者的简介。
id | name | bio |
---|---|---|
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中的函数
字符串函数
UPPER(column)
- 将字符串转换为大写。LOWER(column)
- 将字符串转换为小写。CONCAT(column1, column2, ...)
- 将多个字符串连接成一个字符串。SUBSTRING(column, start, length)
- 截取字符串的一部分。LENGTH(column)
- 获取字符串的长度。replace(column, old, new)
- 将字符串转换为小写。
数学函数
ABS(column)
- 计算绝对值。CEIL(column)
- 向上取整。FLOOR(column)
- 向下取整。ROUND(column)
- 四舍五入。
日期函数
NOW()
- 获取当前日期和时间。YEAR(date)
- 提取日期中的年份。MONTH(date)
- 提取日期中的月份。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;
其他函数
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;