mysql命令总结

查看有哪些数据库

show databases
使用数据库

use database
查看当前数据库

select database()
创建数据库

craeate database 数据库名 charset=utf8
删除数据库

drop database 数据库名

创建表

create table table_name(
id int unsigned ,
name char(40),
PRIMARY KEY

修改表字段 重命名
alter table mnproxies(表名) change 字段原名 字段更改后名字 类型 约束

修改表字段 只改类型 约束
alter table mnproxies modify 字段名 类型及约束

删除表字段
alter table mnproxies drop 字段名

删除表
drop table mnproxies

查看创建表时候的语句
show create table mnproxies(表名)

关于表的增删改查

查询表里的所有列的信息
select * from mnproxies;

查询指定列
select id,name from mnproxies;

向表中插入全字段信息
inssert into mnproxies values (所有字段都要写xxx)

向表中插入部分字段信息
insert into mnproxies(ip,port,delay) values(192,443,2)

向表中插入部分字段,多个插入
insert into mnproxies(ip,port,delay) values(),(),()

向表中插入全部字段信息,多个插入
insert into mnproxies values(),(),()

更新表中字段的值(修改)通过行列锁定
update mnproxies set ip(字段名)=192,port=443 where id=5

删除表中字段的值 ,整行删除,锁定行
delete from mnproxies where id=1;

逻辑删除就是更改字段的值,行列锁定
update mnproxies set is_delete=1 where id=5;

备份
mysqldump -uroot -p proxy_pool > hr.sql;

恢复
mysql -uroot -p proxy_pool < hr.sql

高级查询

消除重复行
select distinct ip from mnproxies;

查询某一单行全部字段
select * from mnproxies where id=1;

比较运算查询
查找id大于4的所有行信息
select * from mnproxies where id>4;

查找id不大于4的所有行信息
select * from mnproxies where id<4;

查询姓名不是”黄蓉”的学生
select * from students where name != “黄蓉”;

查询没被删除的学生
select * from students where is_delete=0;

逻辑运算符
查询编号大于3的女同学
select * from students where id>3 and gender=0;

查询编号小于4或没被删除的学生
select * from students where id<4 or is_delete=0;
模糊查询(重点)
%表示多个占位符
_表示单个占位符
查询姓黄的学生

select * from students where name like “黄%”;

查询姓黄并且”名”是一个字的学生
select * from students where name like “黄_”;

查询姓黄或者叫靖的学生
select * from students where name like “黄%” or name like “%靖”;

范围查询(重点)
表示查询编号为1,3,8的学生
select * from students where id in (1,3,8);

查询编号为3至8的学生
select * from students where id between 3 and 8;

查询编号是3至8的男生
select * from students where (id between 3 and 8) and gender=1;

空判断(重点)
查询没有填写身高的学生
select * from students where height is null;

查询填写了身高的学生
select * from students where height is not null;

优先级
优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
and比or先运算,如果同时出现并希望先算or,需要结合()使用

排序(重点)

select * from 表名 oder by 列1 asc|desc [,列2 asc|desc,…]

查询未删除男生信息,按学号降序
select * from students where is_delete=0 and gender=1 order by id desc;

查询未删除学生信息,按名称升序
select * from students where is_delete=0 order by name asc;

查询所有学生信息,先按照年龄从大到小排序,当年龄相同时,按照身高从高到矮排序
select * from students where order by agedesc,height desc;

聚合函数
查询学生总数 用到count()
select count(*) from students;

最大值 max()
查询女士的编号最大值
select max(id) from students where gender=2;

最小值 min()
查询未删除的学生最小编号
select min(id) from students where is_delete=0;

求和 sum()
查询男生的总年龄
select sum(age) from students where gender=1;

平均值 avg()
查询未删除女士的编号平均值
select avg(id) from students where is_delete=0 and gender=2;

分组查询(重重点) 就是列去重
查询性别多少分组
select gender from students group by gender;

分组后查询用group_concat()
查询几种性别,每种性别的人名字
select gender,group_concat(name) from students group by gender;

分组后 + 集合函数
查询有几种性别,每个性别的人数量各是多少
select gender,count(gender) from students group by gender;

查询有几种性别,每个性别的年龄分布
select gender,group_concat(age) from students group by gender;

查询有几种性别,每种性别人数,平均年龄,以及包含哪些人
select gender,count(gender),avg(age),group_concat(name) from students group by gender;

用group by + having
查询有几种性别,每种性别人数,平均年龄,以及包含哪些人,数量大于2才显示
select gender,count(gender),avg(age),group_concat(name) from students group by gender having count(gender)>2;

group by + with rollup
查询有几种性别,每种性别人数,平均年龄,以及包含哪些人,并统计总和.

select gender,count(gender),avg(age),group_concat(name) from students group by gender with rollup;

获取部分行
当数据量过大时,在一页中查看数据麻烦
可以将表理解为二维数组,对其切片,先取行后取列
查询前3行男生信息

select * from students where gender=1 limit 0,3;
除去where条件,仅对行进行切片

分页
已知每页显示m条数据,当前显示n页

求总页数:
查询总条数p1
使用p1 除以m得到p2
如果整除则p2为总页数
如果不整除则 p2+1为总页数

mn-m(n-1) 第n页的数据
mn总数据
n页之前的数据m(n-1)
求第n页的数据

limit 第一个参数是之前的所有数据,就是前一页的数据加之前的数据,
第二个参数是当前页显示的条数

select * from students where gender=1 limit m(n-1),m

连接查询:
内连接查询
右连接查询
左连接查询

select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
例1:使用内连接查询班级表与学生表

select * from students inner join classes on students.cls_id = classes.id;
例2:使用左连接查询班级表与学生表

select * from students left join classes on students.cls_id = classes.id;
例3:使用右连接查询班级表与学生表

select * from students right join classes on students.cls_id = classes.id;
内连接以两张表共有内容为主,左连接以左边的表的内容为主,右边为辅,左表有右表没有的内容显示Null
类似权重,优先级的问题
右连接相反
例4 查询学生姓名及班级名称

select students.name,classes.name from students left join classes on students.cls_id = classes.id;
select students.name,classes.name from students inner join classes on students.cls_id = classes.id;

两个查询区别,第一个查询数量依据主表,副表没有的数据显示null,第二个共有数据

自关联
例如 省 市 县说明:
* 因为省没有所属的省份,所以可以填写为null
* 城市所属的省份pid,填写省所对应的编号id
* 这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id
* 在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息

create table areas(
    aid int primary key,
    atitle varchar(20),
    pid int
);

查询省的名称为”山西省”的所有城市

select city.* from areas as city inner join areas as province
on city.pid=province.aid where province.atitle=’山西省’;


查询市的名称为“广州市的”所有区县

select dis.* from areas as dis inner join areas as city on dis.pid=city.aid where city.atitle="广州市";

子查询
在一个select 语句中,嵌入了另外一个select语句,那么被嵌入的select 语句称之为查询语句

主查询
主要查询的对象,第一条select语句
主查询和子查询的关系
* 子查询是嵌入到主查询中
* 子查询是辅助主查询的,要么充当条件,要么充当数据源
* 子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类
* 标量子查询: 子查询返回的结果是一个数据(一行一列)
* 列子查询: 返回的结果是一列(一列多行)
* 行子查询: 返回的结果是一行(一行多列)
标量子查询

  1. 查询班级学生平均年龄
  2. 查询大于平均年龄的学生
    查询班级学生的平均年龄
select * from students where age > (select avg(age) from students);

列级子查询
查询所有学生在班里的所有班级名字

找出学生表中所有的班级 id
找出班级表中对应的名字

select name from classes where id in (select cls_id from students);

行级子查询
查找班级年龄最大,身高最高的学生
* 行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素

select * from students where (height,age) = (select max(height),max(age) from students);

子查询中特定关键字使用
* in 范围
格式: 主查询 where 条件 in (列子查询)

SELECT select_expr [,select_expr,...] [
FROM tb_name
[WHERE 条件判断]
[GROUP BY {col_name | postion} [ASC | DESC], ...]
[HAVING WHERE 条件判断]
[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
[ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]



select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit start,count
    * 执行顺序为:
    * from 表名
    * where ....
    * group by ...
    * select distinct *
    * having ...
    * order by ...
    * limit start,count
* 实际使用中,只是语句中某些部分的组合,而不是全部
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值