mysql数据库简单操作

目录

1.数据库常用操作

1.1创建数据库(create)

 1.2删库(drop)

1.3查看所有数据库 (show)

2表的常用操作 

2.1创建表

2.2修改表 

2.3删除表(drop)

2.4查看所有表(show)

2.5查看表的结构、设计表(desc)

3.表记录的常用操作

3.1插入数据

3.2查询记录

3.3修改记录

3.4删除记录

3.5记录,查询总数

3.6排序

4.其他表记录的操作

4.1like

4.2null

4.3between and

4.4分页limit

4.5聚合aggregation

4.5.1根据一列统计结果 count

4.5.2max / min

4.5.3sum 和/ avg 平均数

4.5.4分组 group by

4.5.5having

5.关联查询

 5.1多表联查join

5.1.1笛卡尔积 Cartesian product

5.1.2inner join、left join、right join的区别?

5.2子查询

5.2.1概念

5.2.2列子 


1.数据库常用操作

1.1创建数据库(create)

create database 库名  DEFAULT CHARACTER SET utf8;
例如:创建数据库,数据库名称:cgb2022

        create database cgb2022 DEFAULT CHARACTER SET utf8;

 1.2删库(drop)

 drop database 库名;

例如:删除名称是cgb2022的数据库

        drop database cgb2022;

1.3查看所有数据库 (show)

show databases;

2表的常用操作 

2.1创建表

例如:
    创建tb_door表,有id,door_name,tel字段

    create table tb_door(
    id int primary key auto_increment, //设置自增主键id
    door_name varchar(100),            //字段door_name
    tel varchar(50)                    //字段tel
    );

2.2修改表 

添加列:alter table 表名 add column 列名 类型(长度)

    alter table tb_door add column money NUMERIC(7,2)

numeric(a,b)
    a代表整数位加小数位的总位数(不算小数点),b代表小数位的位数。

2.3删除表(drop)

删除表:
    drop table 表名

例如:
    删除名称是tb_door的表:drop table tb_door;

2.4查看所有表(show)

show tables;

2.5查看表的结构、设计表(desc)

desc 表名
例如:
    查看tb_door:desc tb_door;

3.表记录的常用操作

3.1插入数据

insert into 表名 values (字段1,字段2,字段3);
例如:
    向tb_door表中插入2条记录:

    insert into tb_door values(null,'永和大王1店',666);
    insert into tb_door values(null,' 永和大王2店',888);

3.2查询记录

select * from 表名

例如:
    
    查询tb_door表中的所有记录:SELECT * FROM tb_door;

3.3修改记录

update 表名 set 字段=值 where 字段=值

例如:
    修改tb_door表中id为1的记录:update tb_door set tel=555 where id=1;

3.4删除记录

Delete from 表名 where 字段=值
例如:
    删除tb_door表中id为2的数据:Delete from tb_door where id=2;

3.5记录,查询总数

select count(*/具体字段) from 表名;

例如:
    查询tb_door表中的总记录数:Select count(*) from tb_door;

3.6排序

Select * from 表名 order by 字段 desc; //从高到低(降序)
Select * from 表名 order by 字段 asc;  //从低到高(升序)
Select * from 表名 order by 字段       //默认升序

例如:
    将tb_door表记录按照tel排序:Select * from tb_door order by tel desc;

4.其他表记录的操作

4.1like

select * from emp where ename like 'l%' --以l开头的

select * from emp where ename like '%a' --以a结束的

select * from emp where ename like '%a%' --中间包含a的

select * from emp where ename like 'l__' --l后面有两个字符的 _代表一个字符位置

4.2null

select * from emp where mgr is null --过滤字段值为空的

select * from emp where mgr is not null --过滤字段值不为空的

4.3between and

select * from emp where sal<3000 and sal>10000

select * from emp where sal<=3000 and sal>=10000--等效

select * from emp where sal between 3000 and 10000--等效与大于等和小于等于之间 

4.4分页limit

select * from emp limit 2 --列出前两条

select * from emp limit 1,2 --从第二条开始,展示2条记录

select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条

4.5聚合aggregation

4.5.1根据一列统计结果 count

select count(*) from emp --底层优化了

select count(1) from emp --效果和*一样

select count(字段) from emp --慢,只统计非NULL的

4.5.2max / min

select max(sal) from emp --求字段的最大值

select max(sal) sal,max(comm) comm from emp

select min(sal) min from emp --获取最小值

select min(sal) min,max(sal) max from emp --最小值最大值

SELECT ename,MAX(sal) FROM emp group by ename --分组

4.5.3sum 和/ avg 平均数

select sum(sal) from emp --求和

select avg(sal) from emp --平均数

4.5.4分组 group by

#每个部门每个岗位的最高薪资和平均薪资,结果中的非聚合列必须出现在分组中,否则业务意义不对

SELECT deptno,MAX(sal),AVG(sal) FROM emp

GROUP BY deptno #按照deptno分组

SELECT job,MAX(sal),AVG(sal) FROM emp

GROUP BY job #按照job分组

SELECT deptno,job,MAX(sal),AVG(sal) FROM emp

GROUP BY deptno,job #deptno和job都满足的

4.5.5having

having 子句类似where过滤返回的结果

select deptno, AVG(sal) from emp
group by deptno #按部门分组
having AVG(sal)<8000 #查询条件,类似where,但是group by只能配合having

#deptno出现的次数
SELECT deptno,COUNT(deptno) FROM emp

GROUP BY deptno #按deptno分组

HAVING COUNT(deptno)>1 #次数多的

5.关联查询

 5.1多表联查join

5.1.1笛卡尔积 Cartesian product

  • 内连接 inner join
  • 左(外)连接 left join
  • 右(外)连接 right join
SELECT * FROM emp
 
WHERE deptno = ( SELECT deptno FROM dept WHERE dname='research' )

--------------------------------------------------------------
SELECT d.dname,e.ename,e.job
 
FROM emp e INNER JOIN dept d
 
ON e.deptno=d.deptno
 
WHERE d.dname='research'
 
换成left join和right join,看看有什么不同呢?
--------------------------------------------------------------
SELECT *
 
FROM emp e INNER JOIN empext t
 
ON e.empno=t.empno
 
WHERE e.ename='tony'
 
换成left join和right join,看看有什么不同呢?

5.1.2inner join、left join、right join的区别?

  • INNER JOIN两边都对应有记录的才展示,其他去掉
  • LEFT JOIN左边表中的数据都出现,右边没有数据以NULL填充
  • RIGHT JOIN右边表中的数据都出现,左边没有数据以NULL填充

5.2子查询

5.2.1概念

        子查询是指嵌入在其他select语句中的select语句,也叫嵌套查询。子查询执行效率低慎用。记录少时效率影响不大、图方便直接使用,记录多时最好使用其它方式替代。

5.2.2列子 

单行子查询 =

--列出tony所在部门的所有人员
 
select deptno from emp where ename='tony';
 
select * from emp where deptno = (select deptno from emp where ename='tony');

--------------------------------------------------------------------
多行子查询用 in

select * from emp where job in ('经理','员工');
 
select * from emp where job in (select distinct job from emp);

尽量用连接代替所有的子查询

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值