- 什么是数据库:
数据库(Database DB)是按照数据结构来组织、存储和管理数据的仓库(存储数据的仓库),它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
存储表结构数据,到现在可以海量数据Hbase。
数据库就是用来存储,查询,管理数据的一个仓库。---订单数据【数据库中 可以从数据库中查询订单信息】
数据库的种类
按照早期的数据库理论,比较流行的数据库模型有三种,
① 分别为层次式数据库
② 网络式数据库和
③ 关系型数据库(前两者已经基本消失)。
而当今的互联网中,最常用的数据库模型主要是两种即 关系型数据库 和 非关系型数据库。
1. 关系型数据库
概念:关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。
类似于Excel表格,但是在关系型数据库中,列是固定的 行可以动态添加。
常用的关系型数据库: MySQL Oracle SQLserver 【.net语言C#】
2. 非关系型数据库
非关系型数据库:非关系型数据库也被称为NoSQL数据库,
NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”的意思(没有SQL语句?),因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
关系型数据库它是以行和列的形式存储数据[mysql oracle sqlServer等],非关系数据库则不是以行和列的形式存储【redis】
3. SQL 语言
SQL 语言 多个关系型数据库基本通用
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
我们安装的是MySQL应用服务程序,用来管理 存取数据。SQL是一门编程语言,是用来在MySQL等关系型数据库中进行 数据的管理 存取操作的。
所以说 我们这门课程叫做 MySQL ,其实学习的是 SQL .
1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
3、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
4. 事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。【mysql高级讲】
学习是SQL语言。 该语言用来操作关系型数据库。【DQL数据查询语言 DML 数据操作语言 DDL数据定义语言】
3.1. DDL 数据定义语言
3.1.1. 连接数据的三种方式(前提保证 MySQL 的服务开启)
第一种、Mysql自带的客户端连接。
第二种、使用命令:
mysql -uroot -proot (-u:用户名)(-p: 密码)
第三种: 使用客户端软件 navicat 和sqlyog等
3.1.2. DDL 定义语言
-- DDL数据定义语言---
-- 1. 创建数据库 语法: create database 数据库名;
create database qy174;
-- 2. 删除数据库 语法: drop database 数据库名
drop database qy174;
-- 3. 切换到指定的数据库。use 数据库名
use qy174;
-- 4. 创建表结构 语法: create table 表名(列名 数据类型,列名 数据类型....列名 数据类型);
-- 数据类型: int bigint float double decimal小数 varchar(长度)
-- 字符串类型 最大255 text文本类型 date日期类型
create table student(
id int,-- 学号
name varchar(10),
age int ,
salary decimal(10,2), -- 该数子有10,而小数2位
birthday date
);
-- 5. 删除表
drop table student;
3.1.3. 修改表的结构
增加一列 | alter table 表名 add column 列名 数据类型; |
删除指定列 | alter table 表名 drop column 列名; |
修改某一列的数据类型 | alter table 表名 modify column 列名 新数据类型 |
修改列名 | alter table 表名 change column 原来的列名 新的列名 数据类型 |
-- 6. 添加新列
alter table student add column salary decimal(6,2);
-- 7. 删除指定的列
alter table student drop column salary;
-- 8. 修改列的数据类型
alter table student modify column age double;
-- 9. 修改列的名字
alter table student change column age nianling double;
3.2. 添加约束
- 概念:约束时作用于表中字段上的规则用于限制表中的数据。
- 目的:保证数据库中数据的正确、有效性和完整性。
分类:
约束 | 描述 | 关键字 |
非空约束 | 限制该字段的数据不能为nul | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯 | PRIMARYKEY |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
检查约束(8.0.14版本后) | 保证字段值满足某一个条件 | CHECK |
外键约束 | 用来让两张图的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN |
3.3. 外键约束
概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性
为什么需要外键:
3.4. 添加外键
两种方式:
① constraint 外键名称 foreign key 外键字段名 references 主表(主表列名)
② alter table 表名 add constraint
数据类型:
int bigint varchar(长度) char(长度)
decimal(长度,小数) text date
char和varchar区别:char固定长度 varchar()可变
约束:
主键约束 primary key
唯一约束unique
非空约束not null
默认约束default
检查约束(8.0.14以后) check
外键约束constraint foreign key references
4. DML 语言(Data Mark Language)
DML(Data Mark Lau)数据标记性语言。该语言主要用户对数据库表中的记录进行操作的。【增加 删除 修改】
4.1. 增加记录
语法:
-- 为表中所有列添加数据
insert into 表名 values(值,值,值.....)
-- 为指定列添加数据
insert into 表名(列名,列名...) values(值,值....)
-- 批量添加
insert into 表名(列名,列名...) values(值,值....),(值,值....)
create table t_user(
id int primary key auto_increment,-- auto_increment:递增 必须为整型类型
name varchar(20) not null,
age int,
sex char(2) DEFAULT '男'
);
-- 为所有列添加数据
insert into t_user values(1,'关文琪',19,'男');
-- 添加指定列的数据
insert into t_user(id,name) values(2,'王世琦');
-- 添加多条记录
insert into t_user(id,name) values(3,'刘德华'),(4,'张学友');
-- 查询该表中的记录
select * from t_user;
注意:一定要注意 值 和 列 要个数匹配。
4.2. 删除操作
delete from 表名; -- 删除表中所有的记录 [不建议使用(删库跑路)]
delete from 表名 where 条件; -- 根据条件删除满足条件的记录
-- 根据条件删除记录
delete from t_user where id=1
-- 删除所有的数据[不要使用]
delete from t_user;
条件有哪些:
- 关系运算符: >,>=,<,<=,=,!=
- in运算符:
- between and
- 逻辑运算符: and(与) or(或)
4.3. 修改记录
语法:update 表名 set 列名=值,列名=值,列名=值.... where 条件;
注意: 最后一个列名=值不要使用,号
update t_user set age=18 where name='刘德华';
update t_user set name='马德华',age=99,sex='妖' where id=17;
5. DQL 语言(Data Query Language)
DQL( Data Query Language)数据查询语言。作用:用于查询数据表中记录。
语法:
select [列名...] from 表名 [where 条件]
5.1. 模糊查询
%:统配n个字符 _:统配一个字符
-- 查询所有列的值语句
select * from t_user;
-- 查询指定列的值
select name,age from t_user;
-- 根据条件查询
select * from t_user where age>20 or sex='男';
select * from t_user where age in(19,20,25,29)
-- 模糊查询 like 通配符 %:统配n个字符 _:统配一个字符
-- 查找名字中含有琪
select * from t_user where name like '%琪%'
-- 查询姓刘
select * from t_user where name like '刘%'
-- 第二个字为琪的
select * from t_user where name like '_琪%'
-- 查找姓刘的且只要两个字
select * from t_user where name like '刘_'
5.2. 为查询的列起别名:
(as 可省略)
语法: select 列名 as 别名, 列名 as 别名 from 表名 【where 条件】
eg : select name 姓名, age,sex 性别 from t_user;
5.3. 去除重复项
语法:select distinct 列名,列名 ... from 表名 【where 条件】
eg: select distinct id,name,age from t_user;
5.4. 排序
语法:select * from 表名 order by 列1,列2...[desc降序 asc升序默认]
eg: -- 先按照年龄升序,年龄相同按照id降序
select * from t_user order by age desc,id desc;
5.5. 分页查询
5.5.1. MySQL 数据库(常用)
语法: select * from 表名 limit 起始记录,每页显示条数;
eg: -- 查询第一页的数据 每页显示三条
select * from t_user limit 0,3;
-- 查询第二页的数据 每页显示三条
select * from t_user limit 3,3
-- 查询第三页的数据current 每页显示三条PageSize
select * from t_user limit 6,3
-- 规律: select * from t_user limit (current-1)*pageSize,pageSize;
5.5.2. sqlServer 数据库(不常用)
select top @pageSize *
from 表名
where 主键>=
(select max(主键)
from (
select top ((@pageIndex-1)*@pageSize+1) 主键
from 表名
order by 主键 asc) temp_max_ids)
order by 主键;
5.5.3. oracle 数据库
-- 40为pageCurrent * pageSize,30 应为为(pageCurrent - 1) * pageSize
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME
WHERE 1 = 1 -- 条件
ORDER BY CREATETIME DESC -- 排序
) A
WHERE ROWNUM <= 40
)
WHERE RN > 30
5.6. 聚合函数
函数就是mysql中自带的函数。 5大聚合函数
sum(): 求和
count(): 求个数
avg(): 平均值
max(): 最大值
min(): 最小值
eg: select sum(age) 年龄和,max(age) 最大年龄,min(age) 最小年龄,count(id) 个数,avg(age) from t_user;
5.7. 分组查询:
语法:select 分组的列,聚合函数 from 表名 group by 列名,列名 having 分组后的条件
-- 按照性别分组查询 人数大于等于3
select sex,count(id),max(age),name from t_user
group by sex,name having count(id)>=2;
-- 注意: select 后只能根聚合函数或分组的列名
5.8. 查询的完整语法:
select [distinct] [列名 as 别名,列名 别名, 列名][*]
from 表名
[where 条件]
[group by 分组列]
[having 分组后的条件]
[order by 排序的列]
[limit 起始记录,每页的条数]
6. 查询 SQL 的执行原理
基本语法:
select distinct * from 表名
where 条件
group by 分组
having 分组条件
order by 排序
limit 分页。
上面为他得语法结构。顺序不能乱。
6.1. 执行顺序
执行顺序
- from 先确定从哪张表中取数据,所以最先执行 from table
- where where 语句是对条件的加以限定
- group by 分组语句
- 聚合函数
- select
- distinct
- order by
- limit
举例:
-- 由于where先执行,select后执行,再执行where不知道别名n
select w_name n from workers where n='程西'
-- 因为from先执行--where 执行时指定别名为w,
select w_name n from workers w where w.w_name='程西'
7. 联表查询
什么是多表联合查询:
前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。
表与表之间有联系: ----外键。
表与表之间有哪些联系:----
多对一: 例如: 员工表和部门表 学生和班级 外键放置多一方
多对多: 例如: 学生和课程 设置一个中间表
一对一: 例如: 丈夫表和妻子表
为什么需要联表查询?
当我们查询的结果不在一张表中。就需要联表查询。
7.1. 联表查询的类
- 内连接: 查询两个表中公共部分。
- 外连接:
左外连接: 查询左边中所有的内容以及公共内容。
右外连接: 查询右边中所有的内容以及公共内容。 - 子连接: 自己和自己连接
7.1.1. 内连接
select * from 表名1 inner join 表名2 on 联表条件;
7.1.2. 左外连接
select * from 表名1 left join 表名2 on 联表条件
7.1.3. 右外连接
select * from 表名1 right join 表名2 on 联表条件
7.1.4. 自连接
自己连接自己的表
8. 嵌套查询
把一个sql查询的结果作为另一个sql查询的条件值。
例一:查询研发部的员工信息。
①查询研发部的部门号
②根据查询的部门号查询对应的员工信息
select * from tb_emp where dept_id=(select id from tb_dept where name='研发部')
9. 把查询结果当作一个临时表
查询各个部门中最高薪资的员工信息。
select e.* from tb_emp e inner join
(select max(salary) m,dept_id from tb_emp group by dept_id) t
on e.dept_id=t.dept_id and e.salary=t.m
10. MySQL 的内置函数
10.1. 字符串函数
10.2. 日期函数
10.3. 数学函数
10.4. 设置数据库允许远程连接
- 切换mysql数据库
- select host,user from user;
- 修饰update user set host='%' where user='root';
- 刷新配置。FLUSH PRIVILEGES;