Java学习篇之SQL语句操作数据表中的数据(查)

来源:互联网 发布:扫描仪识别软件 编辑:程序博客网 时间:2024/05/28 05:13

  SQL语句的操作无外乎增删改查,其中“查”就占据了半壁江山……下面的代码中分别是一些实例(去除重复记录、查询过程中重新命名列、模糊查询、查询排序、聚合函数、分组求和等),结合具体的需求来掌握语句的写法效果会更好,个人见解~~~

CREATE TABLE zhangmu(    -- 账务ID    id INT PRIMARY KEY AUTO_INCREMENT,    -- 账务名称    zname VARCHAR(200),    -- 金额    zmoney DOUBLE );RENAME TABLE   zhangmu TO zhangwu;INSERT  INTO zhangwu(id,zname,zmoney) VALUES (1,'吃饭支出',247);INSERT  INTO zhangwu(id,zname,zmoney) VALUES (2,'工资收入',12345);INSERT  INTO zhangwu(id,zname,zmoney) VALUES (3,'服装支出',1000);INSERT  INTO zhangwu(id,zname,zmoney) VALUES (4,'吃饭支出',325);INSERT  INTO zhangwu(id,zname,zmoney) VALUES (5,'股票收入',8000);INSERT  INTO zhangwu(id,zname,zmoney) VALUES (6,'打麻将支出',8000);INSERT  INTO zhangwu(id,zname,zmoney) VALUES (7,NULL,5000);/*查询所有列的数据格式;select * from 表名*/SELECT * FROM zhangwu;/*查询去掉重复记录DISTINCT 关键字 跟随列名且只查一列*/SELECT DISTINCT zname FROM zhangwu;/*查询重新命名列as 关键字仅仅是查询的临时改名as可以省略使用时机:在下面做数学运算的时候用为了显示的时候更方便的看*/SELECT zname AS 'name' FROM zhangwu;/*在查询数据中,直接做数学计算列  对数字进行计算*/SELECT zname ,zmoney+1000 AS 'sum' FROM zhangwu;/*查询所有的吃饭支出*/SELECT * FROM zhangwu WHERE zname='吃饭支出';-- 查询金额大于1000SELECT * FROM zhangwu WHERE zmoney>1000;-- 查询金额在500-5000之间的SELECT * FROM zhangwu WHERE zmoney >=500 AND zmoney<=5000;-- ========================================================================-- 将上述方法改造成between  and 方式SELECT * FROM zhangwu WHERE zmoney BETWEEN 500 AND 5000;-- 金额是1000,3500,5000其中一个SELECT * FROM zhangwu WHERE zmoney=1000 OR zmoney=3500 OR zmoney=5000;-- 改造成in方式SELECT * FROM zhangwu WHERE zmoney IN(1000,3500,5000);-- ========================================================================-- 模糊查询/*like 模糊查询  配合通配符*/-- 查询所有的支出  %代表0个或者多个字符SELECT * FROM zhangwu WHERE zname LIKE '%支出%';-- 支出前只有一个字符SELECT * FROM zhangwu WHERE zname LIKE '_支出%';-- 以支出打头SELECT * FROM zhangwu WHERE zname LIKE '支出%';-- 查询账务名字,五个字符的(写五个下划线)SELECT * FROM zhangwu WHERE zname LIKE '_____';-- 查询账务名不为空的(使用)SELECT * FROM zhangwu WHERE zname IS NOT NULL;-- 不建议使用下面的方式SELECT * FROM zhangwu WHERE NOT (zname IS  NULL);-- ========================================================================-- 查询排序/*查询,对结果集进行排序升序,降序,对指定的列排序order by 列名 [desc][asc]desc 降序asc 升序(默认,可以不写)一般不对中文进行排序,否则结果无法预知*/-- 查询账务表,价格进行升序SELECT * FROM zhangwu ORDER BY zmoney;-- 查询账务表,价格进行降序,如果价格相同,给出次要条件,以前边的为主SELECT * FROM zhangwu ORDER BY zmoney DESC,id DESC;-- 查询账务表,查询所有的支出,对金额降序排列-- 切记:先过滤条件 where 查询的结果再排序SELECT * FROM zhangwu WHERE zname LIKE '%支出%' ORDER BY zmoney DESC;-- ========================================================================-- 聚合函数/*使用聚合函数进行查询计算*/-- count求和,对表中的数据的个数进行求和 count(列名)-- 查询统计账务表中,一共有多少条数据-- 查询过程中算上空,但是不算上null;   (注意:null和空是不一样的)SELECT COUNT(*)  AS 'count' FROM zhangwu;-- sum 函数求和,对一列中数据进行求和计算  sum(列名)-- sum求和的时候如果是空值或者是非数值型,它会默认它们是0-- 对账务表查询,对所有的金额求和计算SELECT SUM(zmoney) FROM zhangwu;-- 还可以加入条件求和:统计所有支出的总金额SELECT SUM(zmoney) FROM zhangwu WHERE zname LIKE '%支出%';-- avg 函数,计算一个列所有数据的平均数SELECT AVG(zmoney) FROM zhangwu;-- max 函数,对某列数据获取最大值(还有MIN函数,都不常用)SELECT MAX(zmoney) FROM zhangwu;-- =====================================================================-- 分组求和/*查询各类支出,分别计算总额思路:必须使用sum聚合函数对金额进行求和按照zname中的内容,重复的内容求和故引出新的查询方式——分组查询group by (被分组的列名)必须跟随聚合函数select 查询的时候,被分组的列,要出现在select 选择列的后面*/SELECT SUM(zmoney),zname FROM zhangwu GROUP BY zname;-- 对zname内容进行分组查询求和,但是只要支出-- 下面的代码容易造成阅读上的混淆SELECT SUM(zmoney),zname FROM zhangwu WHERE zname LIKE '%支出%'GROUP BY znameORDER BY SUM(zmoney) DESC;-- 用as改一下SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'GROUP BY znameORDER BY getsum DESC;-- 对zname内容进行分组查询求和,但是只要支出,显示金额大于5000-- 结果集是分组查询后再次进行筛选,不能使用where-- 分组后再次过滤,关键字 having 必须放在group by后边SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'GROUP BY zname HAVING getsum>5000;

0 0