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;

以上原文链接:https://www.cnblogs.com/xueershewang/p/9258955.html

posted @ 2020-04-27 15:39  Cate_Hunter  阅读(221)  评论(0编辑  收藏  举报