本笔记为本人在B站学习时整理而成,为了更好的学习,将其整理成笔记,以防忘记相关知识点。
概述
sql、DB、DBMS分别是什么,他们之间的关系?
DB:
DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
DBMS:
DataBase Management System(数据库管理系统,常见的有:MySQL Oracle DB2 Sybase SqlServer…)
SQL:
结构化查询语言,是一门标准通用的语言。标准的sql适合于所有的数据库产品。
SQL属于高级语言。只要能看懂英语单词的,写出来的sql语句,可以读懂什么意思。
SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(sql语句的编译由DBMS完成。)
DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。
DBMS -(执行)-> SQL -(操作)-> DB。
什么是表?
表:table
表:table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
一个表包括行和列:
(1)行:被称为数据/记录(data)
(2)列:被称为字段(column)
例如:
1 |
|
每一个字段应该包括哪些属性?
字段名、数据类型、相关的约束。
学习MySQL主要还是学习通用的SQL语句,那么SQL语句包括增删改查,SQL语句怎么分类呢?
DQL(数据查询语言)
:查询语句,凡是select语句都是DQL。DML(数据操作语言)
:insert delete update,对表当中的数据进行增删改。DDL(数据定义语言)
:create drop alter,对表结构的增删改。TCL(事务控制语言)
:commit提交事务,rollback回滚事务。(TCL中的T是Transaction)DCL(数据控制语言)
:grant授权、revoke撤销权限等。
导入数据
新建study.sql
脚本文件,将下面的sql语句写进去:
1 | DROP TABLE IF EXISTS EMP; |
操作步骤:
1 | #第一步:登录mysql数据库管理系统 |
什么是sql脚本呢
study.sql,这个文件以sql结尾,这样的文件被称为“sql脚本”。
当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称这样的文件为sql脚本。
注意:
直接使用source命令可以执行sql脚本。
sql脚本中的数据量太大的时候,无法打开,请使用source命令完成初始化。
查看表结构
1 | mysql> use study; |
表中的数据
1 | mysql> select * from emp; |
常用命令
1 | mysql> select database(); #查看当前使用的是哪个数据库 |
简单的查询语句(DQL)
语法格式
1 | select 字段名1,字段名2,字段名3,.... from 表名; |
1 | #查询员工的年薪?(字段可以参与数学运算。) |
条件查询
语法格式
1 | select 字段,字段... |
执行顺序
先from,然后where,最后select。
例子
1 | #查询工资等于5000的员工姓名? |
排序(升序、降序)
1 | #按照工资升序,找出员工名和薪资? |
分组函数
1 | count #计数 |
单行处理函数
1 | #什么是单行处理函数? |
关于查询结果集的去重
1 | mysql> select distinct job from emp; # distinct关键字去除重复记录。 |
连接查询
什么是连接查询
在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。
在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,起码两张表。
1 | stuno stuname classno classname |
连接查询的分类
1 | #根据语法出现的年代来划分的话,包括: |
笛卡尔乘积现象
在表的连接查询方面有一种现象被称为:笛卡尔积现象。
1 | #案例:找出每一个员工的部门名称,要求显示员工名和部门名。 |
怎么避免笛卡尔积现象
当然是加条件进行过滤。
1 | #思考:避免了笛卡尔积现象,会减少记录的匹配次数吗? |
内连接之等值连接
最大特点是:条件是等量关系
1 | #案例:查询每个员工的部门名称,要求显示员工名和部门名。 |
内连接之非等值连接
最大的特点是:连接条件中的关系是非等量关系。
1 | #:找出每个员工的工资等级,要求显示员工名、工资、工资等级。 |
自连接
最大的特点是:一张表看做两张表。自己连接自己。
1 | #案例:找出每个员工的上级领导,要求显示员工名和对应的领导名。 |
外连接
外连接最重要的特点是:主表的数据无条件的全部查询出来。
捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。
1 | #什么是外连接,和内连接有什么区别? |
1 | #案例:找出每个员工的上级领导?(所有员工必须全部查询出来。) |
1 | #外连接最重要的特点是:主表的数据无条件的全部查询出来。 |
三张表怎么连接查询
1 | #案例:找出每一个员工的部门名称以及工资等级。 |
子查询
1 | #什么是子查询?子查询都可以出现在哪里? |
union (可以将查询结果集相加)
1 | #案例:找出工作岗位是SALESMAN和MANAGER的员工? |
limit (重点中的重点,以后分页查询全靠它了)
1 | #limit是mysql特有的,其他数据库中没有,不通用。(Oracle中有一个相同的机制,叫做rownum) |
创建表
1 |
|
insert语句插入数据
1 | #语法格式: |
表的复制
1 | #语法: |
将查询结果插入到一张表中
1 | mysql> insert into dept1 select * from dept; |
update语句修改数据
1 | #语法格式: |
delete语句删除数据
1 | #语法格式: |
对于表结构的修改
1 | #使用工具完成即可,因为在实际开发中表一旦设计好之后,对表结构的修改是很少的, |
约束(Constraint)
1 | #什么是约束?常见的约束有哪些呢? |
存储引擎
1 | #完整的建表语句 |
事务(Transaction)
1 | #什么是事务? |
索引
1 | #什么是索引?有什么用? |
视图(view)
1 | #什么是视图? |
DBA命令
1 | #在数据库当中的数据导出 |
数据库设计三范式(重点内容,面试经常会问)
1 | #什么是设计范式? |
发布时间: 2020-07-25
最后更新: 2023-01-27
本文标题: mysql学习笔记
本文链接: https://blog-yilia.xiaojingge.com/posts/7a867ba8.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
