MySql学习

1、DBMS(数据库管理系统)

DBMS(数据库管理系统)负责执行sql语句,通过sql语句来操作DB当中的数据。可以理解为:DBMS -(执行) - > SQL - (操作) -> DB

2、什么是表?

表:table
表:table是数据库的基本组成单元,所有的数据都以表的形式组织,可读性强。
一个表包括行和列:
	行:被称为数据/ 记录(data)
	列:被称为字段(column)
每一个字段应该包括哪些属性?
	字段名、数据类型、相关的约束

3、学习MySQL主要还是学习通用的SQL语句,SQL语句包括增删改查,该怎么分类呢?

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

4、导入数据

第一步:登录mysql数据库管理系统

	DOS命令窗口:
		mysql - uroot -proot

第二步:查看有哪些数据库

		show databases;(这个不是SQL语句,属于MySql的命令。)
		+--------------------+
		| Database          		 |
		+--------------------+
		| information_schema |
		| mysql             			 |
		| performance_schema |
		| sys         				       |
		+--------------------+

第三步:创建属于我们自己的数据库

create database bjpowernode;(这个不是SQL语句,属于MySql的命令)。

第四步:使用bjpowernode数据

use bjpowernode;(这个不是SQL语句,属于MySql的命令)。

第五步:查看当前使用的数据库中有那些表?

show tables;(这个不是SQL语句,属于MySql的命令)。

第六步:初始化数据

mysql> source source C:\Users\HP\Downloads\bjpowernode.sql

在初始化数据完成后,可以通过命令:show table来查看当前数据库的表。

5、****.sql

这个文件以sql结尾,这样的文件被称为“sql脚本”。什么是sql脚本呢?
当一个文件的扩展名是.sql,并且该文件中编写了大量的SQL语句,我们称这样的文件为sql文件。
注意:直接使用source命令可以直接执行sql脚本。
sql脚本中的数量太大的时候,无法打开,请使用source命令完成初始化。

6、删除数据库:drop database ***。

7、查看表结构:

mysql> use bjpowernode
Database changed
mysql> show tables;
±----------------------+
| Tables_in_bjpowernode |
±----------------------+
| dept |
| emp |
| salgrade |

mysql> desc dept;
±-------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±------+
| DEPTNO | int | NO | PRI | NULL | |
| DNAME | varchar(14) | YES | | NULL | |
| LOC | varchar(13) | YES | | NULL | |
±-------±------------±-----±----±--------±------+

mysql> desc emp;
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| EMPNO | int | NO | PRI | NULL | |
| ENAME | varchar(10) | YES | | NULL | |
| JOB | varchar(9) | YES | | NULL | |
| MGR | int | YES | | NULL | |
| HIREDATE | date | YES | | NULL | |
| SAL | double(7,2) | YES | | NULL | |
| COMM | double(7,2) | YES | | NULL | |
| DEPTNO | int | YES | | NULL | |
±---------±------------±-----±----±--------±------+

8、查看表格数据

select * from dept
select * from “表名”;
查看某个表的信息。

9、常用命令

查看当前正在使用的数据库select database();
查看当前数据库版本select version();
\c 结束一条语句,exit退出MySQL;

10、查看创建表的语句

show create table tablename;

11、简单的查询语句(DQL)

语法格式:

select 字段名1,字段名2,字段名3......from 表名;
--查询多个字段用,隔开

提示:
1、任何一条sql语句以;结尾。
2、sql语句不区分任何大小写。
查询员工的年薪?

select ename,sal*12 from emp;
--ename为员工名字
--sal为月薪,乘以12即可得到年薪

对查询结果的列重命名?

select ename,sal * 12 as yesrsal from emp;

别名中有中文怎么办?

select ename,sal * 12 as '年薪' from emp;
--此处说明查询中,字段可以做数学运算

注意:标准sql语句中要求字符串用单括号括起来。MySQL支持双引号,Oracle会报错。
查询所有字段?

select * from emp;
--实际开发中不建议使用*,效率比较低。

12、条件查询

--语法格式:
	select 
		字段,字段...
	from
		表名
	where
		条件;
--执行顺序:先from,然后where,最后select

查询工资等于5000的员工?

select ename,sal from emp where sal = 5000;

查询SMITH的工资?

select sal from emp where ename = 'SMITH';

找出工资大于3千的员工?

select ename,sal from emp where sal>=3000;

找出工资在1100到3000的员工,包括等于?

select ename,sal from emp where sal >= 1100 and sal <= 3000;

也可以使用between and完成查找

select ename,sal from emp where sal between 1100 and 3000;
--注意:between...and在使用时,and的左边一定要小于and右边的数,不然查询不到任何数据。(左小右大),between and是一个闭区间。

between and除了可以使用在数字方面,还可以使用在字符串方面。

select ename from emp where ename between 'A' and 'C';
--运用在字符方面表示左闭右开,左边的边界会被查询,右边不会。

找出哪些人津贴为null或者不为null?

select comm from emp where comm is null;
select comm from emp where comm is not null;
--在数据库中,不是一个值,什么也没有,代表什么也没有,不能说是空值。
--空不是一个值,不能用等号衡量。
--必须使用is null或者 is not null

找出哪些人没有津贴

select comm from emp where comm is null and comm = 0;

找出工作岗位是MANAGER和SALESMAN

select ename,job from emp where job = 'MANAGER' OR job = 'SALESMAN';

and和or联合起来用:找出薪资大于1000的并且部门编号是20或30的部门员工。

select ename,emptno,sal from emp where sal > 1000 and (emptno = 20 or emptno = 30);
--当and和or在同一个语句的时候,and的优先级高于or的优先级。当不确定运算符的优先级的时候,可以添加小括号,小括号里面的运算符优先级较高。

in等同于or:找出工作岗位是MANAGER和SALESMAN

select ename,job from emp where job='MANAGER' or job = 'SALESMAN';
select ename,job from emp where job in ('MANAGER' and 'SALESMAN');

not in:表示不在这个范围中的数据。
模糊查询:like
找出名字当中含有O的?(在模糊查询中,必须掌握%,_ %表示任意多个字符,_表示任意一个字符。)

select ename from emp where ename like '%O%';

找出第二个字母是A的?

select ename from emp where ename like '_A%';

找出名字中有下划线的?

select ename from emp where ename like '%\_%';

找出名字中最后一个字符是T的?

select ename from emp where ename like '%T';

13、排序(升序、排序)

select ename,sal from emp order by sal;
--默认升序。

怎么指定升序或者降序?asc表示升序,desc表示降序。

select ename,sal from emp order by sal;--升序
select ename,sal from emp order by sal asc;--升序
select ename,sal from emp order by sal desc;--降序

按照工资的降序,当工资相同的时候在按照名字的升序排列。

select ename,sal from emp order by sal desc;--工资的降序排列
select ename,sal from emp order by sal desc,ename asc;

注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会根据后面的字段来。

找出工作岗位是salsman的员工,并且要求按照薪资的降序来排列。

select ename,sal from emp where job = 'salsman' order by sal desc;
select
	字段		--3
from
	表名		--1
where
	条件		--2
order by
	...			--4
--order by是最后执行的。

14、分组函数

count --计数
sum --求和
avg --平均值
max --最大值
min --最小值

--记住:所有的分组函数都是对某一组数据进行操作的。
--找出工资总和?
	select sum(sal) from emp;
--找出最高工资?
	select max(sal) from emp;
--找出最低工资?
	select min(sal) from emp;
--找出平均工资?
	select avg(sal) from emp;
--找出总人数?
	select count(ename) from emp;

分组函数一共有五个。
分组函数还有另外一个名字:多行处理函数。
多行处理函数的特点:输入多行,最终输出的结果是1行。

分组函数自动忽略NULL,不需要使用ifnull()函数进行判断。

select ename,sal from emp where sal > avg(sal);
--⭐此处报错:因为SQL语句当中有一个语法规则,分组函数不可直接使用在where的子句当中。
--原因:因为grop by在where后面执行。
解决:select sal from emp where sal > (select avg(sal) from emp);

count() 和count(具体的某个字段) 有什么区别?
count(
):不是统计某个字段中数据的个数,而是统计总记录条数。
count(字段):标志统计某个字段中不为NULL的数据总数量。

分组函数也可以组合来用。

select count(*),sum(sal),max(sal) from emp;

15、单行处理函数
什么是单行处理函数?
输入一行,输出一行。

--计算每个员工的年薪?
select ename,(sal + comm)*12 as yearsal from emp;(出现NULL)
select ename,(sal + ifnull(comm,0))*12 as yearsal from emp;(正确处理)
--在所有的数据库中,当对NULL值进行计算后,得到的一定是个NULL值。
ifnull()  --空处理函数?
	ifnull(可能为NULL的是数据,被当作什么处理)
	--ifnull属于单行处理函数。
	select ename,ifnull(comm,0) as comm from emp;

16、group by 和 having
group by : 按照某个字段或者某些字段进行分组。
having:having是对分组之后的数据进行再次过滤。
案例:找出每个工作岗位的最高薪资。

select job,max(sal) from emp group by job;
--注意:分组函数一般都会和grop by联合使用,这也是为什么它被称为分组函数的原因。并且任何一个分组函数(count,max,min,avg)都是在group by语句执行结束之后才会执行的。当一条语句没有group by的话,整张表的数据会自成一组。
--⭐当一条语句中有group by时,前面的字段只能跟参加分组的字段以及分组函数,不能有其他字段。

每个岗位的平均薪资?

select job,avg(sal) from emp group by job;

多个字段能不能联合起来一起分组?
案例:找出每个部分不同工作岗位的最高薪资。

select deptno,job,max(sal) from emp grop by deptno,job;

找出每个部门的最高薪资,要求显示薪资大于2500的数据。

--第一步找出每个部门的最高薪资
select deptno,max(sal) from emp group by deptno;
--第二部:找出薪资大于2900
select deptno,max(sal) from emp group by deptno having(max(sal));

--效率高,尽量使用where
select deptno,max(sal) from emp where sal > 2500 group by deptno;

找出每个部门的平均薪资,要求显示薪资大于2000的数据。

--第一步:找出每个部门的平均薪资
select deptno,avg(sal) from emp group by deptno;
--第二步:找出薪资大于2000的数据
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

17、总结一个完整的DQL语句怎么写?

select	5
	..
from	1
	..
where	2
	..
group by	3
	..
having	4
	..
order by	6
	..

18、回顾
表在数据库中是最基本的数据单元,行称为记录,列称为字段。
DQ
souce 导入sql脚本。
select version() 查看当前的数据库版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

updaydayday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值