MySQL 从删库到跑路
技术事简单报,看老王带你入门MySQL,从删库到跑路
本篇文章适用于大学学习MySQL的入门同学,理解不深,欢迎交流
目录
一.认识SQL语句
1)什么是SQL语句,什么是表?
2)SQL语句的分类
二.了解MySQL
三.SQL查询语句
1)简单的查询语句
2)简单查询
3) 重命名查询结果的列
4)查询全部字段
5)条件查询
6)between
7)and 与 or 的优先级问题
8)in与or
9)模糊查询like
10)数据排序:
11)分组函数
12) count
13)group by和having
14)单行处理函数
15)关于查询结果去重
sql语句执行顺序
四.连接查询
1.连接查询
1.1什么是连接查询?
1.2 连接查询的分类?
1.3 笛卡尔乘积现象
插入:关于表的别名:
2.内连接
2.1 内连接中的等值连接
2.2 内连接的非等值连接
2.3 内连接中的自连接
3.外连接
3.1外连接的分类
3、子查询
3.1、什么是子查询?子查询都可以出现在哪里?
3.2、where子句当中使用子查询
3.3、from后面嵌套子查询
3.4、在select后面嵌套子查询。
4.union(可以将查询结果集相加)
5、limit(重点中的重点,以后分页查询全靠它了)
limit是mysql特有的,其他数据库中没有,不通用。(Oracle中有一个相同的机制rownum)
limit取结果集中的部分数据,这时它的作用。
5.1语法机制
5.2、案例:找出工资排名在第四到第九名的员工?
5.3、通用的标准分页sql?
6、创建表:
关于MYSQL当中字段的数据类型?以下只说常见的
7、insert语句插入数据
8、表的复制
9、将查询结果插入到一张表中?(表中的数据要对应)
10、修改数据:update
11、删除数据?
12、DQL(select)DML(insert delete update)
13、约束(Constraint)
13.1、什么是约束?常见的约束有哪些呢?
13.2、非空约束 not null
14、约束
14.1、唯一性约束(unique)
14.2、主键约束
14.3、外键约束
15.存储引擎?
15.1、完整的建表语句
16.2、什么是存储引擎呢?
16.3、查看当前mysql支持的存储引擎?
事务(Transaction)
什么是事务?
和事务相关的语句只有:DML语句。(insert delete update)
事务的原理
开启事务机制:
事务的特性?
关于事务之间的隔离性
索引
什么是索引?有什么用?
怎么创建索引对象?怎么删除索引对象?
什么时候考虑给字段添加索引?(满足什么条件)
查看sql语句的执行计划:
索引底层采用的数据结构是:B+Tree
索引的实现原理?
索引的分类?
索引什么时候失效 ?
视图
什么是视图
视图作用
怎么创建视图?怎么删除视图?
对视图进行怎删改查,会影响原表数据。(通过视图影响原表数据的,不是直接操作的原表)
面向视图操作?
视图的作用?
DBA命令
将数据库当中的数据导出
导入数据
数据库设计三范式(重点内容,面试经常问)
什么是设计范式?
三范式都是哪些?
一对一怎么设计?
一.认识SQL语句
老王刚上大学的时候,SQL语句属实是给老王的心里留下了不小的阴影,各种多表联查各种join属实是给老王整不会了,接下来,老王就用自己的理解,带着大家逐步的了解SQL语句
1)什么是SQL语句,什么是表?
老规矩,看看度娘你会发现你什么都没看懂,通俗的来说,你可以把SQL语句当成数据库的各个管家,有查询的,有删除(删库)的等等,你需要他们做事情的时候,只需要通过一些逻辑的设定,从而达到操纵数据库的效果。
提到数据库,不得不提到一个重要的东西,表
什么是表?别问老王,看图说话
在数据库中,表即为table ,table是数据库的基本组成单元,所有的数据都用表格的方式呈现给我们,说白了就是方便看
一个合格成熟的数据库里全是表,那么一个成熟的表里有什么?
行:被称为数据/记录(data)
列:被称为字段(column)也可以记作列名
每一个字段应该包括那些属性?
字段名、数据类型、相关的约束(后续说,字面意思就是约束这一行,例如这一行只能写文字或者数字,后续老王会给大家详细的解释什么是约束)
2)SQL语句的分类
在SQL语句中,所有的SQL语句分为五大类
DQL(数据查询语言):查询语句,凡是select语句都是DQL
DML(数据操作语言):insert delete update,对表中的数据进行增删改
DDL(数据定义语言):create drop alter,对表结构的增删改
TCL(事务控制语言):commit提交事务,rollback回滚事务。(T:transaction)
DCL(数据控制语言):grant授权、revoke撤销权限等
老王没记住过,都是考试背的,在老王的印象中,SQL类型就是增删改查
既然是为了给广大大学生的考试秘籍,就不得不提到MySQL的机制了(划重点,必考)
DB,DBMS,SQL之间的关系
DB: Database(数据库,数据库实际上在硬盘上以文件的形式存在)
DBMS:Database Management System (数据库管理系统,常见的有:MySQL Oracle DB2...)
SQL:结构化查询语言,是一门标准通用的语言,标准的SQL适合于所有的数据库产品
SQL属于高级语言,只要能看懂英语单词写出来的SQL语句,可以读懂什么意思,SQL在执行的时候,实际上内部也会先进行编译,然后再执行SQL,编译由DBMS完成
关系:DBMS——(执行)——》SQL——(操作)——》DB
划重点,这个要考,也是MySQL的跑码的顺序,也是学习数据库的根本,简而言之DBMS负责执行SQL语句,通过执行SQL语句来操作DB中的数据 。
二.了解MySQL
1)通过CMD访问MySQL
在电脑装好MySQL数据库之后(百度,切记别点错,依稀想起被数据库卸载支配的恐惧), 按下电脑的windows键+R,打开运行,输入cmd即可进入黑窗口。
这就是黑窗口,在黑窗口中,我们可以通过一个简单的语句访问MySQL
mysql -uroot -p
Enter password:
password后面就是自己设置的Mysql密码,数据即可(记得-p后面按下回车,这样密码就可以像上面代码块一样隐藏起来)
当你进入看到Welcome to the MySQL monitor.这句话的时候,说明你的Mysql已经安装成功了,这个时候我们就可以用黑窗口完成一系列的SQL语句
常用的语句
查看有哪些数据库
show databases;(这个不是sql语句,属于 mysql的命令)创建属于我们自己的数据库
create database 数据库名进入数据库
use 数据库名;(这个不是sql语句,属于mysql的命令。)查看当前使用的数据库中有那些表?
show tables;导入sql文件(文件以sql结尾,这样的文件被称为“sql脚本”。 什么是sql脚本呢?
当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称这样的文件为sql脚本。
注意:直接使用source命令可以执行sql脚本。
sql脚本中的数据量太大时,无法打开,请使用source命令完成初始化。)source sql文件绝对路径删除数据库:drop database 需要删除的数据库名字;查看表结构:desc dept;表中的数据 :select * from emp;(查看表中的数据)mysql> select databases; 查看当前使用的是哪个数据库mysql> select version(); 查看mysql的版本号\C 命令结束一条语句exit 退出mysql
注意奥:SQL语句是不区分大小写的,但是建议还是规范书写,因为你永远不知道在后面的JavaWeb中,你的不规范命名和书写会带来多大的麻烦(老王的亲身体会)
三.SQL查询语句
在SQL语句中,查询语句是最难的,因为有N多的表等你拼接,绝对不要把查询想得太简单,但是当你发现查询的奥妙,你会觉得这玩意跟数独一样有意思
1)简单的查询语句
注:sql语句不区分大小写。粗体均为关键字,其余为查询或需要处理的名字;
语法格式:
select 字段名1,字段名2,。。。 from 表名;
注意,在SQL语句中, 任何一条sql语句以“;” 结尾。不然你会发现一个尴尬的事情
老王当年因此以为电脑坏了来着。学习编程的时候,你要把CMD当成傻子,你不告诉它该我写完了该执行了就会出现这么尴尬的事情
2)简单查询
在练习查询语句之前,先给大家看一下老王练习SQL语句的表
英语好的同学们请自行翻译并创建表格进行练习,有了这些表,就可以通过上面简单的查询语法做到一些简单的题目
例如:分别查询三个表格
查询salgrade表
select * from salgrade;查询emp表
select * from emp;查询dept表
select * from dept;
3) 重命名查询结果的列
select xx更改前x as xx更改后x from emp;
select xx更改前x xx更改后x from emp;(as关键字可以省略)
注:MySQL中可以使用中文作为列的名称,例如年薪,在用中文更改名称时,强调给字符加单引号,双引号也可以通过编译并使用,但仅限于MySQL,Oracle 及其其他数据库中不承认双引号修饰的字符。
4)查询全部字段
select * from 表名;(*表示全部)
实际开发中不建议使用*,效率很低。
5)条件查询
语法格式:
select 字段,字段.. from 表名 where 条件;
执行顺序:先from,然后where,最后select
先给大家解析一下,SQL语句中有什么逻辑条件;
6)between
查询数据范围:select sal from emp where between 1000 and 3000;
也可以用作字符串方面
查询字符串的开头:select name from emp where between 'A' and 'B' ;
左闭右开,查询字符串开头
7)and 与 or 的优先级问题
例如 找出 工作岗是AAA以及BBB的员工
select ename,job from emp where job = 'manager' or job = 'salesman';
and 永远被翻译为 并且 ,or 永远被翻译为 或者
and与or 联合使用的例:找出薪资大于一千并且部门编号是20或30部门的员工
select name,jobId ,sal from emp where sal>1000 and (jobId = 20 or jobId =30);
加括号,小心乱套,不加?小心他给你查询工资大于100或者id=20的(离谱的优先级),容我吐槽这个优先级就很迷,四舍五入就是从左往右运行,所以,在这种参杂着and or 的逻辑运算的时候,亲,建议您加括号叭!
8)in与or
例:找出工作岗位是AAA和BBB的员工
select ename,job from emp where job='AAA' or job='BBB';
当然他不只一种写法,这玩意都给你CV下来了,肯定有意义
select ename,job from emp where job in ('AAA','BBB');
你看看这个or,是不是事儿贼多,他俩效率没有区别,但是我更喜欢第二种,可读性更好一点点
注意奥,in后面的每一项,都是一个值,不是区间,例如下面这玩意
select ename , job from emp where sal in(1000,5000);
这玩意要找的是,1000块和5000块,这可不是1000-5000,就离谱;
9)模糊查询like
重点来了,like 就离谱
在这里面,你需要搞明白两个特殊的符号 第一个是% 第二个是_(像极了正则表达式)
%:任意多个字符 ; _ : 任意一个字符;
例:找出名字所有姓张的员工;
select ename from emp like '张%';
例:找出第二个字母是A的员工;
select ename from emp like '_A%';
例:(过分的来了,就离谱)找出名字里有下划线的;
select ename from emp like '%\ _%';
这世界上有个东西叫转义符,只需要在前面打一个捺斜杠就完事了(\);
10)数据排序:
升序,降序,例如,按照工资的升序排序
select enamel,sal from emp order by sal;
在没有指定升降的情况下, 关键字order by 默认升序排序,asc表示升序,desc表示降序,那么如果我想降序或升序,就变成了这样;
select enamel,sal from emp order by sal asc;//升序
select enamel,sal from emp order by sal desc;//降序
那么问题来了,按照工资的升序排列,当工资相同的时候,再按名字的升序排列;怎么做?
select enamel,sal from emp order by sal desc,ename asc;
我也不知道语法怎么规定的,但是这个逗号后面的原理,大概就是从左到右,越靠右越弟弟。当前面的字段相等(无法排序),后面这个弟弟才会启用,相当于是个备胎;啥也不是;
11)分组函数
分组函数还有另外一个名字:多行处理函数;
特点:输入多行,最终输出的结果为一行,自动忽略null;
注意:分组函数不能直接卸载where后面,会报错;
但是可以嵌套,至于为什么,这部分,往下看,会有的;
所有分组求和的函数都是对某一组的数据进行操作
找出工资总和:select sum(sal) from emp;
找出最高工资: select max(sal) from emp;
找出平均工资:select avg(sal) from emp;
找出平均人数:select count(ename)from emp;
......
分组函数也可以组合起来用;
例如:
select count(*),sum*(*) from emp;
12) count
count(*)和count(具体的某个字段),他们有什么区别?
count(*):不是统计某个字段的个数;统计的一定是总记录条数;
而count(comm):表示统计comm不为NULL的数据总数量;
13)group by和having
group by:按照某些字段或者某个字段进行分组;
having: 对分组之后的数据进行再次过滤;
案例:找出每个工作岗位(job)的最高薪资(sal)。
select max(sal) from emp group by job;
注意:分组函数一般都会和group by联合使用,任何一个分组函数(max min count)都是在group by语句执行完才会执行,当一条select里面没有group by的时候,整张表的数据会自成一组。
多字段能不能联合起来一块分组?
例:找出每个部门(deptno),不同工作岗位(job),的最高薪资(max(sal));
句子都断好了,这个怎么写?
select deptno,job,max(sal) from emp group by deptno,job;
例:找出每个部门(deptno)的最高薪资,要求显示最高薪资大于2500的
select max(sal),deptno from emp group by deptno having max(sal)>2900;
MySQL 从删库到跑路相关推荐
- MySQL从删库到跑路(5):in and not
"哈哈哈哈,看你这几天没来上课,我还以为你去拜什么高人为师了?原来就是这个烂番薯.臭鸟蛋的小卖部大爷学装逼,你逗我玩呢?哈哈哈哈哈" "哈哈哈哈,一个老屌丝,一个小屌 ...
- MySQL从删库到跑路(2):大爷的SQL私房菜
大爷的SQL私房菜 夜色如墨,月凉如水,一轮皎洁的圆月高高地挂在夜空之上,平日里鼾声如雷的室友今夜也停止了打鼾,如此静谧的夜晚,李有为却辗转难眠. 时间悄然来到凌晨一点半,他已经在窗边站了53分钟23 ...
- MySQL从删库到跑路(三)——SQL语言
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.SQL语言简介 1.SQL语言简介 SQL是结构化查询语言(Structured Query Language) ...
- MySQL从删库到跑路
MySQL数据库指令集 增(insert) 不指定字段 insert into <表名> values(值1,值2,值3...); 指定字段(没给到值的字段为默认值或null) inser ...
- MySQL从删库到跑路(7):连接查询,用联系的观点看女神与渣男
"有为,能陪我说说话么?" 望着梨花带雨的女神,一时间李有为陷入了恍惚之中,尽管心里已经千万次告诫自己要远离面前的女人,可是当她真的出现在面前时,李有为的大脑早已一片空白. ...
- mysql从删库到跑路 亚马逊_Amazon RDS 上的 MySQL 的已知问题和限制 - Amazon Relational Database Service...
Amazon RDS 上的 MySQL 的已知问题和限制 下面给出了有关对 Amazon RDS 使用 MySQL 的已知问题和限制. 不一致的 InnoDB 缓冲池大小 对于 MySQL 5.7,管 ...
- Mysql从删库到跑路(1)
文章目录 前言 初识Mysql mysql是啥呢 什么是数据库 DBMS 操作数据库 基本操作 数据库中的数据类型 操作数据表 列的一些其他属性 数据表的引擎 基本操作 总结 前言 终于放假了,前段时 ...
- MySQL从删库到跑路(8):聚合函数——让我们来统计一下漂亮妹子的信息
"李有为,我且问你,human_base_info表面,颜值最高的妹子能有多高?" 听完大爷的话,李有为的嘴角情不自禁地绽开了一抹不易察觉的潇洒而自信的笑容,"大爷, ...
- MySQL从删库到跑路(9):group by——给漂亮小姐姐分个组
上回说到,李有为学会了五个聚合函数,自那以后,谁是这个世界上最漂亮的人,谁是这世界上最高的人,谁是这个世界上最重的人,都逃不过她的火眼金睛,然后大爷的一个问题又让李有为陷入了难题的泥沼当中,在这个花 ...
- MySQL从删库到跑路(10):case when——国色天香、倾国倾城,给漂亮小姐姐分个类
一生一代一篇文,争教两处销魂.上回说到,李有为跟着小卖部大爷,装逼界的传奇人物逼神阿六敦学了一招group by分组后自以为可以纵横天下,然而很快,他便发现人外有人.天外有天,强中还有强中手,一山还 ...
最新文章
- LaZagne检测windows本地存储的密码
- Python控制流---while循环
- 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志
- Python-jsonpath使用和json转换
- Android 指纹调试流程(高通、MTK均适用)
- 转行人工智能,不得不温习的数学知识点
- js连续指定两次或者多次的click事件(解决办法)
- feach同步 git_git fetch 更新远程代码到本地仓库
- CocoaPods安装以及遇到的坑
- centos(7.0) 上 crontab 计划任务
- C++ 基于凸包的Delaunay三角网生成算法
- 群体智能优化算法之猫群算法(Cat Swarm Optimization)
- 体脂率在线计算机,在线体脂率计算器 男性15%~18%若体脂率过
- android仿微信图片选择预览裁剪,仿微信图片选择
- 重磅!风再起· 2020——巴比特全球合作伙伴云端峰会下周启幕,12大主题穿越减半,招募计划今日启动...
- 多边形最小外接矩形 旋转卡壳
- 亲测这款读书笔记app软件能提高你的阅读兴趣
- Landsat系列数据级别详解
- python字符串常用操作方法(一)
- 带你一起分析cut the rope(切绳子游戏)中绳子的制作方法