创建数据库
create database 数据库名
创建表
create table 表名(
列1 类型 [约束],
列2 类型 [约束],
…
);
查看表结构
desc 表名
alter 修改
修改表结构,为表新增一列
alter table 表名 add 列名 列的数据类型
修改表结构 , 修改列名
alter table 表名 change 旧列名 新列名 新列的数据类型
修改表结构 , 更改列的数据类型
alter table 表名 modify 列名 数据类型 ;
修改表结构 , 删除列
alter table 表名 drop 要删除的列名
更改表名
rename table 旧表名 to 新表名;
更改分类表的编码格式
alter table 表名 character set 要修改的编码格式;
删除数据库
drop database 数据库名
删除表
drop table 表名
插入 insert
向表中插入数据的公式 此时values后括号中的数值要和表结构中的数值的个数,类型,顺序一一对应
insert into 表名 values (数值1 ,数值2 ,数值3 ,…);
此时values后括号中的数值要和表名后括号中的数值的个数,类型,顺序一一对应
insert into 表名(列1,列2,列3,…)values (数值1 ,数值2 ,数值3 ,…);
updete 修改
为了不把表中的数据全部修改成一样的数据,我们要加上条件语句where
update 表名 set 列1 = 数据1 ,列2 = 数据2 ,…where id = 1;
delete 删除
为了不把表中的数据全部删除,我们要加上条件语句where FROM关键字不能省略
delete from 表名 where id = 1;
查询用户权限
show grants for 用户名; eg: SHOW GRANTS FOR ‘root’@‘localhost’;
赋予权限 GRANT
将查询表的权限赋予用户
grant select on * . * to 用户名;
收回权限 revoke
将查询表的权限从用户收回
revoke select on * . * from 用户名;
查询表的所有内容 其中*代表通配符 FROM不能省略
select * from 表名;
复制表
create table 新表名 as (select * from 旧表名);
primary key 创建主键 not null 非空约束 unique 唯一约束
单列查询
select 列名 from 表名;
多列查询
select 列名1,列名2 , . . . from 表名;
查询表中所有字段
select * from 表名;
distinct消除冗余
select distinct 列名 from 表名;
使用别名
select 列名1 as 别名1 ,列名2 as 别名2 from 表名;
select 列名1 别名1 ,列名2 别名2 from 表名;
算术运算符(+、-、、/、%) gprice 单价 gnum 数量 gid 编号 box 表名
select 列名,列名列名 from 表名;SELECT gname 商品名称, gprice*gnum 总价格 FROM box;
SELECT (gprice - (SELECT gprice FROM box WHERE gid = 2)) 差额 FROM box WHERE gid = 1;
逻辑运算符(=、<>、!=、<、<=、>、>=)
select*from 表名 where 列名 <>要判断的信息;
SELECT * FROM box WHERE gclass <> ‘手机’; 查询商品表中商品不是手机的商品信息
关系运算符(and or not)
select * from 表名 where 判断条件 and 判断条件 ;
SELECT * FROM box WHERE gclass = ‘手机’ AND gprice >5000; 查询商品表中商品是手机并且价格大于5000
select * from 表名 where 判断条件 or 判断条件 ;
SELECT * FROM box WHERE gclass = ‘手机’ OR gprice >5000; 查询商品表中商品是手机或者价格大于5000商品信息
select * from 表名 where not 判断条件 ;
SELECT * FROM box WHERE NOT gclass = ‘手机’; 查询商品表中商品不是手机的商品信息
group by分组
select 列名1 , count(列名1) from 表名 group by 列名1;
SELECT job 职位, COUNT(job) 个数 FROM newemp GROUP BY job;
having分组条件
select 列名 ,count(列名) from 表名 group by 列名 having count(列名)>范围;
SELECT job 职位, COUNT(job) 个数 FROM newemp GROUP BY job HAVING COUNT(job) > 2;
order by 排序
排序order by(asc升序,desc降序)
select * from 表名 order by 列名1 asc , 列名2 desc;
limit分页
分页
每一页显示多少条数据
显示的第几页
n:当前页码
m:每页显示的数据
select * from 表名 limit (n-1)*m,m;
select * from 表名 limit 3,3;
in操作
in指的是根据一个指定的范围进行数据查询
select * from 表名 where 列名 = 2 , 列名 = 4, 列名 = 6;
select * from 表名 where 列名 in (2,4,6);
范围操作
between…and的主要功能是进行范围的查询
select * from 表名 Where 字段|数值 between 最小值 and 最大值;
select * from 表名 Where 字段|数值 列名 >= 最小值 and 列名 <= 最大值;
模糊查询:like
like可以实现数据的模糊查询操作,如果要想使用like则必须使用如下的两个匹配符号:
“_”:匹配任意的一位符号;
“%”:匹配任意的符号(包括匹配0位、1位、多位)
select * from 表名 where 列名 like ’ % 任意字 % ’ ;
多表
where子句多表查询
不加where条件,会有很多错误数据
select * from 表名1 , 表名2 where 表名1 . 列名1 = 表名2 . 列名2;
join子句多表查询
使用内连接,可以查询出两个表中的所有正确内容
select * from 表名1 inner join 表名2 on 表名1 . 列名1 = 表名2 . 列名2;
内连接(INNER JOIN)
使用内连接,可以查询出两个表中的所有正确内容
select * from 表名1 inner join 表名2 on 表名1 . 列名1 = 表名2 . 列名2;
INNER JOIN 内连接 -> 交集 on
SELECT * FROM box b INNER JOIN boxs s ON b.id = s.id;
左外连接(LEFT JOIN)左外连接会显示两个表都有的数据以及左表中的全部数据
select * from 表名1 left join 表名2 on 表名1 . 列名1 = 表名2 . 列名2;
– LEFT JOIN 左外链接 on
SELECT * FROM box b LEFT JOIN boxs s ON b.id = s.id;
右外连接(RIGHT JOIN)右外连接会显示两个表都有的数据以及右表中的全部数据
select * from 表名1 right join 表名2 on 表名1 . 列名1 = 表名2 . 列名2;
– RIGHT JOIN 右外链接 on
SELECT * FROM box b RIGHT JOIN boxs s ON b.id = s.id;
全外连接(FULL JOIN)
注意:mysql数据库暂时不支持全外连接,但是我们可以通过左外连接和右外连接的集合模拟全外连接
select * from 表名1 left join 表名2 on 表名1 . 列名1 = 表名2 . 列名2;
union
select * from 表名1 right join 表名2 on 表名1 . 列名1 = 表名2 . 列名2;
– 全外连接 FULL JOIN mysql 不支持全连接 但可以模拟全连接
SELECT * FROM box b LEFT JOIN boxs s ON b.id = s.id
UNION
SELECT * FROM box b RIGHT JOIN boxs s ON b.id = s.id;