SQL学习
sql练习网站:
https://sqlzoo.net/wiki/The_JOIN_operation/zh
where和having的比较
1. where和having都可以使用的场景
select goods_price,goods_name from sw_goods where goods_price > 100
select goods_price,goods_name from sw_goods having goods_price > 100
解释:上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情况下和where的效果是等效的,但是如果我没有select goods_price 就会报错!!因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。
2. 只可以用where,不可以用having的情况
select goods_name,goods_number from sw_goods where goods_price > 100
select goods_name,goods_number from sw_goods having goods_price > 100 //报错!!!因为前面并没有筛选出goods_price 字段
3. 只可以用having,不可以用where情况
查询每种goods_category_id商品的价格平均值,获取平均价格大于1000元的商品信息
select goods_category_id , avg(goods_price) as ag from sw_goods group by goods_category having ag > 1000
select goods_category_id , avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category //报错!!因为from sw_goods 这张数据表里面没有ag这个字段
注意:
where 后面要跟的是数据表里的字段,如果我把ag换成avg(goods_price)也是错误的!因为表里没有该字段,这也是为什么where里不能有聚合函数。而having只是根据前面查询出来的是什么就可以后面接什么。
聚合函数和group by
聚合函数就是例如SUM, COUNT, MAX, AVG等对一组(多条)数据操作的函数,需要配合group by 来使用。
#如:
SELECT SUM(population),region FROM T01_Beijing GROUP BY region; //计算北京每个分区的人数
where和having的执行顺序
where 早于 group by 早于 having
where子句在聚合前先筛选记录,也就是说作用在group by 子句和having子句前,而 having子句在聚合后对组记录进行筛选
以上原文链接:https://blog.csdn.net/yexudengzhidao/article/details/54924471
mysql和oracle建表语句的区别
mysql
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`number` varchar(255) NOT NULL COMMENT '工单编号',
`applicant` varchar(255) NOT NULL COMMENT '工单申请人',
`state` int(1) NOT NULL COMMENT '工单状态',
`count` int(4) NOT NULL COMMENT '个数',
`ctime` varchar(255) NOT NULL,
`depart` varchar(255) NOT NULL COMMENT '部门',
`projectname` varchar(255) NOT NULL COMMENT '项目名称',
PRIMARY KEY (`id`),
UNIQUE KEY `index_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
oracle
---创建表
create table ZHANGSAN.ORDER
(
id NUMBER not null,
number VARCHAR2(255),
applicant VARCHAR2(255),
state NUMBER(1),
count NUMBER(6),
ctime VARCHAR2(30),
depart VARCHAR2(255),
projectname VARCHAR2(255)
)
---为每一行添加注释
comment on column ZHANGSAN.ORDER.number
is '工单编号';
comment on column ZHANGSAN.ORDER.applicant
is '工单申请人';
comment on column ZHANGSAN.ORDER.state
is '工单状态';
comment on column ZHANGSAN.ORDER.count
is '个数';
comment on column ZHANGSAN.ORDER.ctime
is '创建时间';
comment on column ZHANGSAN.ORDER.depart
is '部门';
comment on column ZHANGSAN.ORDER.projectname
is '项目名称';
---指定主键
alter table ZHANGSAN.ORDER
add constraint ID primary key (ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255;