IdeFun

努力不一定成功,但不努力真的很舒服。

0%

数据库学习笔记

数据库学习笔记

数据库的相关概念

DB

数据库(database) :存储数据的”仓库”,它保存了一系列有组织的数据

数据库存储的特点

  1. 将数据放到表中,表再放到库中
  2. 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己.表名具有唯一性
  3. 表具有一些特性,这些特性定义了数据在表中如何存储
  4. 表由列组成,我们也称为字段.所有表都是由一个或多个列组成的
  5. 表中的数据是按行存储的

DBMS

数据库管理系统(Database Management System).数据库是通过DBMS创建和操作的容器

常见的数据库管理系统:MySQL、Oracle、DB2、SqlServer等

DBMS分为两类

  • 基于共享文件系统的DBMS(Access)
  • 基于客户机—服务器的DBMS(MySQL、Oracle、SqlServer)

MySQL

  • 成本低,开放源代码,一般可以免费试用
  • 性能高,执行很快,可移植性好
  • 简单,很容易安装和使用
  • 社区版(免费),企业版(收费)

SQL

结构化查询语言(Structure Query Language) :专门用来与数据库通信的语言

SQL的优点

  1. 不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
  2. 简单易学
  3. 虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作

MySQL的下载安装

下载MySQL

下载地址

点击Download后,可能出现下面的页面,点击红框所选部分

安装MySQL

找到下载的MySQL安装文件,双击运行

等待片刻

选择Developer Default,点击next

点击Execute

等待下载,之后点击Next

点击Next

点击Next

点击Next

设置管理员密码,之后点击Next

点击Next

点击Execute

点击Finish

点击Next

点击Finish

点击Next

输入密码,之后点击Check

连接成功,点击Next

点击Execute

点击Finish

点击Next

点击Finish,安装完毕

关系数据库标准语言SQL

学生-课程数据库

Student
学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
201215121 李勇 20 CS
201215122 刘晨 19 CS
201215123 王敏 18 MA
201215125 张立 19 IS
Course
课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1 数据库 5 4
2 数学 2
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 PASCAL语言 6 4
SC
学号
Sno
课程号
Cno
成绩
Grade
201215121 1 92
201215121 1 92
201215121 2 85
201215121 3 88
201215122 2 90
201215122 3 80
### 数据定义 ### 数据查询 #### 单表查询 ##### 选择表中若干列 > 查询全体学生的姓名,出生年份和所在的院系,要求用小写字母表示系名(现在年份为2021)
SELECT Sname,'Year of Birth',2021-Sage,LOWER(Sdept)
FROM Student
![](https://gitee.com/wxpgitee/images/raw/master/image-20210329222607438.png) > 通过指定别名改变查询结果的列标题
SELECT Sname NAME,'Year of Birth' BIRTH,2021-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student
![](https://gitee.com/wxpgitee/images/raw/master/image-20210329222841512.png) ##### 选择表中若干元组 ##### 消除取值重复的行 两个本来并不完全相同的元组在投影到指定的某些列上后,可能会变成相同的行.可以用DISTINCT消除它们,如果没有指定DISTINCT关键词,则默认为ALL > 查询选修了课程的学生学号
SELECT Sno
FROM SC
![](https://gitee.com/wxpgitee/images/raw/master/image-20210329223333574.png) >查询选修了课程的学生学号,使用DISTINCT消除重复行
SELECT DISTINCT Sno
FROM SC
![](https://gitee.com/wxpgitee/images/raw/master/image-20210329223506629.png) ##### 查询满足条件的元组 查询满足条件的元组可以通过WHERE子句实现
WHERE子句常用的查询条件
查询条件 谓词
比较 =,>,!=,!>等
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件(逻辑运算) AND,OR,NOT

LIKE运算符

进行字符串的匹配

SELECT *
FROM students
WHERE Sno LIKE '201215121'
-- 等价于 WHERE Sno='201215121'
--如果LIKE后的匹配串中不含通配符,则可以用=代替;用!=或<>运算符代替NOT LIKE
WHERE Sname LIKE '刘%'
-- %代表任意长度(长度可以为0)的字符串
WHERE Sname LIKE '欧阳_'
-- _代表任意单个字符;数据库字符集为ASCII时一个汉字需要两个_,当字符集为GBK时需要一个_
WHERE Cname LIKE 'DB\_Design' ESCAPE'\'
-- 如果要查询的字符串本身就含有通配符%或_,这时需要使用ESCAPE'<换码字符>'对通配符进行转义;ESCAPE'\'表示'\'为换码字符

REGEXP运算符

正则表达式的缩写(regular expression)

SELECT *
FROM customers
-- WHERE last_name LIKE '%field%'
WHERE last_name REGEXP 'field'
-- 等价与用LIKE
WHERE last_name REGEXP '^field'
-- '^'表示以什么开头
WHERE last_name REGEXP 'field$'
-- '$'表示以什么结尾
WHERE last_name REGEXP 'field|mac|rose'
-- '|'表示或
WHERE last_name REGEXP '[a-j]e'
-- [a-j]表示a到j任意一个字母

IS NULL运算符

搜索缺失属性的记录

SELECT *
FROM customers
WHERE phone IS NULL
-- 查找电话号码为NULL
WHERE phone IS NOT NULL
-- 查找电话号码不为NULL

ORDER BY子句

对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认为升序.对于空值,排序时显示的次序由具体系统实现来决定.

SELECT *
FROM Student
ORDER BY Sdept,Sage DESC
-- 查询结果按照所在系的系号升序排列,同一系中学生按照年龄降序排列
SELECT first_name,last_name
FROM customers
ORDER BY birth_date
-- 选择first_name和last_name两列然后按照birth_date排序

聚集函数

聚集函数 作用
COUNT(*) 统计元组个数
COUNT([DISTINCT\ ALL] <列名>) 统计一列中值的个数
SUM([DISTINCT\ ALL] <列名>) 计算一列值的总和(此列必须为数值型)
AVG([DISTINCT\ ALL] <列名>) 计算一列值的平均值(此列必须为数值型)
MAX([DISTINCT\ ALL] <列名>) 求一列值中的最大值
MIN([DISTINCT\ ALL] <列名>) 求一列值中的最小值

当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值.COUNT(*)是对元组进行计数,某个元组的一个或部分列取空值不影响COUNT的统计结果

LIMIT子句

限制查询返回的记录,LIMIT子句要放在最后

SELECT *
FROM customers
LIMIT 3
-- 限制返回结果为前3个
LIMIT 6,3
-- 跳过前6个,再选择3个

内连接

数据库编程

嵌入式SQL

对于嵌入式SQL,数据库管理系统通常采用预编

-------------本文结束感谢您的阅读-------------