一、创建,删除,更新表
create table product(
product_id char(4) not null,product_name varchar(100) not null,product_type varchar(32) not null,sale_price integer default 0,purchase_price integer,regist_date date,primary key(product_id));
--创建表格,主键为product_id,sale_price设置了default 0,故它的默认值为0
drop table product;
--删除表格
alter table product
add column product_name_pinyin varchar(100);
--添加列
alter table product
drop column product_name_pinyin;
--删除列
alter table product
rename to productbk;
--表的重命名
二、查询基础select,where
select product_id
as "商品编号"
from product;
--取中文别名
select "商品"
as string,product_id
from product;
--同时取常数与列
select distinct product_id
from product;
--去重
/*多行注释,
不会执行。*/
三、运算符与括号
NULL与任何值运算后仍然是NULL;
select *
from t_hh
where (not value and quality <> 192;
select *
from t_hh
where not (value and quality <> 192);
--括号内的语句优先执行
四、函数与distinct去重
select count(*)
from product;
--查询行数
select count(purchase_price)
from product;
--查询purchase_price中的非空行数
select sum(sale_price),avg(purchase_price),max(sale_price),min(purchase_price)
from product;
--求和,求均值,求最大值,求最小值
select count(distinct product_type)
from product;
--计算product_type种类数
五、group by分组
select product_type,count(*)
from product
group by product_type;
--按照product_type分组,但注意select后面的列或值必须随product_type变化而变化
select product_type,purchase_price
from product
group by product_type,purchase_price;
--可以按照两个列检索
书写顺序:select,from,where,group by,having
执行顺序:from,where,group by,select
group by中不能使用别名,where中不可以使用函数,having中可以筛选函数值
六、having子句
select groupid,state
from tobtask_feedback
group by groupid,state
having count(groupid) > 10;
--筛选出数量大于10的groupid与state的组合,注意,此处的having字句后的字段必须从出现在group by后的字段中选取
七、order by子句
select groupid,state
from tobtask_feedback
order by groupid,state;
--按照groupid排序的条件下,在groupid的相同值下再按照state排序,注意,order by可以使用别名,也可以使用select未选择的列
八、insert into填充数值
insert into product(product_id,product_name,product_type,sale_price,purchase_price,regist_date) values('0001','T恤','衣服',1000,500,'2009-09-20');
--填充数值
insert into product
values('0002','打孔器','办公用品',500,320,'2009-09-11');
--填充全列数值时,可以省略列清单
insert into product
values('0003','运动T恤','衣服',4000,2800,null),('0004','菜刀','厨房用具',3000,2800,'2009-09-20'),('0005','高压锅','厨房用具',6800,5000,'2009-09-15');
--填充多个值时,只需用括号与逗号隔开,插入null的直接在values中对应位置写入null,但创建表时不能设置not null约束
insert into product
values('0007','擦菜板','厨房用具',default,790,'2009-04-28');
--如果创建表时,对列设置了default值,在values中添加default可以自动插入默认值,这叫显式默认值
insert into product(product_id,product_name,product_type,purchase_price,regist_date)
values('0007','擦菜板','厨房用具',790,'2009-04-28');
--如果不对该列填充,会自动插入默认值,这叫隐式默认值
insert into product
values('0007','擦菜板','厨房用具',default,790,'2009-04-28');
--如果创建表时,未对该列设置default值,在values中对其添加default会自动插入null
insert into productcopy(product_id,product_name,product_type,sale_price,purchase_price,regist_date)
select product_id,product_name,product_type,sale_price,purchase_price,regist_date
from product;
--将product表中的内容复制给productcopy表
create table producttype(
product_type varchar(32) not null,sum_sale_price integer,sum_purchase_price integer,primary key (product_type));
--创建producttype表
insert into producttype(product_type,sum_sale_price,sum_purchase_price)
select product_type,sum(sale_price),sum(purchase_price)
from product
group by product_type;
--利用product中各列的函数值对新表producttype进行填充
create table temp(employee_id char(4),employee_name varchar(100),salary integer,bonus integer);
insert into temp values('0001','tom',11000,25000);
delete from temp;
--删除表中的行数据,但保留表的结构,即保留表的列
drop table temp;
--直接删除表格
delete from productcopy where sale_price > 3000;
--删除sale_price>3000的行,注意,delete不能使用order by,having与group by 子句
truncate productcopy;
--删除productcopy表中所有的行,速度比delete更快
update productcopy set regist_date = '2009-10-10';
--更新regist_date为常数'2009-10-10'
十、一些实际操作
SELECT program_name, f_datetime, f_value
FROM public.kyq_10min_all where f_datetime between to_date('2021-04-04 00:00:00','YYYY-mm-dd hh24:mi:ss')
and to_date('2021-05-10 23:59:59','YYYY-mm-dd hh24:mi:ss')
and to_char(f_datetime,'hh24:mi:ss') between '09:00:00' and '21:00:00';
--选择出2021-04-04 00:00:00到2021-05-10 23:59:59这个时间段中,每天里09:00:00到21:00:00这个时间段的数据