数据库是研究数据管理的技术。即如何妥善地保存和科学地管理数据。

数据管理是指对数据进行分类、组织、编码、存储、检索和维护等操作。

数据管理技术好坏评判的标准:

(1)数据冗余

(2)数据共享

(3)数据独立性

(4)数据统一集中管理

数据库:

按一定结构组织存储的、集成的、可共享的数据的集合。

数据库有两种类型:关系型数据库与非关系型数据库。

关系型数据库:

存储格式能直观地反映实体间的关系,和创建的表格比较相似,表与表之间是有复杂的关联关系。

Oracle 、Mysql 、DB2 、Microsoft SQL Server、 Microsoft Access等

非关系型数据库:

指的是分布式、非关系型的、不保证遵循ACID原则的数据存储系统。

MongoDb 、 redis 、 HBase、 Cloudant等

使用场景:

1)海量数据存储

2)多格式的数据存储

3)对查询速度要求块的数据格式

关系型数据库

关系数据库是一个结构化的数据集合,这个结构要使用数据模型来描述显示世界中事物间的联系。

数据模型——是表示数据及联系的模型。

数据模型分类(按模型应用的不同目的的划分)

概念模型(也称语义模型)

常用E-R模型bb9623ff6787d83669525bde9a2ce89d.png

学生和课程是实体,菱形中对应的是实体之间的关系,椭圆中是对应的属性。

结构数据模型(简称数据模型)

1)层级模型

2)网状模型

3)关系模型等

关系型数据库的数据结构

关系

元组

属性

元数(度、目)

关系模式:关系结构的描述

R(A1,A2,A3,…,An)

R:关系名 括号中是属性名

2dff5e4da85c720b36e663b6f82d6d98.png

操纵与完整性约束

1)数据操纵:

增、删、改、查

2)需满足关系的完整性约束条件:

实体完整性约束

参照完整性约束

用户自定义的完整性约束

dcda143667b38ec9d6473e97d3e0b9e9.png

关系型数据库中的一条记录中若干个属性,若其中某一个属性(组)能唯一表示一条记录,该属性(组)就可以成为一个主键。(primary key)

b1c3e5c2dfd1a588302a7a0848055d3f.png

foreing key (外键)references参考课程的主键

关系数据库语言SQL

SQL(Structured Query Language)结构化查询语言:是通用的,功能极强的关系DB语言

作用:

SQL的数据定义

create database…

create table…

SQL的增删改查

SELECT, INSERT, UPDATE, DROP/DELETE

非关系型数据库

非关系型数据库,又称为NoSQL(Not Only SQL)

NoSQL数据库的特点:

1)模式自由

不需要定义表结构,数据表中的每条记录都可能有不同的属性和格式

2)逆规范化

不遵循范式要求,去掉完整性约束,减少表之间的依赖

3)弹性可扩展

可在系统运行的过程中,动态的删除和增加节点

4)多副本异步复制

数据快速写入一个节点,其余节点通过读取写入的日志来 实现异步复制。

5)弱事务

不能完全满足事务的ACID特性,但是可以保证事务的最终一致型。

MySQL基础

启动mysql:

cmd输入

net start mysql

mysql -uroot -p

标识符和关键字

1)标识符用来命名一些对象,如数据库、表、列、变量等,以便在脚本中其他地方引用。MySQL标识符命令规则稍微有点繁杂,其通过命名规则是:标识符由以字母或下划线(_)开头的字母、数字或下划线序列组成。

2)对于标识符是否区分大小写取决于操作系统,Windows下是不敏感的,但对于大多数linux/Unix系统,这些表示大小写是敏感的。

3)关键字,MySQL的关键字众多,不同版本的MySQL语言关键字也略有变化。所有关键字有自己特有的含义,应尽量避免作为标识符。

使用算术运算符进行加减乘除、求余运算。

f6c632d72d25b57f933aa4216b20187d.png

使用比较运算符判断运算。

df5c3184037ccc2851c38cc7c9e29d2d.png

运用is null、is not null运算符。

74652a70fe877c5d4acdb573a182d43b.png

运用“between and”运算符判断一个数是否在某范围。

6fd97d27386a395f82b6d9ae894e7624.png

运用“in”运算符判断某值是否在指定的范围内

2da497a581fdaa6952a07e9b94109b85.png

运算符“like”,"like"用来匹配字符串,其中“%”匹配任意个字符,“_”匹配一个字符。表达式如下 x1 like s1

f08014cf25b1d9cf3b2484291a04b143.png

与运算:“&&”、“and”

或运算:“||”、“or”

非运算:“!”、“not”

异或运算:“xor”

3e31571f96463f243893d0e70efa01fb.png

位运算:|、&、^、~、<>

545854561472da7971a0947e079c9daa.png

数学函数:abs,acos,asin,atan,ceiling,cos,degree(弧度值转为角度值),floor,greatest(获得一组数中的最大值),least(获得一组数中最小值),log,log10,PI,pow,radians(角度值转换为弧度值),rand(返回0~1之间的随机float数),round(返回指定小数的位数的表达式的值),sign(返回某个数的符号),sin(返回以弧度为单位的角度的正弦值),sqrt,tan

1d8c9a837b9d2af0988e29ac4eaf9f04.png

show databases;语句查看MySQL服务器中的所有数据库

5420dd99fa051d25e7614b8f91bdae7a.png

创建数据库:create database if not exists mysqltest;指定字符集为gb2312

391c13c4f0d8b324867ba84c2ab4e9a5.png

当前所有存在的系统数据库:

dc33a94d874fd657101ff6096ce961b9.png

打开数据库:use test;

0a48e1bd206f562157819f14f09c962e.png

修改数据库:alter database mytest;

c06061ab9fa7b5ceda33a5cedf206ac2.png

显示数据库结构:show create database test;

26dd6f391ff323268d95f000e5405030.png

删除数据库:drop database [if exists] db_name;

c8443ecfd479aa5e1d784053f2db6f4e.png

创建数据库表

create [temporary] table [if not exists] table_name

temporary:使用该关键字表示创建临时表

if not exists:如果不存在就创建,存在就不执行

79c22f6e42cbc29543c5e41571d5dc66.png

66ad768224182ede0e0df2ecbf00de35.png

fd40391d5604b3436bd1a80e4a3e2b97.pngb63b997954213f465de7274159a9857d.png

f9a71fcd911c33ea9bc01b608d717c68.png

ad3457c1941302ef0466655ea8e7135b.png

Float(3,1)表示精度为4,小数为一位

设置表的属性自动增加

MySQL中数据库表中,一个整数列可以有一个附加属性auto_increment,它是一个特殊的约束条件,主要用于为表中插入的新记录自动生成唯一的序列编码。

用法:

属性名 数据类型 auto_increment

创建选课表sc,选课号sn_no是自动增量,选课时间默认为当前时间,其他字段分别是学号、课程号和教师号。

9a42a39c673ef4ddade67332f49cb46b.png

查看已创建的表:show tables;

7358a7329c5800f1ecbdc57a6d1a8278.png

查看表结构:describe语句、show create table语句

99514b280895f4bbcc44c99c394a56fa.png

6cd9fbf027cc308d591ab981777b3f4f.png

修改数据库表,语法格式如下:

1)在student表的Email列后面增加一列address

c48db25dd752ca473834d4ebb9c429f9.png

操作完成后,可以执行describe语句查看一下

647b1b8c0e90226ab344b5d390c17907.png

修改表名:将表sc重命名为se_course.

ed921580fbc139598bd8be42d6044cb7.png

3)修改字段的数据类型:修改course表的type字段,使其取固定值,“必修”或“选修”默认为“必修”

6d3e9a4c9c492a0fdf493e5fe97881f1.png

4)删除字段:删除student表的字段address

7118e6059c61f77db3cabf6f4c89a7f8.png

删除数据库中已存在的表,删除表会删除表中的所有数据,所以要慎重。

drop table table_name

在python数据库中创建表example,然后删除example表。

e2c3caa0bd0f16ad85f0befa10755ac5.png

表记录的插入

1)利用insert命令向表student中插入一行数据

2)利用insert命令向表student中插入多行数据

e5b1bc23d6338ed6804cca7270a47efe.png

利用replace命令向表course中插入多行数据

d7f3f0277d8433e24be6096173367000.png

insert与replace的区别:

insert如果向表中插入已经存在的学号(主键)的记录,将出现主键冲突错误。

replace向表中插入数据时,首先尝试插入数据到列表中;若发现表中已有此行数据(根据主键或唯一索引判断),则先删除此行数据再插入新数据,否则直接插入新数据。

使用set子句插入数据

可以不按顺序插入数据,对允许空值的列可以不插入

利用set子句向se_course表插入数据。

9918f9af52614cba5e62eca650bf8714.png

用update…set…命令可以修改一个表的数据

将学号为210010的学生的课程号为c05103的期末成绩final修改为99分

7985dc34761fe1856226437bdfcdf989.png

利用delete…from…语句可以从单个表中删除指定表数据。

84438448070e23765b0393e69b8fcfa6.png

基本查询语句

select语句是SQL语句从数据库中获取信息的一个基本语句,可实现从一个或多个数据库中的一个或多个表中查询信息,并返回结果集。

e5a11a89d2d2d4edb4969d17e38aaacd.png

all是默认值,distinct取消结果集中的重复行。

group by用于对查询结果根据grouping_columns的值进行分组。

having子句是应用于分组结果集的附加条件,与group by一起使用,用于在group by子句后选择行。

查询test数据库course表中的所有数据。

查询数据库中表中的前5条数据

select * from course limit 5;

bab9763f6e4a954b8302a069bee324e9.png

查询student表中的studentNo、sname和phone数据

8317bd242dd5954be0889871069af60f.png

单表查询:

在student表中查询出生日期在2001年以后的学生的学号、姓名、电话,并为这些字段去别名。

c82f9d0cbcfb708da6a6f92161e3e2a8.png

在score表中查询期末成绩高于80 分的学生的学号,并按学号排序,不允许重复(distinct)

b9ee51683ff650ce8a515b4aac698670.png

查询student中入学成绩在640分以上的学生的学号、姓名信息(where子句的使用)

2b1f1f7c075be6df8cd9cbef0c69388e.png

带in关键字的查询:查询学号分别为210009、210010的学生学号、课程号、期末成绩。

8988cfcf027f1d3e48bdc1c865733b11.png

between…and…

查询选修课程号为c05103的学生学号和期末成绩,要求平时成绩在80-95分之间

cd8119fceceaaccd9b37987988584fd6.png

用is null关键字查询空值。se_course表添加成绩字段score,插入两条记录,查询se_course中成绩为null的学生学号、课程号和成绩。(一个字段值是否为空,要表示为“is null”或“is not null”),不能表示为=null或<>null。如果写成“字段=null”或“字段<>null”,系统直接处理为null值,按照false处理而不报错。

337446f6133148bff6c88107174ffda5.png

使用order by子句对结果集排序

在score表中查询期末成绩高于90分的学生学号、课程号和期末成绩,并先按课程号的升序、再按期末成绩的降序排列

a32782a9e25a4da8085f5514f126437d.png

使用group by子句

使用group by子句对score表数据分组,显示每个学生的学号和其所学各课程的平均期末成绩,并将结果按平均期末成绩的升序排列

ac60fc96788b4970ab29e32588a1a7e7.png

group by和having子句一起使用

查询选课在2门以上且各门课程期末成绩均高于70 分的学生的学号及其各门课程期末成绩相加后的成绩,查询结果按总成绩降序列出。

89dfc9a890dde47e6a51c047f3f9dd8e.png

多表连接

查询选修课程号为c05103的学生的学号、姓名和期末成绩

0718c3e100691c025ecdfcbacbeec764.png

内连接inner join:通过比较数据源表键共享列的值,从多个源表检索符合条件的行

289a041d6bde6a83764dc0f21ac43efb.png

左外连接Left Outer Join,利用左外连接方式查询学生的学号、姓名、平时成绩和期末成绩。

bc6b5a241f137f71e32acfbb2c664c66.png

左外连接left outer join:返回指定左表的全部行+右表中对应的行,如果左表中的数据在右表中没有与其匹配的行,则再查询结果集中相应位置显示为空值。

右外连接Right Outer Join

右外连接right outer join:返回指定右表的全部行+左表中对应的行,如果右表中的数据在左表中没有与其匹配的行,则再查询结果集中相应位置显示为空值。

select子句中的子查询

查询学号为210010的学生的姓名、入学成绩、所有学生的平均入学成绩及该学生成绩与所有学生的平均入学成绩的差。

27f17999a1459afd9013c613505946c7.png

where子句中的子查询:1、带比较运算符的字查询

查询期末成绩比选修该课程平均期末成绩低的学生的学号、课程号和期末成绩

74fc65109cde50e7b53a1bc18a541c59.png

where子句中的子查询:带in关键字的子查询

查询期末成绩高于90分的学生的学号、姓名、电话和Email

2b037584974fea858157cd571425648d.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐