技术事简单报,看老王带你入门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 从删库到跑路相关推荐

  1. MySQL从删库到跑路(5):in and not

     "哈哈哈哈,看你这几天没来上课,我还以为你去拜什么高人为师了?原来就是这个烂番薯.臭鸟蛋的小卖部大爷学装逼,你逗我玩呢?哈哈哈哈哈"  "哈哈哈哈,一个老屌丝,一个小屌 ...

  2. MySQL从删库到跑路(2):大爷的SQL私房菜

    大爷的SQL私房菜 夜色如墨,月凉如水,一轮皎洁的圆月高高地挂在夜空之上,平日里鼾声如雷的室友今夜也停止了打鼾,如此静谧的夜晚,李有为却辗转难眠. 时间悄然来到凌晨一点半,他已经在窗边站了53分钟23 ...

  3. MySQL从删库到跑路(三)——SQL语言

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.SQL语言简介 1.SQL语言简介 SQL是结构化查询语言(Structured Query Language) ...

  4. MySQL从删库到跑路

    MySQL数据库指令集 增(insert) 不指定字段 insert into <表名> values(值1,值2,值3...); 指定字段(没给到值的字段为默认值或null) inser ...

  5. MySQL从删库到跑路(7):连接查询,用联系的观点看女神与渣男

     "有为,能陪我说说话么?"  望着梨花带雨的女神,一时间李有为陷入了恍惚之中,尽管心里已经千万次告诫自己要远离面前的女人,可是当她真的出现在面前时,李有为的大脑早已一片空白.   ...

  6. mysql从删库到跑路 亚马逊_Amazon RDS 上的 MySQL 的已知问题和限制 - Amazon Relational Database Service...

    Amazon RDS 上的 MySQL 的已知问题和限制 下面给出了有关对 Amazon RDS 使用 MySQL 的已知问题和限制. 不一致的 InnoDB 缓冲池大小 对于 MySQL 5.7,管 ...

  7. Mysql从删库到跑路(1)

    文章目录 前言 初识Mysql mysql是啥呢 什么是数据库 DBMS 操作数据库 基本操作 数据库中的数据类型 操作数据表 列的一些其他属性 数据表的引擎 基本操作 总结 前言 终于放假了,前段时 ...

  8. MySQL从删库到跑路(8):聚合函数——让我们来统计一下漂亮妹子的信息

     "李有为,我且问你,human_base_info表面,颜值最高的妹子能有多高?"  听完大爷的话,李有为的嘴角情不自禁地绽开了一抹不易察觉的潇洒而自信的笑容,"大爷, ...

  9. MySQL从删库到跑路(9):group by——给漂亮小姐姐分个组

     上回说到,李有为学会了五个聚合函数,自那以后,谁是这个世界上最漂亮的人,谁是这世界上最高的人,谁是这个世界上最重的人,都逃不过她的火眼金睛,然后大爷的一个问题又让李有为陷入了难题的泥沼当中,在这个花 ...

  10. MySQL从删库到跑路(10):case when——国色天香、倾国倾城,给漂亮小姐姐分个类

     一生一代一篇文,争教两处销魂.上回说到,李有为跟着小卖部大爷,装逼界的传奇人物逼神阿六敦学了一招group by分组后自以为可以纵横天下,然而很快,他便发现人外有人.天外有天,强中还有强中手,一山还 ...

最新文章

  1. LaZagne检测windows本地存储的密码
  2. Python控制流---while循环
  3. 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志
  4. Python-jsonpath使用和json转换
  5. Android 指纹调试流程(高通、MTK均适用)
  6. 转行人工智能,不得不温习的数学知识点
  7. js连续指定两次或者多次的click事件(解决办法)
  8. feach同步 git_git fetch 更新远程代码到本地仓库
  9. CocoaPods安装以及遇到的坑
  10. centos(7.0) 上 crontab 计划任务
  11. C++ 基于凸包的Delaunay三角网生成算法
  12. 群体智能优化算法之猫群算法(Cat Swarm Optimization)
  13. 体脂率在线计算机,在线体脂率计算器 男性15%~18%若体脂率过
  14. android仿微信图片选择预览裁剪,仿微信图片选择
  15. 重磅!风再起· 2020——巴比特全球合作伙伴云端峰会下周启幕,12大主题穿越减半,招募计划今日启动...
  16. 多边形最小外接矩形 旋转卡壳
  17. 亲测这款读书笔记app软件能提高你的阅读兴趣
  18. Landsat系列数据级别详解
  19. python字符串常用操作方法(一)
  20. 带你一起分析cut the rope(切绳子游戏)中绳子的制作方法

热门文章

  1. 【BZOJ1502】【NOI2005】月下柠檬树
  2. 七夕 - 程序员表白代码
  3. MySQL中统计函数的使用
  4. Windows11常用快捷键总结(包含触控板使用技巧)
  5. excel绝对引用与相对引用$
  6. 【新书推荐】【2017.07】创新的雷达技术与应用第一卷:实孔径阵列雷达、成像雷达与无源多基地雷达
  7. 再见了,我的黄色文件夹(内置福利)
  8. JSP 银行网上账户管理系统myeclipse编程java网页
  9. 学习React Native必看的几个开源项目
  10. Cisco2960交换机密码破解方法