MySQL数据库的使用和学习

MySQL数据库的使用和学习

一、数据库简介

1.数据库系统
1.1数据库

DataBase【DB】,指的是长期保存到计算机上的数据,按照一定顺序组织,可以被各种用户或者应用共享的数据集合

【用于存储数据的地方,可以视为存储数据的容器】

1.2数据库管理系统

DataBase Management System【DBMS】,能够管理和操作数据库的大型的软件

数据库是CS模式:Client/Server

用于建立、使用和维护数据库,对数据库进行统一的管理和控制,为了保证数据库的安全性和完整性,用户可以通过数据库管理系统访问数据库中的数据
在这里插入图片描述

1.3数据库的应用

涉及到大量的数据需要长期存储,就可以使用数据库

使用:增删改查的操作

持久化: 数据持久化, 一般存在硬盘, MySQL

缓存: 临时存储, 一般可以存在内存, Redis

2.常见数据库管理系统

1>Oracle(甲骨文): 目前比较成功的关系型数据库管理系统,运行稳定,功能齐全,性能超群,技术领先,主要应用在大型的企业数据库领域, 收费.

2>DB2: IBM(国际商业机器公司)的产品,伸缩性比较强

3>SQL Server: Microsoft的产品,软件界面友好,易学易用,在操作性和交互性方面独树一帜

4>MySQL: 免费的数据库系统,被广泛引用于中型应用系统,体积小,速度快,总体拥有成本低,开放源代码,2008年被SUN收购,2009年SUN被Oracle收购

二、数据库的安装

数据库的安装请自行百度,有很多人会安装出错,注意安装的路径,最好是自己另开一个,然后把环境变量添加到系统变量中。

三、SQL概述

1.SQL简介

Structure Query Language,结构化查询语言

2.数据库服务器、数据库和表之间的关系

表:为了保存应用实体中的数据,一般会给数据库中创建表,一个数据库可以同时管理多个表
在这里插入图片描述

3.数据在SQL中的存储形式

数据库 => 表

表: 表格

列:表示字段, id, name, age

行:代表一条数据, 一条记录 或 一个实体
在这里插入图片描述

4.SQL的分类

DDL【Data Definition Language】,数据定义语言,用户创建、修改、删除表结构

DML【Data Manipulation Language】,数据操作语言,用于对表数据进行增删改的操作

DQL【Data Query Language】,数据查询语言,用于负责表数据的查询工作

DCL【Data Control Language】:数据控制语言,用来定义访问权限和安全级别

四、数据库操作

1.登录数据库

管理员权限打开cmd,输入mysql -u root -p命令进行登录,并输入密码即可登录数据库

在这里插入图片描述

2.查看和创建数据库

在上面界面敲入命令show databases;回车可以查看当前所有的数据库
在上面界面敲入命令create database myuserdb;可以查看当前所有的数据库
注意:在MySQL数据库中,我们的命令行一般都需要加入英文 ‘;’

3.数据库的详细操作
DDL

进入我创建的数据库:
use myuserdb;

查看所有表
show tables;

创建表格(简单)
create table user(id int, name varchar(30),age int);

描述表格:
desc user;

删除表:
drop table user;

创建标准表:

	mysql> create table user(
    -> id int primary key auto_increment, # 自动增长
    -> name varchar(20),
    -> age int
    -> );

表格的增删改查:

	mysql> insert into user(name, age) values('马云',50);
	Query OK, 1 row affected (0.01 sec)
	mysql> select * from user;
	+----+------+------+
	| id | name | age  |
	+----+------+------+
	|  1 | 马云 |   50 |
	+----+------+------+

更新表格
mysql> update user set name=‘马超’ where id=10;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

删除数据:
mysql> delete from user where id=10;
Query OK, 1 row affected (0.01 sec)
id不会重置(auto_increment字段)
truncate 快速清空表中得数据,能针对自动增值得数据重新置1
drop 删除整个表和表结构

DML

insert 插入数据
insert into table_name(items) values(item_value)
可以一次性插入一条或者多条数据

update 更新表/修改表格内容
update table_name set field1=new_value1, field2=new_value2 [where Clause]
注意:
a.完全可以更新一个字段或者多个字段
b.where相当于Python中的if语句
c.可以指定任何条件到where子句中
d.如果没有where子句,则默认所有的行都被同时更新为指定的操作[慎用!一般要结合where使用]

where子句
where子句其实就是一个操作符,类似于Python中的if语句,可以做数据的筛选

| =                | 相等                      |
| ---------------- | ------------------------- |
| <> / !=          | 不相等                    |
| <                | 小于                      |
| <=               | 小于等于                  |
| 操作符           | 说明                      |
| >                | 大于                     |
| >=               | 大于等于                 |
| IN(A,B)         | A 和 B 之间               |
| between A  and B | 位于两值之间              |
| AND              | 连接多个表达式 并且的关系  |

delete 删除
delete from table_name where clause
注意:
a.如果where子句没有指定,则默认将表中的数据全部删除【慎用!】
b.可以指定任何条件在where子句中
删除表中的数据的方法有delete,truncate, 其中truncate table用于删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似;但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少
Truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用。

DQL

数据库执行DQL语言不会对数据库中的数据发生任何改变,而是让数据库发送查询结果到客户端

查询返回的结果其实是一张虚拟表

语法:

SELECT 列名 FROM 表名【WHERE --> GROUP BY -->HAVING--> ORDER BY】

基本查询语句

#1.查询所有列
mysql> select * from student;
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
| 4    | ddd      |   16 | female |
| 5    | eee      |   20 | female |
+------+----------+------+--------+
5 rows in set (0.00 sec)


#2.查询指定列
mysql> select id,name,gender from student;
+------+----------+--------+
| id   | name     | gender |
+------+----------+--------+
| 1    | aaaa     | female |
| 2    | bbbbbbbb | male   |
| 3    | cc       | male   |
| 4    | ddd      | female |
| 5    | eee      | female |
+------+----------+--------+
5 rows in set (0.00 sec)

条件查询

主要结合where的使用

between…and: 介于…和…之间
and:逻辑与
or:逻辑或
in / not in:类似于Python中的成员运算符
is / is not: 类似于Python中的身份运算符 , 常用语判断null值, 如:name is null
演示:

#1.查询性别为女,并且年龄为20的记录
mysql> select * from student where gender='female' and age=20;
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 5    | eee  |   20 | female |
+------+------+------+--------+
1 row in set (0.00 sec)

#2.查询编号为1或者姓名为ddd的记录
mysql> select * from student where id='1' or name='ddd';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
| 4    | ddd  |   16 | female |
+------+------+------+--------+
2 rows in set (0.00 sec)

#3.查询编号分别为1,2,3的记录
mysql> select * from student where id='1' or id='2' or id='3';
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
+------+----------+------+--------+
3 rows in set (0.00 sec)
#简写形式
mysql> select * from student where id in('1','2','3');
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 1    | aaaa     |   19 | female |
| 2    | bbbbbbbb |   20 | male   |
| 3    | cc       |   15 | male   |
+------+----------+------+--------+
3 rows in set (0.00 sec)

#4.查询编号不为1,2,3的记录
mysql> select * from student where id not in('1','2','3');
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 4    | ddd  |   16 | female |
| 5    | eee  |   20 | female |
+------+------+------+--------+
2 rows in set (0.00 sec)

模糊查询
where 子句中=表示精准查询
like:一般情况下结合where子句使用
通配符:
​ _: 匹配任意一个字符
​ %:匹配0~n个字符【n大于等于1】
演示:

#1.查询姓名由4个字符组成的记录
mysql> select * from student where name like '____';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
+------+------+------+--------+
1 row in set (0.00 sec)

#2.查询姓名由3个字符组成的记录,并且最后一个字母为c的记录
mysql> select * from student where name like '__c';
Empty set (0.00 sec)

#3.查询以a开头的记录
mysql> select * from student where name like 'a%';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 1    | aaaa |   19 | female |
+------+------+------+--------+
1 row in set (0.01 sec)

#4.查询姓名中包含b的记录
mysql> select * from student where name like '%b%';
+------+----------+------+--------+
| id   | name     | age  | gender |
+------+----------+------+--------+
| 2    | bbbbbbbb |   20 | male   |
+------+----------+------+--------+
1 row in set (0.00 sec)

#5.查询姓名中第2个字母为c的记录
mysql> select * from student where name like '_c%';
+------+------+------+--------+
| id   | name | age  | gender |
+------+------+------+--------+
| 3    | cc   |   15 | male   |
+------+------+------+--------+
1 row in set (0.00 sec)

字段控制查询
as: 起别名,用法 :select 字段 as 别名
distinct: 去除重复记录

#1.去除重复记录
mysql> select distinct id from student;
#2.给列名起别名
mysql> select name as 姓名,gender as 性别  from student;

排序
order by:指定数据返回的顺序
asc:ascending,升序
desc: descending,降序
用法:select from 表 order by xxx
演示:

#1.查询所有的记录,按照年龄升序排序
mysql> select * from student order by age asc;
#2.查询所有学生记录,按照年龄降序排序,如果年龄相等,则按照编号进行升序排序 
mysql> select * from student order by age desc,id asc; 

聚合函数

聚合函数主要用来做纵向运算
1、count():统计指定列不为null的记录行数

#1.查询年龄大于20的人数
mysql> select count(*)  from student where age>20; 

2、sum():计算指定列的数值和

#1.查询所有学生的年龄和
mysql> select sum(age) from student;

3、求指定列中的最大值和最小值
max():
min():

#求最大年龄和最小年龄
mysql> select max(age),min(age) from student;

4、avg()
average:平均数

#查询所有学生的平均年龄
mysql> select avg(age) from student;

总结:
查询关键字的书写顺序:select 聚合函数 from where order by

分组查询
group by:分组查询
having:有…,表示条件,类似于where的用法
演示:

#在当前数据库下创建新的表
mysql> create table emp(			
 -> empno int primary key,
 -> enname varchar(20),
 -> job varchar(20),
 -> mgr int,
 -> hiredate date,
 -> sal double,
 -> comm double,
 -> deptno int
 -> );

#1.查询各个部门的人数
mysql> select count(*) from emp group by deptno;  # 先分组 后count

#2.查询每个部门的部门编号和每个部门的工资和
mysql> select deptno,sum(sal) from emp group by deptno;

#3.查询每个部门的部门编号和每个部门工资大于1500的人数
mysql> select deptno,count(*) from emp where sal>1500 group by deptno;

#4.查询工资总和大于7000的部门编号以及工资和
mysql> select deptno,sum(sal) from emp group by deptno having sum(sal)>7000;

总结:
​ having和where的区别
​ a.二者都表示对数据执行条件
​ b.having是在分组之后对数据进行过滤
​ where是在分组之前对数据进行过滤
​ c.having后面可以使用聚合函数
​ where后面不可以使用聚合函数

分页查询

limit:用来限定查询的起始行,以及总行数
演示:

#1.查询4行记录,起始行从0开始
mysql> select * from emp limit 0,4;
#2.查询3行记录,起始行从2开始
mysql> select * from emp limit 2,3;

总结:

mysql> select deptno,sum(sal) from emp where sal>1500  group by deptno having sum(sal)>5000 order by sum(sal) asc limit 4; 

​ 查询语句书写顺序:select----》from—》where—》group by-----》having-----》order by----->limit

​ 查询语句执行顺序:from----》where-----》group by----》having----》order by ----》select-----》limit

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值