Mysql学习笔记

只介绍sql部分,不介绍理论知识

DB,DBMS,SQL的关系

  • DB: Database(数据库,数据库实际上以文件在硬盘上存在)
  • DBMS:DataBase Management System (数据库管理系统)常见的有:MySQL,Oracle,DB2,Sybase,SqlServer
  • SQL:结构化查询语言,是一门标准通用的语言。标准的SQL适用于所有的数据库产品。
  • 三者之间的关系
    DBMS负责执行sql语句,通过执行sql语句来造作DB中的数据

表(table)

  • table是数据库的基本单元–保证可读性
  • 一个表包括行(也叫数据或记录-data)和列(也叫字段-column)
  • 每一个字段都有字段名,数据类型,相关的约束。

SQL语句的分类

  • DQL(数据操作语言):查询语句,凡是select语句都是DQL
  • DML(数据操作语言):insert delete update,对表当中的数据进行增删改
  • DDL(数据定义语言):create drop alter ,对表结构的增删改
  • TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中T是Transaction)
  • DCL(数据控制语言):grant授权,revoke撤销权限等

数据的导入(此时用的是控制台)

文件:链接: https://pan.baidu.com/s/1ZPuzjpi_TRejL6QjJJSlLw 提取码: 537i
1.登录MySQL数据管理系统–点击mysql的控制台。可以从win10中最近添加程序入口进入
2.查看有哪些数据库–show databases;

3.创建属于自己的数据库–create database teacherZhu;
在这里插入图片描述

4.使用自己的数据----use teacherZhu
在这里插入图片描述

5.查看当前使用的数据库有哪些表;show tables;
在这里插入图片描述

6.初始化数据–source +sql文件;
在这里插入图片描述

SQL的理解

脚本

  • 以sql结尾的文件被称为“sql脚本”。
  • 直接使用source命令可以执行sql脚本
  • sql脚本中数据太大的时候,无法打开,可以使用source命令完成初始化

常用命令

查看表中的结构和数据

  • 查看结构 :desc 表名;
    在这里插入图片描述

  • 查看数据:select *from 表名;
    在这里插入图片描述

查看当前使用的数据库

  • select database();

查看mysql的版本号

  • select version();

查看创建表的语句

  • show create table emp;

简单的查询语句(DQL)

简单查询

在这里插入图片描述

  • select 字段名1,字段名2,…from 表名;

  • 任何一条sql语句以";"结尾

  • sql语句不区分大小写
    在这里插入图片描述可以看出字段可以参与运算!

  • 给查询结果的列重命名:select ???,??? as ‘***’ from **;
    最好重命名为英文

条件查询

在这里插入图片描述

  • 语法格式:
  • select 字段1,字段2,、、、from 表名 where 条件;
  • 执行顺序:先from,然后where ,最后select
    在这里插入图片描述

运算符

1.等于:=
2.不等于:!=,<>
3.小于:<
4.大于:>
5.两个值之间:between… and… 或者>= and<=
注意 这个可以用在字符之间 :但是是左闭右开
6.是否为null :is null
在这里插入图片描述
在这里插入图片描述
7.是否不为空:is not null
在这里插入图片描述8.并且,或:and,or
and 和or 的优先级问题–and优先级高
查找薪水在1000以上且上级工号为20或者30的员工
1)如果没有考虑优先级
在这里插入图片描述此时出现了一条漏网之鱼–JAMES–薪水低了,只是老板符合要求。但是显然并不是我们想要的结果。
2)当考虑了优先级
在这里插入图片描述

9.in,not in:和or相似但是由多个值
在这里插入图片描述注意:此时括号中代表的是具体的值,不是一个区间!
10.模糊查询:like

  • 两个重要符号:% _
  • %代表任意多个字符
  • 表示一个字符
    在这里插入图片描述如果要查包含_的数据----用转义字符\
    _

排序

  • 语法格式
  • order by ** (desc可以写可以不写);—根据规则降序排列
  • order by ** asc;—根据规则升序排列

找到工作是salesman并且按照月薪降序排列的员工在这里插入图片描述

分组函数

  • –自动忽略null
  • count:计数
  • sum:求和
  • avg:取平均
  • max:找最大
  • min:找最小
    在这里插入图片描述在这里插入图片描述
  • ifnull()函数
  • ifnull(可能为null的数据,被当做什么);
    在这里插入图片描述
  • count(*)表示统计所有数据的总数目-不管是什么都要计算在内

group by 和 having函数

  • group函数:按照某个字段或者某些字段进行分组
  • having函数:对分组之后的函数再次进行分组

group by

  • 例子 找出每个工种的最大工资
  • 记住一个规则:当一语句中有group by时,select后面的字段只能跟分组的依据字段和分组函数

例子 当将enamel加入时

在这里插入图片描述此时显然和表中每个工种的最大工资拥有者不同

  • 多个字段分组

例子 找出每个部门不同工种最大工资
在这里插入图片描述

having

  • having 函数只能在group by 函数之后使用

例子 找出不同部门的平均工资,显示数额大于2000
在这里插入图片描述

DQL语句总结

  • DQL语句的顺序
  • select …
  • from…
  • where…
  • group by…
  • having …
  • order by …

补充 :distinct 关键字
1.只能出现在所有字段的最前面
2.表示所有字段的去重复
例子 找到工种数目
在这里插入图片描述
在这里插入图片描述

连接查询

在表的连接查询中,有一个现象叫做:笛卡尔积现象。
补充:别名
当连接查询时,可能存在两个不同的表存在相同的字段,所以以后字段名都应该加上别名
例子:select e.name ,d.name from emp e,dept d;

什么是连接查询呢?
可以看一下例子

在这里插入图片描述在这里插入图片描述
像这样将两张或以上的表格的数据进行联合处理就是连接查询

SQL92与SQL99语法

就以上例子进行分析
92:

select 
	e.ename,d.dname 
from 
	emp e,dept d 
where 
	e.deptno=d.deptno

99 :

select 
	e.ename,d.dname
from
	emp e
(inner可以省略)join
	dept d
on 
	e.ename=d.dname;
  • 99语法将连接的语句单独成型,将其与条件语句分开,增添了可读性,语法结构更清晰
  • 99语法on之后依旧可以写where添加条件

内部连接

包括等值与非等值连接

等值连接

请看上面的例子

非等值连接

在这里插入图片描述在这里插入图片描述

自连接

最大的特点就是:一张表可以看做两张表,自己连接自己。
例子:该问题可以将员工表同时看做领导表。这样,当员工的领导号码=领导的员工号码时就可以连接在一起了
在这里插入图片描述

外连接(更重要)

外连接:
假设A和B表连接,如果是外连接,其中一张表应是主表,另外一张表是副表。如果主表的数据不能匹配到副表的数据,那么就会自动生成一个null来匹配主表未匹配的数据。

  • 分类有左连接和右连接
  • 左右代表的是哪个表是主表
  • 左右连接可以互化

例子:找到员工的领导(没有上级也要显示)–左连接

在这里插入图片描述在这里插入图片描述

三张表的连接

例子:找出每个员工,部门,工资等级,上级领导
在这里插入图片描述

嵌套子查询

where嵌套
  • 例子:找出高于平均工资的员工信息—这种情况因为查询函数不能跟在where语句后面,所以必须使用嵌套查询

在这里插入图片描述

from嵌套
  • 例子:做出每个部门平均薪资的等级

在这里插入图片描述

select嵌套

例子:找出每个部门员工的部门名称,要求显示员工名和部门名

在这里插入图片描述

union用法

可以将结果组合在一个表中。可以是一张表的不同结果,也可以是不同表的结果–前提是列数相同
在这里插入图片描述

limit—取数据

  • 语法格式
  • limit startIndex,length
  • startIndex:起始位置,0表示第一条数据
  • length:取的数据的长度

sql语句的写法顺序
select
from
where
group by
having
order by
limit

表的建立

语法格式

create table 表名(
字段名1 数据类型 约束,
字段名2 数据类型 约束,

);

每个字段名默认都是NULL;
除非建表时定义了初始值
字段名1 数据类型 default 数据1;
这样字段名1的默认值就是数据1;

在这里插入图片描述
在这里插入图片描述

使用约束

使用约束是为了保证字段的合法性,有效性,完整性;

常见的约束

在创建表的时候在其后面添加关键字就行

  • 非空约束:(not null)约束的字段不能为空
  • 唯一约束:(unique)约束的字段不能重复,可以为空
  • 主键约束:(primary key)约束的字段不能为空,也不能重复
  • 外键约束:(foreign key)将两张表的某字段约束
  • 检查约束:(mysql不支持,但是oracle支持)
create table vip(
	id int not null  unique,
	name varchar(25) not null 
);

联合约束
以下代码表示的是id和name联合在一起是唯一的:vip(1,张三,123456@qq.com)和vip(2,张三,4546@qq.com)都可以放在数据库中,因为他们是联合唯一的,相当于存在一个变量不一样就整体不一样。

create table vip(
	id int not null  ,
	name varchar(25) not null,
	email varchar(55) not null,
	unique(id,name)
);

外键约束

foreign key(字段名) references 表名(字段名)
CREATE TABLE student(
	num INT(10) PRIMARY KEY UNIQUE AUTO_INCREMENT,
  	name VARCHAR(20) NOT NULL,
  	sex ENUM('男','女') NOT NULL,
  	birthday DATE,
  	address VARCHAR(50)
);
CREATE TABLE grade(
  	id INT(10) PRIMARY KEY UNIQUE AUTO_INCREMENT,
  	course VARCHAR(10)  NOT NULL,
  	num INT(10)  ,
  	grade VARCHAR(4),
  	FOREIGN KEY(num) REFERENCES student(num)
  );

代表grade中num字段与student中的num字段形成约束

Mysql 的常见数据类型

int 整数
bigint 长整型(long)
float 浮点型
char 定长字符串—后面加(数字)表示这个变量最多能存的字符数目(速度更快,但可能存在空间的浪费)
varchar 可变长字符串—速度慢,但是节省空间
date 日期类型 年月日
datatime 长日期类型 年月日 时分秒
BLOB 二进制大对象(存储图片,视频等)
CLOB 字符大对象(存储较大文本,比如,可以存储4G的字符串)

其余类型分类

  • 数据类型

请添加图片描述

  • 时间
    请添加图片描述
  • 字符串
    请添加图片描述

插入数据

题外知识:删除表:drop table 表名

  • 语法格式
  • insert into 表名(字段名1,字段名2…) values(值1,值2,…)
  • 字段可以省略不写,但是values必须数目与字段名一样,且顺序不能变化,且所有字段都要赋值。
  • 也可以一次加多行数据:…values(),()…;
insert into student(id,name,sex) values(01,"张三","男"),
insert into student(name) values("王五"),
insert into student values(02,"李四","男"),
insert into student values(03,"无","男"),(04"有","女"),

表的复制和批量插入

表的复制

  • 语法格式
  • create table 表名 as select 语句

在这里插入图片描述在这里插入图片描述

批量插入

  • insert into 表名 select *from 表名;
  • 必须得字段数目相等

修改数据

语法格式
update 表名 set 字段名1=值1,字段名2=值2… where 条件;
where条件不写就会将全部数据改变

在这里插入图片描述

删除数据

  • 语法格式

  • delete from 表名 where 条件;

  • 么有where 表中数据全部删除 在这里插入图片描述

  • 怎么删除一个大表?(删库跑路!-?)

  • truncate from 表名;

  • 无法恢复,且效率快;

事务

ALTER 命令

作用

修改数据表名,数据表字段等

  • 删除,添加,修改表字段
  • ALTER TABLE 表名 DROP 字段#删除字段
    ALTER TABLE 表名 ADD 字段 类型RST;#将字段添加到表的第一行
    ALTER TABLE表名 ADD 字段 类型 AFTER 字段c;#将字段添加到字段c的后面

修改字段类型和名称

ALTER TABLE 表名 MODIFY 字段 类型c;#将字段的类型改为类型c
ALTER TABLE 表名 CHANGE i j 类型c  ;#将字段i变成字段j ,类型为c
ALTER TABLE 表名 CHANGE j j 类型c; #将字段j的类型变为c

这里是引用

索引

账户管理

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值