MySQL


MySQL

MaruaDB 5.5.58 windows X64 下载

数据库(DataBase 简称DB): 按照数据结构来组织,存储和管理数据的文件仓库;

数据库管理系统(DataBase Management System简称DBMS):管理数据库的软件.

常见的DBMS

MySQL

 Oracle公司产品, MySQL 08年被Sun公司收购,09Sun公司被Oracle收购. 目前市占率排名第一, 开源软件, 原MySQL创始人从Oracle离开创办MariaDB

Oracle

Oracle公司产品, 拉里埃里森32, 闭源产品, 性能最高价格最贵. 市占率排名第二

SQLServer

微软公司产品,闭源产品, 市占率第三, 主要应用在微软的整套解决方案中

DB2

 IBM公司产品,闭源产品 主要应用在IBM整套解决方案中.

SQLite

轻量级数据库 安装包只有几十k,主要应用在移动设备或嵌入式设备中

数据库的执行

执行SQL语句需要先连接数据库,windows: 开始->所有程序->MariaDB或MySQL->MySQL Client 点击运行 输入密码后回车.

SQL语言分类

DDL:数据定义语言,负责数据库和表相关的操作

DML: 数据操作语言, 负责对数据进行增删改查

DQL: 数据查询语言, 只负责查询

TCL: 事务控制语言, 负责处理事务相关

DCL: 数据控制语言, 负责创建用户及分配用户权限相关

DDL数据定义语言

往数据库软件中保存数据,需要先创建数据库, 在数据库里面创建表, 最后往表里面插入数据

数据库相关SQL

1. 查询所有数据库

格式: show databases;

2. 创建数据库

格式: create database 数据库名;

指定字符集格式: create database 数据库名 character set utf8/gbk;

3. 查询数据库详情

格式: show database 数据库名;

4. 删除数据库

格式: drop database 数据库名;

5. 使用数据库

格式: use 数据库名;

表相关SQL语句

:操作表必须提前使用了某个数据库不然会报错 No database selected

1. 查询所有表

格式: show tables;

2. 创建表

格式: create table 表名(字段名1 类型,字段名2 类型,  ......);

指定字符集格式: create table 表名(字段名1 类型,字段名2 类型,  ......) charset = utf8/gbk;

查询表详情

格式:  show create table 表名;

3. 删除表

格式: drop table 表名;

4. 修改表名

格式: rename table 原表名 to 新表名;

5. 添加表字段

最后面添加格式:  alter table 表名 add 字段名 类型;

最前面添加格式:  alter table 表名 add 字段名 类型 first;

在XXX字段的后面添加: alter table 表名 add字段名 类型 after 字段名;

6. 查看表字段

格式: desc 表名;

7. 删除表字段

格式:  alter table 表名 drop 字段名;

8. 修改表字段

格式:  alter table 表名 change 原字段名 新字段名 类型;

DML数据操作语言

操作数据必须使用了某个数据库并且保证已创建了保存数据的表

例:

create database mydb3 character set utf8;

use mydb3;

create table person(name varchar(50),age int) charset=utf8;

1. 插入数据

全表插入格式: insert into 表名 values (值1,值2....);

指定字段插入格式: insert into 表名(字段名1,字段名2...)  values (值1,值2...);

2. 批量插入

insert into 表名 values('AAA',10),('BBB',11),('CCC',12);

insert into 表名(字段名)values("XXX"),("YYY"),("ZZZ");

3. 查询数据

格式:  select 字段信息 from 表名 where 条件;

例:

查询所有数据 select * from person;  

只查名字 select name from person;

查询年龄小于12岁的信息 select * from person where age<12;

4. 修改数据

格式:  update 表名 set 字段名1 = 值, 字段名2 = 值 where 条件;

5. 删除数据

格式:  delete from 表名 where 条件;

如若只为null,则delete from 表名where 字段名is null;

不加条件,则delete from 表名; 表示删除所有数据

6.导出数据和表结构:

格式: mysqldump -u用户名 -p 数据库名 > 数据库名.sql
例: mysqldump -uroot -p dbname > dbname .sql             //之后会弹出来让你输入密码

数据类型

1.整数

int ( m ) 和 bigint ( m )  m代表显示长度

例: 

 m=10 18  0000000018  起到补零的作用, 需要和zerofill关键字结合使用

举例: create table t1(name varchar(10),age int(10) zerofill);

​ insert into t1 values('Tom',18);

​ select * from t1;

2.浮点数

double ( m , d )  m代表总长度 d代表小数长度

 23.532   m=5  d=3

decimal(m,d) 是超高精度浮点数 只有涉及超高精度运算时使用

字符串

3.文本

Char ( m ) : m代表字符长度 , 固定长度 m=10 存"abc" 占10 , 执行效率略高 最大长度255

varchar(m): 可变长度, m=10 存"abc" 占3 节省空间 最大长度65535 ,建议保存255以内的字符串 超过255使用text

text(m):可变长度 最大长度65535

4.日期

date 只能保存年月日 yyyy-MM-dd

time 只能保存时分秒 hh-MM-ss

datetime 默认值null 最大值 9999-12-31

timestamp 时间戳默认值当前系统时间 最大值为2038-1-19

主键约束

表示数据唯一性的字段称为主键 ; 创建表时给表字段添加的限制条件

主键约束primary key:  唯一且非空例:

 create table t3(id int primary key,name varchar(10));

insert into t3 values(1,'aaa');

 insert into t3 values(1,'bbb');

主键约束+自增

自增规则:从历史最大值+1

例:

create table t4(id int primary key auto_increment,name varchar(10));

insert into t4 values(null,'aaa');          1

insert into t4 values(null,'bbb');         2

insert into t4 values(10,'bbb');           10

insert into t4 values(null,'ccc');          11

delete from t4 where id>9;

insert into t4 values(null,'ddd');         12

1. 导入*.sql批处理文件

source  sql文件地址;

测试 select * from emp; 如果有乱码 执行 set names gbk; 再查

2. is null 和 is not null

例:

查询没有上级领导的员工信息

select * from emp where mgr is null;

查询有上级领导的员工姓名和领导编号

select ename,mgr from emp where mgr is not null;

3. 去重 distinct

例:

查询员工表中出现的不同的工作有哪些

select distinct job from emp;

查询员工表中出现的部门编号 去掉重复

select distinct deptno from emp;

4. and和or

and 类似java中的&& or 类似java中的||

例:

查询1号部门工资低于2000的员工信息

select * from emp where deptno=1 and sal<2000;

查询3号部门或工作是程序员的员工信息

select * from emp where deptno=3 or job='程序员';

查询有上级领导的员工中工资小于2000的员工姓名,工资和领导编号

select ename,sal,mgr from emp where mgr is not null and sal<2000;

5. 比较运算符 >  <  >=  <=  =   != 和<>

例:

查询不是程序员的员工中工资小于等于1600的员工信息

select * from emp where job !='程序员' and sal<=1600;

select * from emp where job <>'程序员' and sal<=1600;

6. in关键字

例:

查询工资为3000,1500,5000的员工信息

select * from emp where sal=3000 or sal=1500 or sal=5000;

select * from emp where sal in(3000,1500,5000);

查询工资不是3000,5000的员工信息

select * from emp where sal!=3000 and sal!=5000;

select * from emp where sal not in(3000,5000);

7.  between x and y 包含x和y

例:

1. 查询工资在1000到2000之间的员工信息

   select * from emp where sal between 1000 and 2000;

2. 查询工资在1000到2000之外的员工信息

   select * from emp where sal not between 1000 and 2000;

8. 模糊查询like

_:代表1个未知字符

%:代表0或多个未知字符

样式:

  以x开头       x%

  以x结尾      %x

  第二个是x     _x%

  包含x          %x%

  第2个是x倒数第三个是y      _x%y_ _

例:

1. 查询名字中包含悟字的员工姓名

   select ename from emp where ename like "%悟%";

2. 查询工作中第二个字是售 的员工信息

   select * from emp where job like '_售%';

3. 查询名字中以精结尾的员工姓名

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

4. 查询姓孙的员工信息

   select * from emp where ename like '孙%';

9. 排序 order by

格式: order by 字段名 asc升序(默认)/desc降序

例:

1. 查询每个员工的姓名和工资 按照工资升序排序

   select ename,sal from emp order by sal;

2. 查询每个员工的姓名和工资,按照工资降序排序

   select ename,sal from emp order by sal desc;

 多字段排序; 在order by后面写多个字段用逗号分隔

例:

1. 查询每个员工的姓名工资和部门编号,按照部门编号升序排序 如果部门编号一致则按照工资降序排序

   select ename,sal,deptno from emp order by deptno,sal desc;

10. 分页查询limit

例:

1. 查询每个员工的姓名和工资 按照工资升序排序

   select ename,sal from emp order by sal;

2. 查询每个员工的姓名和工资,按照工资降序排序

   select ename,sal from emp order by sal desc;

例:

1. 查询员工姓名和工资按照工资降序排序查询前三条

   select ename,sal from emp order by sal desc limit 0,3;

2. 查询第二页的4条数据

   select * from emp limit 4,4;

3. 查询第3页的3条数据

   select * from emp limit 6,3;

4. 查询最惨员工信息(工资最低)

   select * from emp order by sal limit 0,1;

11. 别名

例:

对查询的字段名起一个新的名字

select ename as '姓名' from emp;

select ename '姓名' from emp;

select ename 姓名 from emp;

12. 数值计算 + - * / %

例:

查询每个员工的姓名 工资和年终奖(年终奖=5个月的工资)

select ename,sal,5*sal 年终奖 from emp;

查询1号部门员工的姓名/工资和涨薪5块钱之后的工资

select ename,sal,sal+5 涨薪后 from emp where deptno=1;

聚合函数

对查询的多条数据进行统计查询

统计方式: 求平均值, 最大值,最小值, 求和, 计数

1. 平均值avg(字段名)  

例:

 查询2号部门的平均工资

   select avg(sal) from emp where deptno=2;

   查询程序员的平均工资

   select avg(sal) from emp where job='程序员';

2. 最大值max(字段名)  

例:

 查询1号部门的最高工资

   select max(sal) from emp where deptno=1;

3. 最小值min(字段名)  

例:

 查询销售的最低工资

   select min(sal) from emp where job='销售';

4. 求和sum(字段名) 

例:

  查询销售工作的工资总和

   select sum(sal) from emp where job like '%销售%';

5. 计数count(字段名)      count(*)     

例:

查询1号部门员工人数

   select count(*) from emp where deptno=1;

分组查询 group by

格式: group by 字段名

以分组字段相同值的数据为一组 进行统计查询

例:

1. 查询每个部门的平均工资

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

2. 查询每个部门的最高工资

   select  deptno,max(sal) from emp group by deptno;

3. 查询每种工作的人数

   select job,count(*) from emp group by job;

4. 查询1号部门每种工作的人数

   select job,count(*) from emp where deptno=1 group by job;

各个关键字的顺序

select * from 表名 where 条件 group by 分组字段 order by 排序字段 limit 跳过条数,请求条数

Having

where后面只能写普通字段的条件, 聚合函数条件需要写在having后面, having写在group by的后面  要和分组查询结合使用

例:

1. 查询每个部门的平均工资要求只查询平均工资大于2000的信息

select deptno,avg(sal) from emp group by deptno having avg(sal)>2000 ;

2. 查询只有一个人的工作名称

   select job,count(*) c from emp group by job having c=1;

3. 查询每个部门的工资总和,只查询有领导的员工,并且要求工资总和高于5400;

   select deptno,sum(sal) s from emp where mgr is not null group by deptno having s>5400;

4. 查询每个部门的平均工资,只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的部门

   select deptno,avg(sal) a from emp where sal between 1000 and 3000 group by deptno having a>=2000;

5. 查询每种工作的人数要求人数大于1个,并且只查询1号部门和2号部门的员工, 按照人数降序排序

   select job,count(*) c from emp where deptno in(1,2) group by job having c>1 order by c desc;

各个关键字的顺序

select * from 表名 where 普通字段条件 group by 分组字段 having 聚合函数条件 order by 排序字段  limit 跳过条数,请求条数;

子查询(嵌套查询)

例:

1. 查询工资高于1号部门平均工资的员工信息

select avg(sal) from emp where deptno=1;

select * from emp where sal>(select avg(sal) from emp where deptno=1);

2. 查询工资最高的员工信息

   select max(sal) from emp;

   select * from emp where sal=(select max(sal) from emp);

3. 查询工资高于2号部门最低工资的员工信息

   select min(sal) from emp where deptno=2;

   select * from emp where sal>(select min(sal) from emp where deptno=2);

4. 查询和孙悟空相同工作的其它员工信息

   select job from emp where ename='孙悟空';

   select * from emp where job=(select job from emp where ename='孙悟空') and ename!='孙悟空';

5. 查询拿最低工资员工的同事们的信息(同事指相同部门)

   select min(sal) from emp; //得到最低工资

   select deptno from emp where sal=(select min(sal) from emp);//最低工资的部门编号

   select * from emp where deptno=(select deptno from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

6. 查询白骨精的部门信息(需要用到部门表)

   select deptno from emp where ename='白骨精';

   select * from dept where deptno=(select deptno from emp where ename='白骨精');

关联关系

创建表时,表和表之间存在的业务关系

有哪几种关系?

       一对一:有AB两张表,A表中一条数据对应B表中的一条数据,同时B表中的一条数据也对应A表中的一条数据 称为一对一关系

       一对多:有AB两张表,A表中一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的一条数据 称为一对多关系

       多对多:有AB两张表,A表中一条数据对应B表中的多条数据,同时B表中的一条数据也对应A表中的多条数据 称为多对多关系

表和表之间如何建立关系?

        通过一个单独的字段指向另外一个表的主键,这个单独的字段称为外键.

关联查询

同时查询多张存在关联关系的表时,使用的查询查询方式称为关联查询

关联查询的方式有三种: 1. 等值连接  2.内连接  3. 外连接

关联查询之等值连接

格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;

例:

1. 查询1号部门每一个员工的姓名和对应的部门名

   select e.ename,d.dname

   from emp e,dept d

   where e.deptno=d.deptno and e.deptno=1;

2. 查询工资高于2000的员工姓名/工资和工作地点(部门地点)

   select ename,sal,loc

   from emp e,dept d

   where e.deptno=d.deptno and e.sal>2000;

关联查询之内连接

和等值连接作用一样, 查询的是两张表的交集数据

格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;

格式: select * from A join B on A.x=B.x(关联关系)  where A.age>30;

例:

查询1号部门每一个员工的姓名和对应的部门名

select ename,dname  from emp e join dept d  on e.deptno = d.deptno  where e.deptno=1;

关联查询之外连接

查询的是一张表的全部和另外一张表的交集

insert into emp (empno,ename) values(100,'Tom');

格式: select * from A left/right join B on A.x=B.x(关联关系)  where A.age>30;

例:

查询所有员工的名字和对应的部门名

select e.ename,d.dname from emp e left join dept d  on e.deptno=d.deptno;

关联查询总结:

1. 如果查询的是两张表的交集数据使用等值连接或内连接(推荐)

2. 如果查询的是一张表的全部和另外一张表的交集则使用外连接

本文精选MySQL基本数据操作,如有错误或者补充请留言或私信  版权@Healer_小振

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Healer_小振

感谢大佬的支持和鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值