MySQL常用命令

数据库操作

--登陆MySQL

mysql -u用户名 -p密码

--退出MySQL

exit;  或 quit;

--创建数据库

create database 数据库名;

--查看当前在那个库里

select database();

--进入库

use 库名;

--判断数据库是否存在,不存在直接创建

create database if not exists 数据库名;

--创建数据库并指定字符集

crate database 数据库名 default character set gbk;

--查看库的字符集

show create database 数据库名;

表操作

字段:

整数型:tinyint、smallint、mediumint、int(4字节,有符号范围-2147483648,2147483647)、bigint

浮点型:float(m,d) 4 字节 单精度浮点型 备注:m代表总个数,d代表小数位个数

double(m,d) 8 字节 双精度浮点型 备注:m代表总个数,d代表小数位个数

字符串型:char(0-255)、varchar(范围0-65535)、tinytext、text、mediumtext、longtext

时间型:date、time、year、datetime(字节8为,格式 yyyy-MM-dd HH:mm:ss)、timestamp

定点型:DECIMAL(m,d) 依赖于M和D的值 备注:m代表总个数,d代表小数位个数

--创建表

 create table 表名(

 字段名 数据类型 约束条件 备注

 )engine=innodb charset=utf8;

 例:

   CREATE TABLE student (

id tinyint(5) zerofill auto_increment not null comment '学生学号', 

name varchar(20) default null comment '学生姓名', 

age tinyint default null comment '学生年龄', 

class varchar(20) default null comment '学生班级', 

sex char(5) not null comment '学生性别',

unique key (id) 

    )engine=innodb charset=utf8;;

--查看所有表

show database;

--修改表名

rename table 旧表名 to 新表名;

--修改表的字符集

alter table 表名 character set 字符集;

--删除表

drop table 表名;

DML数据操纵

增:

--inset into 表名(字段名) values (值);  若给所有字段都添加数据,则可省略(字段名) 

例:insert into employee (empno,ename,job,mgr,hiredate,sal,deptnu) values ('1000','小明','经 理','10001','2019-03-03','12345.23','10');

--一次性插入多条数据:insert into 表名 (字段名) values (对应值1),(对应值2),(对应值3);

删:

--delete from 表名 where 条件

--删表

truncate table 表名;  、 delete from 表名;  、 drop table 表名;

delete与truncate与drop 这三种删除数据的共同点都是删除数据,他们的不同点是什么? 

delele 会把删除的操作记录给记录起来,以便数据回退,不会释放空间,而且不会删除定义。

truncate不会记录删除操作,会把表占用的空间恢复到最初,不会删除定义 

drop会删除整张表,释放表占用的空间。

删除速度:drop > truncate > delete

改:

--update 表名 set 字段1=值1,字段2=值2 where 条件

查:

-- 简单查询

select * from 表名

select deptnu as d,addr as a from dept  --as 设置别名查询

 

-- 条件查询

select * from 表名 where 条件

-- 模糊查询

 select * from employee WHERE ename like '张%';  --查询姓张的员工

--范围查询

 select * from employee where sal between 10000 and 20000; -- 查询工资10000-20000的员工

-- 离散查询

 select * from employee WHERE deptnu in ('10','20','100') -- 查询符合结果条件的内容,若没有则不显示

-- 去除重复值

 select distinct(job) FROM employee -- 查询公司职务有哪些

-- 统计查询

*count() 或 count(*)

*sum()

*max()

*avg

*min()

select sum(sal) FROM employee --统计总工资

select count(*) FROM employee --查询数据总条数

select max(sal) FROM employee --查询工资最大值

concat函数:select concat(ename,'是',job) FROM employee --连接字段

-- group by分组查询

 select job,count(*) FROM employee group by job;  -- 查询每个职务分别多少人

 select deptnu,job,count(*) FROM employee group by job,deptnu;  -- 支持多个字段查询,查询每个部分对应职务多少人

--having 筛选查询

  select deptnu,job,count(*) FROM employee group by job,deptnu HAVING  job="经理";  --对查询结果再进行条件筛选

  select deptnu,job,count(*) FROM employee group by job,deptnu HAVING  count(*)>2;

--order by排序查询

  select * from employee WHERE job='文员' ORDER BY sal asc;  -- 默认 asc 升序,降序 desc  -- 按文员工资升序查询

 

--limit 限制查询

  select * from employee limit 5; -- 只显示5条数据

  select * from employee limit 5,3; -- 从第5条数据开始,查询3条数据

--exists 子查询

      select * from 表名 a where exists (select 1 from 表名2 b where 条件); --括号里面的条件成立,则执行外面的语句

  select * from dept a WHERE exists (SELECT * FROM employee b WHERE a.deptnu = b.deptnu);  -- 查询有员工的部门信息

  select * from dept a WHERE not exists (SELECT * FROM employee b WHERE a.deptnu = b.deptnu);  -- 查询没有员工的部门信息

  

--左连接、右连接查询

  select  a.dname as '部门名称',b.* from dept a left JOIN employee b on a.deptnu = b.deptnu;  --左连接查询,左表信息全部显示,右表显示符合条件的信息,没有则为null展示

select  a.dname as '部门名称',b.* from dept a right JOIN employee b on a.deptnu = b.deptnu;  --右连接查询,右表信息全部显示,左表显示符合条件的信息,没有则为null展示

--内连接查询,联合查询

内连接查询 inner JOIN

select  a.dname as '部门名称',b.* from dept a inner JOIN employee b on a.deptnu = b.deptnu;  -- 根据字段匹配两个表都有的信息,才显示出来

select  a.addr,b.ename from dept a inner JOIN employee b on a.deptnu = b.deptnu and b.ename="张飞";  -- 查询飞的地址信息

  select  a.addr,b.ename from dept a ,employee b WHERE a.deptnu = b.deptnu and b.ename="张飞";   -- 也可以用这种,效率更高

 联合查询 union

UNION 的默认行为:去重和重新排序,用ORDER BY排序时需加limit,需要对子句用括号括起来

UNION ALL不会对合并后的结果集去重,即保留所有记录(包括重复记录)

(select * from employee a WHERE a.job='文员' ORDER BY a.sal limit 10 ) union (select * from employee b WHERE b.job='销售员' ORDER BY b.sal desc limit 10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值