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

  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='吃饭支出';

-- 查询金额大于1000
SELECT * 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 zname
ORDER BY SUM(zmoney) DESC;

-- 用as改一下
SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname
ORDER 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;


你可能感兴趣的:(●,数据库,———【SQL基础】,数据库)