一、 数据库概述
1. 为什么使用数据库?
实现数据持久化
2. 数据库与数据库管理系统
2.1 数据库的相关概念
DB:数据库
存储数据的仓库,其本质为一个文件系统。保存了一系列有组织的数据。
DBMS:数据库管理系统
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
SQL:结构化查询语句
专门用来与数据库通信的语句。
2.2 数据库与数据库管理系统的关系
2.3 常见的数据库介绍
- Oracle
- MySQL
- DB2
- PostgreSQL
- SQLite
- informix
3. RDBMS与非RDBMS
3.1 关系型数据库(RDBMS)
3.1.1 实质
- 关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。
- 关系型数据模型以行和列的形式存储数据。
- SQL为关系型数据库的查询语言。
3.2 非关系型数据库(非RDBMS)
3.2.1 种类
- 键值型数据库
- 文档型数据库
- 搜索引擎数据库
- 列式数据库
- 图形数据库
3.2.2 NoSQL
4. 关系型数据库设计规则
4.1 表、记录、字段
- E-R模型中有三个主要概念:实体集、属性、联系集
- 一个实体集(class) <> 一个表(table)
一个实体(instance) <> 数据库表中的一行(row)/ 一条记录(record)
一个属性(attribute) <> 数据库表中的一列(column)/ 一个字段(field)
4.2 表的关联关系
4.2.1 一对一关系
两种建表原则:
- 外键唯一:主表的主键与从表的外键,形成主外键关系,外键唯一。
- 外键是主键:主表的主键和从表的主键,形成主外键关系。
4.2.2 一对多关系
4.2.3 多对多
4.2.4 自我引用
二、 基本的SELECT语句
1. SQL概述
1.1 SQL分类
DDL(数据定义语言)
定义不同的数据库、表、视图、索引等数据库对象,可用来创建、删除、修改数据的数据表的结构。
- 主要语句的关键字包括CREATE、DROP、ALTER等。
DML(数据操作语言)
用于添加、删除、更新和查询数据库记录,并检查数据完整性。
- 主要语句的关键字包括INSERT、DELETE、UPDATE、SELECT等。
DCL(数据控制语言)
用于定义数据库、表、字段、用户的访问权限和安全级别。
- 主要语句的关键字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT等。
2. SQL语言的规则与规范
2.1 基本规则
- SQL可写在一行或多行,建议多行,必要时缩进
- 每条命令以;或\g或\G结束
- 关键字不能被缩写也不能分行
- 关于标点符号
必须保证所有的(),单引号、双引号是成对结束的
必须使用英文状态下的半角输入方式
字符串型和日期时间类型的数据可以使用单引号(‘’)表示
列的别名,尽量使用双引号(" "),不建议省略
2.2 SQL的书写规范
- windows环境下是大小写不敏感的
- Linux环境下是大小写敏感的
- 推荐统一的书写规范:
数据库名、表名、表别名、字段名、字段别名等都小写
SQL关键字、函数名、绑定变量等都大写
2.3 注释
单行注释:#
单行注释:-- 注释文字
多行注释:/* */
2.4 命名规范
2.5 数据导入指令
方式一:source 文件的全路径名
方式二:基于具体的图形化界面导入数据
3. 基本的SELECT语句
3.0 SELECT…
SELECT 1;
3.1 SELECT…FROM
通配符(*),不建议使用
# 选择全部字段
SELECT *
FROM department;
选择特定的列:
SELECT departments.department_id,departments.location_id
FROM departments
3.2 列的别名
- 重命名一个列,便于计算。
- 方法:
1.使用关键字AS(AS也可省略)
SELECT employees.last_name AS name , employees.commission_pct comm
FROM employees
2.别名使用双引号
SELECT employees.last_name "name"
FROM employees
3.3 去除重复行
默认情况下,查询会返回全部行,包括重复行。
方法:使用DISTINCT关键字去除重复行
SELECT DISTINCT employees.department_id
FROM employees;
错误行为:
SELECT employees.salary,DISTINCT employees.department_id
FROM employees;
无意义行为:
SELECT DISTINCT employees.department_id,employees.salary
FROM employees;
3.4 空值参与运算
- 空值:null
- null 不等同于0
- 空值参与运算:所有运算符或列值遇到null值,运算的结果都为null
- MySQL中,空值不等于空字符串。一个空字符串的长度为0,而一个空值的长度是空,同时,空值是占用空间。
SELECT employees.employee_id, employees.salary "月工资", employees.salary * ( 1 + employees.commission_pct ) * 12 "年工资"
FROM employees
SELECT employees.employee_id, employees.salary "月工资", employees.salary * ( 1 + IFNULL(employees.commission_pct,0) ) * 12 "年工资"
FROM employees
3.5 着重号
- 使用关键字去命名后,需要使用着重号去区分。
3.6 查询常数
SELECT "尚硅谷" , employees.first_name
FROM employees;
4. 显示表结构
- 显示表中字段的详细信息。
DESCRIBE employees;
DESC employees;
5. 过滤数据 WHERE
过滤条件在FROM后面
SELECT *
FROM employees
WHERE employees.last_name = 'King'
$第三章练习:
# 查询员工12个月的工资总和,并起别名ANNUAL SALARY
SELECT employees.employee_id , employees.last_name , employees.salary * 12 "ANNUAL SALARY"
FROM employees;
# 查询employees.salary表中去除重复的employees.job_id以后的数据
SELECT DISTINCT employees.job_id
FROM employees;
# 查询工资大于12000的员工姓名和工资
SELECT employees.last_name , employees.salary
FROM employees
WHERE employees.salary > 12000
# 查询员工号为·176的员工的姓名和部门号
SELECT employees.last_name , employees.department_id
FROM employees
WHERE employees.employee_id = 176;
# 显示表departments的结构·,并查询其中的全部数据
DESCRIBE departments;
三、 运算符
1. 算术运算符
算术运算符主要用于数学运算,其可以连接运算符前后的两个数字或表达式,对数字或表达式进行+、-、*、\、%。
1. 加法与减法运算符
- 一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
- 一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;
- MySQL中,+只进行数字的相加。(如果遇到非数值类型,则先转换为数值;如果失败,则按0计算)【补充:MySQL中字符串拼接使用字符串CONCAT()实现】
2. 乘法与除法远算符
- 一个数乘以整数1和除以整数1后仍得原数;
- 一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
- 一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
- 一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
- 乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
- 在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。
2. 乘法与除法远算符