数据库实际查询操作回顾(五)

回顾之前学习数据库的相关操作,复习时顺便记录下,以便以后自己可以再次查看!!!

/*

分组数据

*/

(1)select count(*) as num_prods
        from products
        where vend_id = 1003;//返回供应商1003提供的产品数目

(2)select vend_id, count(*) as num_prods
        from products
        group by vend_id;//返回了以vend_id列为单位,计算各类商品的总数

(3)select vend_id, count(*) as num_prods
        from products

       group by vend_id with rollup;// 使用WITH ROLLUP关键字,可以得到每个分组以 及每个分组汇总级别(针对每个分组)的值


(4)select cust_id, count(*) as orders
        from orders
        group by cust_id
        having count(*) >= 2;//过滤了分组,只有总数大于等于2的分组才能留下了。

/*
注意:
WHERE过滤行,而HAVING过滤分组。
HAVING支持所有WHERE操作符 。
WHERE在数据 分组前进行过滤,HAVING在数据分组后进行过滤。

*/

(5)select vend_id, count(*) as num_prods
        from products
        where prod_price >= 10
        group by vend_id
        having count(*) >= 2;//列出具有2个(含)以上、价格 为10(含)以上的产品的供应商


(6)select vend_id, count(*) as num_prods
        from products
        group by vend_id
        having count(*) >= 2;//返回了具有两个(含)以上的供应商,并且显示产品数目
    

/*
ORDER BY与GROUP BY :
ORDER BY                                        GROUP BY
排序产生的输出                                 分组行。但输出可能不是分组的顺序
任意列都可以使用(甚至 非选择的列也可以使用) 只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要                                      如果与聚集函数一起使用列(或表达式),则必须使用
*/

(7)select order_num, sum(quantity*item_price) as ordertotal
        from orderitems
        group by order_num
        having sum(quantity*item_price) >= 50;//检索总计订单价格大于等于50的订 单的订单号和总计订单价格


(8)select order_num, sum(quantity*item_price) as ordertotal
        from orderitems
        group by order_num
        having sum(quantity*item_price) >= 50
        order by ordertotal;//检索总计订单价格大于等于50的订 单的订单号和总计订单价格,并且按照总计订单的价格排序输出。HAVING子 句过滤数据,使得只返回总计订单价格大于等于50的订单。后,用ORDER BY子句排序输出


/*
 SELECT子句及其顺序 :
 子  句              说  明                是否必须使用
SELECT         要返回的列或表达式                是
FROM           从中检索数据的表           仅在从表选择数据时使用
WHERE          行级过滤                    否
GROUP BY       分组说明                   仅在按组计算聚集时使用
HAVING         组级过滤                    否
ORDER BY       输出排序顺序                否
LIMIT         要检索的行数                 否
*/

/*

使用子查询

*/


(9)select order_num
    from orderitems
    where prod_id = 'TNT2';//返回了含有TNT2的所有订单物品,检索order_num列

(10)select cust_id
      from orders
      where order_num in (20005,20007);//查询含有订单20005和20007的客户ID

(11)select cust_id
      from orders
      where order_num in (select order_num
                                        from orderitems
                                        where prod_id = 'TNT2');//这就是一个子查询,先查询含有TNT2物品的所有订单号,然后再查询含有该订单号的所有客户ID
 

/*
注意:
子查询总是从内到外处理
*/

(12)select cust_name, cust_contact

              from customers

            where cust_id in(10001,10004);//返回了订购物品TNT2的所有客户的ID的客户信息


(13)select cust_name, cust_contact
            from customers
            where cust_id in(select cust_id
                                      from orders
                                      where order_num in (select order_num
                                                                          from orderitems
                                                                          where prod_id = 'TNT2'));//这也是一个子查询,返回了订购物品TNT2的所有客户的ID的客户信息
                  



/*
注意:列必须匹配
在WHERE子句中使用子查询(如这里所示),应 该保证SELECT语句具有与WHERE子句中相同数目的列。

*/

(14)select count(*) as orders
            from orders
            where cust_id = 10001;//对客户10001的订单进行计数

(15)select cust_name,
                      cust_state,
                       (select count(*)
                           from orders
                            where orders.cust_id = customers.cust_id) as orders
           from customers
         order by cust_name;//这条SELECT 语句对customers 表中每个客户返回3列: cust_name、cust_state和orders。orders是一个计算字段, 它是由圆括号中的子查询建立的。该子查询对检索出的每个客户执行一 次。在此例子中,该子查询执行了5次,因为检索出了5个客户
 
 

数据库实际查询操作之相关数据库代码(MySQL必知必会数据库代码)

数据库实际查询操作回顾(八)

数据库实际查询操作回顾(七)

数据库实际查询操作回顾(六)

数据库实际查询操作回顾(四)

数据库实际查询操作回顾(三)

数据库实际查询操作回顾(二)

数据库实际查询操作回顾(一)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库的设计理论 第一节,关系模式的设计问题 一 概念 : 1. 关系模型:用二维表来表示实体集,用外键来表示实体间的联系,这样的数据模型,叫 做关系数据模型。 关系模型包含内涵和外延两个方面: 外延:就是关系或实例、或当前值。它与时间有关,随时间的变化而变化。(主要是 由于元组的插入、删除、修改等操作引起的) 内涵:内涵是与时间独立的,它包括关系属性、以及域的一些定义和说明。还有数据 的各种完整性约束。 数据的完整性约束分为静态约束和动态约束。 静态约束包括数据之间的联系(称为数据依赖),主键的设计和各种限制。 动态约束主要定义如插入、删除和修改等操作的影响。 通常我们称内涵为关系模式。 2. 关系模式:是对一个关系的描述,二维表的表头那一行称为关系模式,又称为表的框架 或记录类型。 关系模式的定义包括:模式名、属性名、值域名和模式的主键。关系模式仅仅是对数 据特征的描述。 关系模式的一般形式为 R ( U , D , DOM , F ) R 是关系名。 U 是全部属性的集合。 D 是属性域的集合。 DOM 是 U 和 D 之间的映射关系,关系运算的安全限制。 F 是属性间的各种约束关系,也称为数据依赖。 关系模式可以表示为: 关系模式 ( 属性名1,属性名2 ,……,属性名n ) 示例 : 学生 ( 学号,姓名,年龄,性别,籍贯 )。 当且仅当 U 上的一个关系 r 满足 F 时 ,r 就称为关系模式 R(U,F)上的一个关系,R是关系的型,r 是关系的值,每个值称为R 的一个关系。 关系数据库模式: 一个数据库是由多个关系构成的。 一个关系数据库对应多个不同的关系模式,关系数据库模式是一个数据库中所有的关 系模式的集合。它规定了数据库的全局逻辑结构。 关系数据库模式可以表示为: S = { Ri < Ui , Di , DOM , Fi > " i = 1,2,…, n } 3. 关系子模式 关系子模式是用户所用到的那部分数据的描述。 外模式是关系子模式的集合。 4. 存储模式 存储模式及内模式。 关系数据库理论的主要内容: (1)数据依赖。 数据依赖起着核心的作用。 (2)范式 。 (3)模式的设计方法。 如何设计一个合理的数据库模式: (1)与实际问题相结合。 泛关系模式:把现实问题的所有属性组成一个关系模式 泛关系:泛关系模式的实例称为泛关系。 泛关系模式中存在的问题: a 数据冗余 b 更新异常,c 插入异常 d 删除异常 。 (2)数据库设计理论: 借助近代代数工具,把抽象的数据理论同实际问题结合起来。 理论基础:数据依赖 (数据的相关性)。 二 , 关系模式及其评价。 1 . 关系数据库设计的核心 : 关系模式的设计。 2 . 关系模式的设计: 按照一定的原则,从数量众多的而又互相关联的数据中构造出一组即能较好的反映现实 世界,而又有良好的操作性能的关系模式。 3. 关系模式的优劣、评价、改进: 冗余度高 修改困难 插入问题 删除问题 这些问题的产生原因是:属性间的约束关系太强,即数据间的依赖关系太强。 解决的方法:将关系模式分解为一组较理想的关系模式。 第二节 函数依赖 一,函数依赖 Functional Dependency 函数依赖是数据依赖的一种,反映属性或属性之间的依存、互相制约的关系,既反映 现实世界的约束关系。 二 , 函数依赖的定义 设 R ( U ) 是属性 U 上的一个关系模式 ,X 和 Y 均为 U = { A1,A2 ,…An} 的子集,r 为 R 的任一关系,如果对于 r 中的任意两个元组 u 和 v ,只要有 U[X] = V[X] , 就有U[Y] = V[Y] ,则称 X 函数决定 Y ,或称Y 函数依赖于X,记作: X Y 。 三 , 函数依赖的语义范畴: 1. 语义:数据所反映的现实世界事务本质的联系。 2.根据语义来确定函数依赖型的存在与否。 3.函数依赖反映属性之间的一般规律,必须在关系模式 F 的任何一个关系 r 都满足约束条件。 回顾概念 键 :由一个或多个属性组成。 设 R (U) 为一个关系模式,F 为 R 的函数依赖集,X 为 属性集U的子集 。 (1)超键 :能唯一标识元组的属性集。 如果 X U F ,则 X 是 R 的超键 。 (2)候选键 :不含有多余属性的超键 a X 是 R 的超键 。 b 且不存在 X 的真子集 Y ,使得 Y U F+ 则称 X 是 R 的候选键 (3)主键 :用户选作元组标识的一个候选键。 (4)主属性:包含任何一个候选键的属性。 (5)非主属性:不包含任何一个候选键的属性。 (6)外键:如果关系 R 的某一个属性组不是该关系本身的候选键,而是另一个关系的候选键,则称该属性组是 R的外来关键码,或称为外键(外码) 。 如何确

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值