解锁数据世界:从基础到精通的数据库探索之旅

文章目录

  • 一. 数据库介绍
    • 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 是作者的简介。

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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】Virtual Compiler Is All You Need For Assembly Code Search

阅读笔记:Virtual Compiler Is All You Need For Assembly Code Search 1. 研究背景 逆向工程:逆向工程需要在庞大的二进制文件中快速定位特定功能(例如恶意行为)。传统方法依赖于经验和启发式算法,效率低下。汇编代码搜索:通过自然语言搜索汇编代码功能,能够更高效地处…

洛古---越狱问题【快速幂】

今天和大家讲一个洛古的算法题,我觉得还是比较有含金量的,今天给大家分享一下 题目描述 监狱有 𝑛n个房间,每个房间关押一个犯人,有 𝑚 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗…

Python3.11.9+selenium,选择证书用多线程+键盘enter解决

Python3.11.9+selenium,选择证书用多线程+键盘enter解决 1、遇到问题:弹出证书选择,无法点击确定 import pyautogui pyautogui.press(enter) 键盘enter也无法点击 2、解决办法:用多线程解决同时执行click链接和Enter点击证书的确定 1、点击操作 # # 通过文本链接文本…

1、使用vscode+eide+stm32cubeMx开发stm32

步骤1:在vscode中安装如下的插件 步骤2:点击Embedded IDE,点击“新建项目”-----空项目-----Cortex-M项目。 步骤3:输入项目名,回车后会要制定保存路径,此时就是一个已项目名命名的文件夹。 步骤4&#xff…

网站小程序app怎么查有没有备案?

网站小程序app怎么查有没有备案?只需要官方一个网址就可以,工信部备案查询官网地址有且只有一个,百度搜索 "ICP备案查询" 找到官方gov.cn网站即可查询! 注:网站小程序app备案查询,可通过输入单位…

SpringCloud篇(注册中心 - Nacos)

目录 一、Nacos安装指南 1. Windows安装 1.1. 下载安装包 1.2. 解压 1.3. 端口配置 1.4. 启动 1.5. 访问 2. Linux安装 2.1. 安装JDK 2.2. 上传安装包 2.3. 解压 2.4. 端口配置 2.5. 启动 3. Nacos的依赖 二、Nacos注册中心的入门使用 1. 认识和安装Nacos 2. 服…

不对称信息

你买了一辆二手车,你并不知道它出过几次事故,但它之前的车主却对此了如指掌。来买保险的公司都是那些出险概率很大的(比如矿工、化工厂),但那些安全的公司很少去买保险,这两种问题都属于信息不对称问题。 …

加深深度学习矩阵计算理解--用人类直觉 走进线性代数(非应试)

文章目录 前言一、向量二、线性组合、空间与基三、矩阵和线性变换四、矩阵乘法与线性变化复合1、矩阵乘法代表线性变换的复合2、实例说明 五、三维空间的线性变换1、基本性质2、直觉理解3、矩阵表示 六、行列式一、行列式的定义2、行列式在空间中的抽象理解 七、逆矩阵 列空间秩…

Collections 工具类

在 Java 编程中,集合(Collections)是处理数据的核心工具之一。为了简化集合操作并提高代码的可读性和可维护性,JDK 提供了一个强大的工具类:java.util.Collections。这个类包含了一系列静态方法,用于对集合…

Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例

场景 Nginx代理的资源或网站等,url直接暴露有风险,需要添加身份认证,即输入用户名密码后才能成功访问。 注: 博客:霸道流氓气质-CSDN博客 实现 Windows上配置Nginx实现基本身份认证 修改nginx的配置文件 添加基…

K8S之Prometheus 部署(二十)

部署方式:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus 源码目录:kubernetes/cluster/addons/prometheus 服务发现:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kube…

Spring Boot——日志介绍和配置

1. 日志的介绍 在前面的学习中,控制台上打印出来的一大堆内容就是日志,可以帮助我们发现问题,分析问题,定位问题,除此之外,日志还可以进行系统的监控,数据采集等 2. 日志的使用 在程序中获取日…

systemd

文章目录 运行模式获取需要开机启动的服务UnitServiceInstall 添加开机自启程序 在centos6之前使用上面方式(串) 在centos7之后(含centos7)使用systemd来管理程序, 通过ls -al /sbin/init 查看链接指向了systemd程序:(并&#xf…

LeetCode 热题100之技巧关卡

1.只出现一次的数字 思路分析1:使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。 具体实现代码(详解版):…

如何优化Kafka消费者的性能

要优化 Kafka 消费者性能,你可以考虑以下策略: 并行消费:通过增加消费者组中的消费者数量来并行处理更多的消息,从而提升消费速度。 批量消费:配置 fetch.min.bytes 和 fetch.max.wait.ms 参数来控制批量消费的大小和…

服务器数据恢复——Ext4文件系统使用fsck后mount不上的数据恢复案例

关于Ext4文件系统的几个概念: 块组:Ext4文件系统的全部空间被划分为若干个块组,每个块组结构基本上相同。 块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述…

GIC寄存器介绍

往期内容 本专栏往期内容,interrtupr子系统: 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…

并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀 🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷于探索一些框架源码和算法技巧奥秘,还乐于分享这些宝贵的知识和经验。 💡 无论你是刚刚踏…

vue计算属性 初步使用案例

<template><div><h1>购物车</h1><div v-for"item in filteredItems" :key"item.id"><p>{{ item.name }} - {{ item.price }} 元</p><input type"number" v-model.number"item.quantity"…

springboot读取modbus数据

1、引入依赖 jlibmodbus <dependency><groupId>com.intelligt.modbus</groupId><artifactId>jlibmodbus</artifactId><version>1.2.9.7</version> </dependency> 2、数据获取 public String processData(String ip) {tr…