目录
课前导读
一、Mysql的安装和配置
二、数据库简介:
1、数据库中典型代表:
2、数据库类型:
3、Mysql简介:
4、客户端和服务器简介:
三、初始MySQL
四、数据库操作
五、表的基本操作
六、表的基础增删查改(CRUD)
1、新增数据(C):
2、查询数据(R):
3、修改数据(U)
4、删除数据(D):
七、数据库约束
八、高级查询:
1、聚合函数查询:
2、分组查询:
3、联合查询(多表查询):
总结:
课前导读
本博主写的mysql代码,均在cmd命令行窗口实现,mysql有许多图形化界面,但我们日后学习工作需要熟练使用sql语句,所以我建议大家命令行窗口练习,这样虽然视觉效果不太好,但是能有效练习,没有图形化界面的提示,我们也能更快记住和使用。
一、Mysql的安装和配置
1、关于软件大家可以去官网下载:MySQL,也可以私聊博主领取软件,我这把建议下5.7版本的MySQL,更加稳定和适用,公司也能多在用,新版本的有很多潜在问题,不适合与新手。
2、软件的安装和配置问题可以去看咱大博哥的教学:mysql安装视频_哔哩哔哩_bilibili
3、如果前面有下载新版本需要卸载的友友,也可以去参考php网的卸载详细教程:mysql怎么卸载干净?-mysql教程-PHP中文网
二、数据库简介:
1、数据库中典型代表:
(1)Oracle
(数据库里最厉害的,但需要花钱而且还贵,很多大公司需要,对我们不适用)
(只有数据特别的特别重要的时候才会适用Oracle);
(2)MySQL
一个开源免费的数据库(白嫖~~),而且很多功能也比较全面和好用,对我们和中小型公司很适用;
(3)SQL Server
很多高校都在要求使用的数据库,安装配置十分繁琐,卸载还很难完全卸载干净,典型吃力不讨好,咱也不懂为什么学习普遍适用,刚开始微软开发SQL Server是收费的,没有白嫖的mysql香,而且还是捆绑销售和window系统,企业服务器大多Linux系统,就导致SQL server根本不适用,这就使其发展很差!
(4)SQLite
非常轻量的数据库,嵌入在安卓系统内部,很多app都在用这个数据库,整个数据库一共一个可执行文件,大小500多kb。
总结:三个数据库各有各自的优点,大同小异,我们只要掌握其中一个,工作用其他的,也能很快上手。
2、数据库类型:
(1)关系型数据库:
关系型数据库对数据的存储的格式有严格的要求,以类似于execl表格的方式进行存储,上面这几个就是典型代表。
(2)非关系型数据库:(Redis、MongoDB、HBase)
存储比较灵活,优势性能更快,同时更好能适用分布式环境,缺点是相对于关系型数据库,功能更少。
3、Mysql简介:
Mysql是一个客户端服务器结构的软件,安装MySQL的时候就已经把客户端和服务器一起安装好了。
4、客户端和服务器简介:
(1)客户端给服务器发送的数据,称为"请求"request;服务器给客户端返回的数据,称为"响应"response;
(2)客户端和服务器之间通过网络通信。
(3)一个服务器可以同时给多个客户端提供服务,多个客户端也可以同时给服务器发送请求,服务器进行对应的响应。
(4)客户端和服务器可以在同一个主机上,也可以在不同主机上,无论是不是在同一个主机上,都是通过网络进行通信的。当服务器和客户端不在一个主机上时,电脑不联网不影响数据库的使用,电脑有一个特殊的环回网卡,可以让主机发自己收,不通过网线/WiFi都可以通信。
------------------------接下来正式进入MySQL学习------------------------
三、初始MySQL
1、通过window+r打开运行窗口,输入cmd进入命令行窗口。
2、如果上面视频中的配置环境调节好了的,输入命令 mysql -u root -p 即可出现以下画面
输入你下载时创建的密码即可进入MySQL(建议设置简单密码,避免忘记),出现如下所示的代码就证明MySQL打开成功了!
3、如果出现各式各样不同的报错,需要百度自行搜索原因。
四、数据库操作
1、展示数据库:show databases; 即可展示你系统中所拥有的数据库了。
如果是这种情况,表示你没有输入完,应该加个 ; 号结束语句。
2、 创建数据库:create database mysqlfirst;创建自己的第一个数据库(注意:这里的database没有最后那个s)
再通过show databases;展示就可以看见新增的数据库了。
3、选中指定数据库:use 数据库名 ,即可进入到整个数据库内部进行操作。
Database changed就表示数据库变更成功,进入了你指定的数据库了。
4、删除数据库:drop database 数据库名,即可删除整个数据库里的内容和这个数据库
再展示全部数据库就可以看见没有这个数据库了
但是特别注意,删除数据库这个操作需要特别谨慎,不能随意删除!!!
五、表的基本操作
1、需要先进入某个数据库内部进行表操作,同上所示,我们进入数据库mysqlfirst
如果需要注释信息可以通过,(-- )来注释,--后面必须加个空格
2、展示数据库中的所有表:show tables; (前提是得use进入这个数据库)
此时是空的,我们建个表后再去看,就能看见这个数据库中的表了。
3、创建表:create table 自己取的表名 (列名 类型,列名 类型,~~~~列名 类型)
(特别注意:最后一个列名类型后面不加逗号)
类型:最常用整形的(int、double(M,D)(不准确)、decimal(M,D)(准确))
例如:id int 、 double(3,1) 3个有效数,1个小数,比如95.1,后面这个同上
类型:最常用的字符串:varchar()(变长字符串,括号里写它的最大长度)
例如:varchar(50)最长为50的字符串,他会动态适应你需要的字符串,最大不超过50.
类型:最常用日期函数:datetime (千年虫警告⚠)
例如:创建一个有学号和姓名的学生表
4、查询表的结构:desc 表名,(desc=describe)可以查询表中的具体信息。
5、删除表操作:drop table 表名 ,可以删除表及其中的所有信息(谨慎操作⚠)
六、表的基础增删查改(CRUD)
C create(新增) R retrieve(查询) U update(修改) D delete(删除)
1、新增数据(C):
insert into 表名 values(列,列,列····); 每次新增都是新增一行(先选中相应数据库!!!)。
这样就能看见数据插入到student表中了。(数据与定义表中的类型一定要匹配!)
show variables like '%character%';可以看数据库中的字符集是什么,如果是拉丁文就不能新增中文数据,可以参考这个博主博客:(66条消息) 【MySQL】修改MySQL中的编码方式_恒等于C的博客-CSDN博客_mysql编码格式修改
也可以在创建数据库时指定字符集,不过每次创建都需要写,比较繁琐,修改my.ini文件一直适用
insert使用时也可以一次插入多条数据,例如:
也可以指定列插入,例如:(未插入的值会被desc中的default中的值替代)
2、查询数据(R):
(1)全列查询:select * from student; (*表示占位符,指代全部列的意思)
(2)指定列查询:select name from student; (指定name这个字段列查询)
(3)查询列与列之间计算的结果:select name,chinese+math+english from score;
(查询语数英三科总分)
(4)查询时给列起别名:select name,chinese+math+english as sum from score;
(通过as关键字加在列的后面可以给它起别名,也可以空格起别名但不建议,加as可读性更高
(5)查询的时候针对列进行去重:select distinct chinese from score;
distinct关键字可以指定一个列,也可以指定多个列,但指定多个列时只有全部列都相同才会进行去重操作!!(切记distinct关键字必须写在select后面,字段名前面,语法规定)
通过全列查询我们可以看到悟空和白龙马的成绩重复了,我们就可以通过distinct关键字去重
(6)针对查询结构进行排序:select * from score order by chinese; (通过语文成绩升序排序)
order by关键字介绍:排序关键字,后面接排序的字段名,如果字段名后不加排序方式默认asc(升序排序), 加上desc则是降序排序。
1.如果排序中有null,null默认是最小值,比任何负数都小。
2.排序也可以针对表达式和别名进行排序。
3.排序还可以指定多个列进行排序,每个字段后面都能加asc和desc,但先以第一个字段进行排序,第一个字段相同再使用第二个字段进行排序,以此类推。
扩展知识:数据库中的排序方式,大概率时归并排序或是基于归并排序的加强算法。
通过语文成绩降序排序
针对别名和表达式进行排序:
多个列进行排序:
(7)条件查询:select * from score where name='唐僧'; (查询姓名为唐僧的信息)
where关键字介绍:根据查询的结果进行筛选,把查询到的每一列都带入到where后面的条件中,看条件是真是假,把条件为真的保留作为临时表的结果,条件为假的舍弃。
条件筛选运算符:
这里特别强调一个like运算符,这是个模糊匹配,和进行搜索查询等有关,%是通配符可以表示多个字符,_是占位符,只能表示一个字符。
select * from score where name like'唐_';(查询性唐的两个字的人名的信息)
select * from score where name like '白%’ ;(查询姓白的人的信息)
(8)分页查询:select * from score limit 2; (查询从第一条开始的两条信息)
limit关键字介绍:分页关键字,很多时候数据较多一条展示出来看不完,就需要对数据进行分页,limit后面跟着的是查询的数据位置,后面可以跟个逗号写个数字表示起始索引,起始索引默认是0,如果你写作limit 2,1表示从第二条数据开始查到第三条,但不建议这样写,可以写作 limit 2 offset 1 ,这样可读性更高!(offset的值也是从0开始计算)
从默认索引开始查两条数据。
3、修改数据(U)
update 表名 set 列名 = 值 where 条件;
例如:update score set chinese =100 where name='悟空';(把悟空的语文成绩改为100分)
还可以通过表达式进行成绩修改
例如:update score set chinese=chinese-5; (不加条件时默认是全部人,但不会对null行进行计算,不能写作-=这样,会报错)。
4、删除数据(D):
delete from 表名 where 条件; (谨慎操作!☠)
例子:delete from score where name='白龙马'; (删除白龙马的数据)
七、数据库约束
关系型数据库的一个重要功能,需要确保数据的完整性和正确性。
约束就是让数据库帮助程序猿更好的检查数据是否正确。
约束介绍:都需要在建表的时候进行添加!
在primary key关键字指定时可以在他后面加上auto_increment,自增主键,自动根据添加数据的多少进行增加;
例子:create table adc(id int primary key auto_increment,name varchar(20) not null, idnumber int unique); (建立自增id主键约束,建立非空名字约束,建立唯一学号约束)
八、高级查询:
1、聚合函数查询:
聚合函数查询主要是针对行行进行查询。
例如:select count(*) from score;
2、分组查询:
select * from 表名 where + 条件 group by 列名 having +条件;
有三种情况:
1、分组前指定条件:先筛选再分组 where
2、分组后指定条件:先分组再筛选 having
3、分组前后都指定条件
例子:select role,avg(salary) from emp group by role order by avg(salary) desc; (根据职业进行分组再通过平均工资降序排序)
sql的执行顺序:
3、联合查询(多表查询):
1、 多表查询的基本执行过程:笛卡尔积
笛卡尔积定义:两个表中的每个数据都互相进行一次组合,行变为两表行之积,列变为两表列之和。
准备两张关联表
直接进行多表查询求得两张表的笛卡尔积
但笛卡尔积中有很多无效数据,就是学生表中的班级id和班级表id不相同的即是无效数据,我们就需要对其进行筛选!
2、通过表名 . 列名可以访问到这个表中的对应列,防止两表列名相同访问冲突的情况。
select * from student,class where student.class_id=class.id;(通过班级id进行筛选)
得到两表联合的有效数据:
3、join on查询:select * from 表 join 表 on +条件
例子:select * from student join class on student.class_id=class.id;
三张表以上进行内连接时,需要先from 表1 join 表2 on 条件 join 表3 on 条件; 这样操作
4、内连接和外连接:内连接和外连接大多情况下没有区别。
如果要连接的两个表,里面的数据时一一对应的,这个时候,他们就没有什么区别,如果不是一一对应的,内外连接就有区别了。(如果是上面那样班级id一一对应的查询,内外连接就没有区别)
这时候我们就可以通过左外连接和右外连接来解决这种不是一一对应的问题了!
左外连接:select * from 表名 left join 表名 on 条件
(包含全部左表数据,包含满足条件的右表数据)
右外连接:select * from 表名 right join 表名 on 条件
(包含全部右表数据,包含满足条件的左表数据)
例子:我们可以看见嘻嘻嘻同学所在的四班是没有的,所以进行联合查询时就不能得到嘻嘻嘻同学的数据,但我们可以通过左外连接来进行联合就能得到其数据
看不见嘻嘻嘻同学的信息
左外连接:这样就能看见嘻嘻嘻同学的信息了
4、自连接:
就是数据库操作的小技巧,可以通过自己和自己连接,对其中的列进行操作!
select * from 表1 as 别名 join 表1 as 别名 on 条件
但特别注意需要对表进行取别名操作,因为表名相同在进行条件筛选时会有重复导致无法执行。
例子:select * from student as s1 join student as s2 on s1.id=s2.id;
5、子查询:(慎用!!)
子查询通俗来讲就是嵌套查询,无线套娃!!
select * from 表名 where 条件=(select * from 表名 where 条件); (就是让多个查询进行嵌套)
注意,当子查询返回结果有多个时,where条件里要用in接收。如果数据较多时可以用exits来替换in
例子:select * from student where id=(select id from student where id=1);
总结:
以上就是关于sql的全部基本用法以及操作了,只要你熟悉以上所有操作且能在特定场景进行特点的使用,你就能胜任公司大多数操作了,关键是得基础牢靠,sql语句必须熟悉,这很可能是我们以后进公司的日常工作,如果连个最简单的数据库操作都不能熟练掌握以及运用,我们又怎么能胜任项目工作呢?
所以所有成功的开始还得基于牢靠的基础,努力学习,坚持编码,编程伴随每一天!
以上内容有所借鉴和引用,如果有所冒犯,联系删除!