图像处理过程中,有大量的数据数据需要记录,所以先记录一下数据库操作的一些基本命令
1、数据库管理工具Nvicat--SQL;PL/SQL--Orcale
2、数据库的基本组成
表:类似excel中的sheet页,Table,由行和列组成(row和line)
注:列有时候也可以表示成row
字段:表的列名称(垂直方向),几个字段几列
记录:表的行(水平方向),其中数据以行为单位进行数据读写,一条记录代表一行,几行表示几个数据
3、增(插入)(末尾添加)
INSERT into 表名称 valuse(值1,值2...)
INSERT INTO 表名称(列1,列2,列3,列4)values
(列1value1,列2value1,列3value1,列4value1);
(列1value2,列2value2,列3value2,列4value2);
(列1value3,列2value3,列3value3,列4value3);
(列1value4,列2value4,列3value4,列4value4);
...
若是字符串,应用’‘括起来
从一个表中插入到另外一个表中
INSERT INTO 表名称1 SELECT 列1,列2,列3,列4... FROM 表名称2 WHERE 列名=’运动户外‘
将表2的某列值为远动户外的数值的列1,列2,列n的值批量插入表1
注: insert 中的列1,列2要和表1中的列匹配上
4、删
DELETE FROM 表名称
DELETE FROM 表名称 WHERE 列名=’运动户外‘
将某表中列名=运动户外的数据全部删除
5、改(修改)
UPDATE 表名称 set 条件
a、UPDATA 表名 set url=100" WHERE 列名=’运动户外‘
将某表某列中数据=运动户外的数据的url的值全都改成100(可能之前url的值是50或其他)
6、查询
a、SELECT 列名1,列名2 ... FROM 表名 Where 条件;
b、SELECT* FROM 表名;(*表示所有列)
c、SELECT *FROM 表名 LIMIT 10 (LIMIT 限制前10行的数据)
7、删除某一个字段
ALTER TABLE 表名 DROP COLUMN 列名
8、增加某个字段
ALTER TABLE table_name ADD column_name datatype
9、删除表名
DROP TABLE IF EXISTS 表名
如果这个表名存在,则删除此表
10、创建表名
CREAT TABLE 表名(列1 类型,列2 类型,列3 类型,... ,PRIMARY KEY (列1)) ENGING=InnoDB DEFAULT CHARSET=utf8;
类型:int,varchar,timestamp(时间类型)
11、排序,ORDER BY
如果有where语句,要接在where 后面,默认升序排列
DESC:降序
DESC 表名
对某表进行降序排列
ASC:升序
SELECT <列名1>,<列名2>, FROM <表名> ORDER BY <列名1>,<列名2> DESC
SELECT <列名1>,<列名2>, FROM <表名> ORDER BY <列名1> DESC ,<列名2> ASC;
对某表根据列1升序,列2降序排列
(嵌套循环,从大到小排列1,列1相等的情况下从小到大排列2)
12、WHERE :条件语句
WHERE 必须跟在表名后面,即FROM后面
WHERE中可以使用not, in,like等关键字
SELECT * WHERE 表名 WHERE 列名<>'运动户外'
<>这里指的是不等于
NOT:取反
SELECT * WHERE 表名 WHERE not 列名='运动户外'
也是筛选表名表列中不等于运动户外的数据
IN:where 中取多个值
SELECT * WHERE 表名 WHERE 列名 IN ('名称1’,‘名称2’,‘名称3’)
将某表某列中等于名称1,2,3的值取出来
LIKE:where 中搜做列中的指定模式
SELECT * WHERE 表名 WHERE 列名='%运动户外%'
%:和like类似,这里指的是能够匹配到,只要包含这个运动户外就会被查找到
SELECT * WHERE 表名 WHERE 列名 LIKE '%运动户外%'
注:%是通配的意思,
运动户外%,表示以运动户外开头,后面不管是什么内容
%运动户外,表示以运动户外结尾,前面不管是什么内容
%运动户外%,表示以运动户外中间,前后不管是什么内容
13、去重
SELECT DISTINCT 列名 FROM表名
SELECT count(DISTINCT 列名) FROM 表名
计算某表某列去重后的数量
14、SQL中的函数运算
eg:计算总和
select sum(列名) from 表名;
计算某表某列的总和
eg:计算平均
select avg(列名) from 表名;
计算某表某列的平均
eg:计算最小值
select min(列名) from 表名;
计算某表某列的最小值
eg:计算标准差
select stddev(列名) from 表名;
计算某表某列的最小值
15、数据进行分类汇总
SELECT <列名1><列名2> FROM 表名 GROUP BY <列名1><列名2>
GROUP BY 指定的列称为聚合键或分组列,where 语句需要在GROUP BY前面
分类汇总:
SELECT 列名1 AS ‘ 列名x’ ,COUNT(*) AS '列名Y' FROM 表1 GROUP BY 列名1;
GROUP BY 的类名一定会出现在 SELECT 的列名里
SELECT 列名1,sum(列名2) as 列名x FROM 表名 GROUP BY 部门名称;
结果变成两列,一列仍是部门名称,另一列是列名X,结果是 部门名称相同的列名2的和
FROM test1.sheet1(test1是数据源,sheet1是表名)
SELECT 列名1,sum(列名2) as 列名x FROM 表名 GROUP BY 部门名称 ORDER BY 列名2 DESC;
//分类后重命名后排序
SELECT 列名1,sum(列名2) as 列名x FROM 表名 where 列名2>0 GROUP BY 部门名称 ORDER BY 列名2 DESC;
//筛选>0的数据后分类重命名后排序
SELECT 列名1,sum(列名2) as 列名x FROM 表名 GROUP BY 部门名称 HAVING 列名X>100 ORDER BY 列名2 DESC;
//数据分类重命名后进行筛选(利用HAVING)排序
16、联表查询(JOIN,两个表中必须有相同数据)
内连接:返回两个表的交集,
INNER JOIN,ON
SELECT *FROM a_table a INNER JOIN b_table b ON a.a_id=b.b_id;
左连接:左表全部显示,右表只显示符合搜索条件的记录,没有匹配上的置为null,
LEFT JOIN ,ON
SELECT * FROM a_table a LEFT JOIN b_table b ON a.a_id=b.b_id;
SELECT a.*,b.*FROM 表名1 AS a INNER JOIN 表名2 AS b ON a.工作地点=b.城市名称
eg:
SELECT a.*,b.*FROM 表名1 AS a LEFT JOIN 表名2 AS b ON a.工作地点=b.城市名称
//将表1命名为a,表2命名为b,选择全部,将a中的工作地点和b中的城市名称匹配,左连接到表a
即a的列名在前,b的类名在后
右连接:右表全部显示,左表只显示符合搜索条件的记录,没有匹配上的置为null,
RIGHT JOIN ON
SELECT * FROM a_table a RIGHT OUTER JOIN b_table ON a.a_id=b.b_id;
SELECT a.*,b.*FROM 表名1 AS a LEFT JOIN 表名2 AS b ON a.工作地点=b.城市名称
//将表1命名为a,表2命名为b,选择全部,将a中的工作地点和b中的城市名称匹配,右连接到表b
即b的列名在前,a的列名在后
总结:
数据库命令书写顺序:
SELECT ...FROM ...WHERE ...GROUP BY...HAVING,...ORDER BY