一、创建/删除数据库
1. create database db_name;
2. drop database db_name;
二、创建/删除表
1. use db_name;
2. create table tb_name(字段名1 属性,字段名2 属性...字段名n 属性);
例:mysql> create table student(
-> id int unsigned auto_increment primary key,
-> name varchar(30),
-> sex varchar(3) not null default "nan");
三、增
1.插入单行数据:
insert into 表名(列名1,列名2,列名3,...,列名n) values(值1,值2,值3,...,值n)
注:其中列名列表省略时,值列表必须全部按照表中列的顺序依次指定值,如果不想输入值,必须以NULL或者default代替
2.批量插入数据:
insert into 表名(列名1,列名2,…,列名n)
select 值11 , 值12 , ... from dual union
select 值21 , 值22 , ... from dual union
...
select 值n1 , 值n2 , ... from dual ;
注:每一个select后的值必须与括号中的列名在数量和含义上一一对应;当需要为所有列插入数据时,可省略列名列表。其中dual是Oracle中的一个系统表,用户可以使用但不能删除。dual相当于一个临时的表,用于提供一些计算而来或临时存储的数据。
复制已有表中的数据
insert into 表名(列名1,列名2,…,列名n)
select 列名11,列名12,…,列名1n from 表名1 union
select 列名21,列名22,…,列名2n from 表名2 union …
注:每一个select后的列名必须与括号中的列名在数量和含义上一一对应;当需要为所有列插入数据时,可省略列名列表。
所有增加数据都需commit提交,否则不会存入数据库。
四、删
delete from 表名 where 删除条件
注:先执行from表名,再执行where,然后执行delete。
truncate table 表名
注:属于DDL-数据定义语言的范畴;删除所有数据,但保留表结构;效率高于delete;删除数据;无需使用commit提交数据。
五、改
update 表名 set 列名1=新值1 , 列名2=新值2,… where 更新条件
注:先执行update表名,然后执行where,然后执行set;需要使用commit提交数据。
六、查
select 列名列表 from 表名 where 列条件表达式 group by 分组列表达式 having 分组条件 order by 排序列表达式1 asc/desc,排序列表达式2 asc/desc
注:执行顺序:from、where、group by、having、select、order by;
在使用group by 时,有一个规则需要遵守,即出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中搜索。
#模糊查询:
select 列名列表 from 表名 where 列表达式 like '模式符'
select 列名列表 from 表名 where regexp_like(列名,'[模糊数据]')
#多条件查询:
select 列名列表 from 表名 where 条件表达式1 and/or 条件表达式2
#作列表达式相关的函数:
length(字符串数据或列名):计算字符串中的字符总数
substr(字符串数据或列名,m,n):从字符串中第m个开始连续取n个字符
trim(字符串数据或列名):去掉字符串首尾的空格
upper(字符串数据或列名):将字符串中的字母变为大写
lower(字符串数据或列名):将字符串中的字母变为小写
sysdate:返回系统的当前日期,精确到秒
systimestamp:返回系统的当前时间,精确到微秒
#聚合函数:
count(*):计算所有列整体的总行数
count(列名):计算指定列下非空数据的总行数,重复值也计数
sum(数值型列名):计算数值型指定列下非空数据的总和
avg(数值型列名):计算数值型指定列下非空数据的平均值
max(列名):计算指定列下非空数据的最大值
min(列名):计算指定列下非空数据的最小值
#四舍五入函数:
round(数值数据或列名,小数位数):根据指定小数位数,对数值数据四舍五入
#重新编码函数:
decode(Exp,V1,R1,V2,R2,...Rn):
用于对表达式进行重新编码。当表达式Exp的值为V1时,结果为R1,当表达式Exp的值为V2时,结果为R2,以此类推,如果没有符合条件的值,则decode的最终结果是Rn。
#类型转换函数:
to_char(列名,格式):常用于对日期时间数据转换格式(yyyy、mm、dd、hh、hh24、mi、ss、q季度)
to_number(数据或列名):将数据转换为数值
to_date(数据或列名):常用于将字符串转换为日期
高级查询:
1.并(union、union all)
select 列名列表 from 表1 union select 列名列表 from 表2
select 列名列表 from 表1 union all select 列名列表 from 表2
注:要求多个select后的列名列表必须列数相同、类型兼容、语义相同;
终结果表中的列名以第一个select后的列名为准;
使用all会保留重复行,效率较高。不适用all的union默认具有去重功能。
2.交(intersect)
select 列名列表 from 表1 intersect select 列名列表 from 表2
注:多个select结果集必须具有完全相同的列数,并且各列具有相同的数据类型、相同的语义。
多个表中的列名没有要求,但最终结果表中的列名以第一个select后的列名为准。
3.差(minus)
select 列名表 from 表1 minus select 列名表 from 表2
注:多个select结果集必须具有完全相同的列数,并且各列具有相同的数据类型、相同的语义。
多个表中的列名没有要求,但最终结果表中的列名以第一个select后的列名为准。
4.等值连接:
select 列名列表 from 表1,表2 where 连接条件表达式
select 列名列表 from 表1 cross join 表2 where 连接条件表达式
其中,连接表达式的写法:表名1.列表达式1=表名2.列表达式2
5.自然连接:
select 列名列表 from 表1 natural join 表2
注:自然连接后,结果会自动去掉重复列。
6.内连接:
select 列名列表 from 表1 join 表2 on 表1.列表达式1=表2.列表达式2
注:on表示连接条件,不能替换为where。列表达式同名时不可省略表名。
7.自连接:
select 列名列表 from 表名 表别名1 join 表名 表别名2 on 表别名1.表达式1=表别名2.表达式2
8.外连接:
#左连接
select 列名列表 from 表1 left join 表2 on 表1.列表达式1=表2.列表达式2
使用where的简略写法:
select 列名列表 from 表1,表2 where 表1.列表达式1=表2.列表达式2(+)
注:在非基础表的列名结束处添加“(+)”;可缩小代码长度,但数据源多时难维护。
#右连接:
select 列名列表 from 表1 right join 表2 on 表1.列式=表2.列式
select 列名列表 from 表1,表2 where 表1.列表达式1(+)=表2.列表达式2
#全外连接:
select 列名列表 from 表1 full join 表2 on 表1.列式=表2.列式
9.子查询:
select 列名列表 from 表1 where 列表达式 比较运算符(select 列表达式 from 表2)
注:比较运算符有=、!=、>、>=、<、<=、in、not in等;
列表达式必须同义,且只能写一个列表达式。
select 列名表 from 表1 where exists(select * from 表2 where 列表达式=表1.列表达式)
#单行子查询
单行子查询指返回一个一行一列的数据(子查询可以没查到数据)。
能够使用比较运算符=、!=、>、>=、<、<=、in、not in和谓词exists。
#多行子查询
多行子查询表示子查询会返回多行多列数据(子查询可以没查到数据)。
只能使用比较运算符in、not in和谓词exists,不能使用=、!=、>、>=、<、<=等运算符。
#子查询提供数据源
1.查询数据源:select * from (子查询select语句)
注:子查询外的括号不能省略。
2.建表数据源:create table 表1 as select 列名列表 from 表2
注:相当于导出数据到表。
3.插入数据源:insert into 表1 select 列名列表 from 表2
注:允许重复插入数据,不会覆盖原有数据。
七、其他操作
1、导入sql文件: 创建并进入数据库后执行 source sql文件路径
2、查看表字段:desc 表名;
3、查看表中的所有索引: show index from 表名;
4、查看数据库中的基本信息:s
5、查看数据库字符集:show create database 数据库名;
6、查看表字符集:show create table 表名;
7、mysql帮助手段:?show //查看show的使用方法