- 浏览: 95280 次
- 性别:
- 来自: 成都
文章分类
create table bbc(
Name varchar(50) primary key not null,
Region varchar(60),
Area decimal(10),
Population decimal(11),
Gdp decimal(14),
);
insert into bbc values ('中国','亚洲',10,10,10);
insert into bbc values ('美国','北美洲',9,6,3);
insert into bbc values ('巴西','南美洲',13,4,5);
insert into bbc values ('阿根廷','南美洲',6,3,2);
insert into bbc values ('英国','欧洲',7,4,2);
insert into bbc values ('俄罗斯','欧洲',15,5,3);
insert into bbc values ('苏丹','非洲',3,2,1);
insert into bbc values ('日本','亚洲',6,6,2);
insert into bbc values ('南非','非洲',5,3,3);
select * from bbc;
--获得和巴西在同一个地区的所有国家
select * from bbc where region=(
select region from bbc where name='巴西'
)
and name!='巴西'
--给出人口多于俄国(俄罗斯)的国家名称
select * from bbc where population>(
select population from bbc where name='俄罗斯'
)
--给出印度、伊朗所在地区的所有国家的所有信息
select * from bbc where region in
(
select region from bbc where name in('印度','伊朗')
)
select * from bbc where region in
(
select region from bbc where name='印度' or name='伊朗'
)
--给出人均GDP比加拿大多,但少于阿尔及利亚的国家信息
select * from bbc
where gdp/population
between () and ()
--给出GDP比任何欧洲国家都多(只要显示国家名称)
select name from bbc
where population>all(select gdp from bbc where region='欧洲')
或者
select name from bbc
where population>(select max(gdp) from bbc where region='欧洲')
区别:给出GDP比任何一个欧洲国家都多(只要显示国家名称)
--给出每个地区人口最大的国家
select * from bbc a
where a.population=(
select max(b.population) from bbc b
where b.region=a.region
)
所以在实际工作中要用表连接要替换。
思考。
给出地区中所有国家的人口总数大于?的地区
select region
from bbc
group by region
having sum(population)>?
说明:sum(population)不一定要写在select中,
写在sum(population)中只是表示要显示出来。
9思考。
题意:
地区 人口
a 10
a 7
a 2
b 8
b 3
满足条件的只有:
地区 人口
a 10
a 7
都超过2的3倍。
where xxx>(select .... where a.id=b.id)
select * from t_class;
select * from t_class a,t_class b;
select * from t_class;
select * from t_subject;
select * from t_stu;
select * from t_score;
--统计各班有多少人:班级名称,人数
--相关子查询
--通过 表连接 来优化
select c.c_name,
(select count(*) from t_stu s where s.c_id=c.c_id) 人数
from t_class c
t_stu会被查询3次,所以效率低。
一班 4
二班 2
三班 0
体会场景:全校有20个班,你就会被问20次,你是不是 1班/2班/……
的?
通过表连接来优化,优化的原理是两个表都只查询一次。
思考:用内连接对不对?
select c_id,count(*) as 人数
from t_class c join t_stu s on c.c_id=s.c_id
group by c_id
error:列名 'c_id' 不明确。
因为c_id在两个有中都有,所以必须指出是哪个表的c_id。
select c.c_id,count(*) as 人数
from t_class c join t_stu s on c.c_id=s.c_id
group by c.c_id
需要班级名称,怎么办?
select c.c_id,c.c_name,count(*) as 人数
from t_class c join t_stu s on c.c_id=s.c_id
group by c.c_id
必须将c_name放到group by后面,变成分组字段。
select c.c_name,count(*) as 人数
from t_class c join t_stu s on c.c_id=s.c_id
group by c.c_id,c.c_name
如果让3班也出现?
使用左连接。
select c.c_name,count(*) as 人数
from t_class c left join t_stu s on c.c_id=s.c_id
group by c.c_id,c.c_name
错在哪里呢?
因为用left join以后,三班一定会有一条记录,但是不表示有一个学生。
所以必须对学生的信息进行count。
select c.c_name,count(s.s_id) as 人数
from t_class c left join t_stu s on c.c_id=s.c_id
group by c.c_id,c.c_name
在工作中,经常会涉及到多个表连接。
如:查询:班级名称,姓名,科目名称,分数。
方法:
首先在草稿上画出表间关系图,这是最重要的。
然后确定书写的方向:班级表→学生表→成绩表→科目表
2种写法:传统和JOIN
select c_name,s_name,sub_name,score
from t_class c join t_stu s on c.c_id=s.c_id
join t_score sc on s.s_id=sc.s_id
join t_subject sub on sc.sub_id=sub.sub_id
;
select c_name,s_name,sub_name,score
from t_class c, t_stu s ,t_score sc,t_subject sub
where c.c_id=s.c_id
and s.s_id=sc.s_id
and sc.sub_id=sub.sub_id
;
在开发中,由于连接时计算机消耗的资源多,所以要尽量少连接表。
全连接(full join)的效率非常低,所以尽量不要使用。
要掌握多个表(3个表以上)的连接写法。
作业:银行转账
1、简单版
帐户表:帐户ID,帐户名称,余额,密码
2、完整版
帐户表:帐户ID,帐户名称,余额,密码
业务表:业务ID,业务类型,发生金额,发生时间
业务明细表:流水号,业务ID,发生帐户,发生金额,
帐户表:帐户ID,帐户名称,余额,密码
1 a 1000
2 b 100
a向b转账300
业务表:业务ID,业务类型,发生金额,发生时间
10001 转账 300 2012-1-2
业务明细表:流水号,业务ID,发生帐户,发生金额,
2001 10001 1 -300
2002 10001 2 300
同时还要更新帐户表
帐户表:帐户ID,帐户名称,余额,密码
1 a 1000-300
2 b 100+300
转账时一共涉及(3个Insert+2个Update)
发表评论
-
报表相关
2010-07-20 07:02 8321.报表——普通报表是 ... -
动态SQL
2010-06-28 20:36 7681.why——有些时候表明和列名在程序运行的时候才被告诉。 ... -
事务机制
2010-06-26 10:21 7981.概念——多步操作组 ... -
游标(指针)
2010-06-26 10:21 1183*游标可以减少程序与数据库的交互和内存的消耗。 1.游标分类 ... -
练习——oracle数据字典对象
2010-06-22 20:09 868·创建部门表(部门编号,部门名称)和用户表(帐号,姓名,性别, ... -
练习——oracle数据类型
2010-06-22 20:06 707--复合变量tabledeclareType mytabtyp ... -
故障排除
2010-06-19 20:12 5891.故障排除方法与步骤 2.常见故障及原因 ... -
脚本开发
2010-06-19 20:11 892编写自己的数据库执行代码 1.PL(procedural l ... -
Oracle
2010-06-19 20:10 900该数据库在企业里普遍应用 1.Oracle的发展史 ... -
访问权限
2010-06-19 20:09 796阶级性和特权 范例— ... -
数据安全
2010-06-19 20:08 661数据库的数据安全,避免数据泄漏和丢失 -
数据访问优化
2010-04-27 09:41 8282.数据访问优化方法——时间(效率)换空间 2.1:索引优化 ... -
数据备份技术——数据仓库
2010-04-27 09:25 7541.what——可以将数据还原为备份的那个时刻. 2.分类 ... -
练习——学生班级
2010-04-27 08:09 680create table t_class(c_id int p ... -
练习——部门员工表
2010-04-27 07:59 7138create table DEPT( DEPTNO deci ... -
排序——index
2010-04-26 10:26 6911why——对大量数据进行排序,方便查找记录 2.特点 ... -
项目后台的有机组合
2010-04-14 10:58 788——————Dao——>———————DBUtil——— ... -
写服务器运行日志的方法
2010-04-14 10:38 8241:服务器运行后,日志的更新频率很高。方法好还决定了服务器相应 ... -
练习——DOM4J
2010-04-03 22:49 846什么叫XML解析:读或写XML中的内容。 扩展: XM ... -
Dao+DBUtil+Po
2010-04-03 18:57 738界面上的数据来自 1.数据库(Dao)——定义SQL执 ...
相关推荐
Autodyna相关材料参数,对Autodyna中材料进行简要中文概述,提供一定辅助性帮助
1.3实训练习 第2章面向对象设计原则实训 2.1知识讲解 2.1.1面向对象设计原则概述 2.1.2单一职责原则 2.1.3开闭原则 2.1.4里氏代换原则 2.1.5依赖倒转原则 2.1.6接口隔离原则 2.1.7合成复用原则 2.1.8...
2022-2021学年高一历史人民版必修1训练:6.1民主政治的摇篮——古代希腊 .docx
【标题】"过关练——6.1平面向量的概念(人教A版2019)) pdf文档整理.zip" 涉及的是高中数学中关于平面向量的基础概念,这是学习支持向量机、算法、机器学习以及人工智能等领域的基础。在人教A版2019教材中,对这一...
本次我们关注的是PSIM的6.1版本的演示版——"psim6.1_demo_343803238",它为用户提供了对PSIM 6.1核心功能的初步体验。 PSIM 6.1 是该软件系列的一个重要更新,它带来了许多新特性和性能优化。首先,PSIM 6.1 强化...
目 录 1 需求分析 2 1.1 功能需求分析 2 1.2 数据需求分析 2 2 E-R模型设计 4 3 关系模型设计 5 3.1 实体集转化成关系模式 5 3.2 联系集转化成关系模式,并确定参照完整性 5 ...8实训小结 12 9参考资料 13
Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows6.1-KB2533623-x64Windows...
标题中的“KUDA-Shaders v6.1 Legacy_softlyhcb_KUDA6.1Legacy_KUDAv6.1_KUDA-s”指的是一个针对Minecraft游戏的特定版本的 shader 包。Shaders 在 Minecraft 中是一种增强游戏图形表现的技术,通过自定义的光影效果...
标题中的“黑莓手机8830可用 浏览器 opera-mini-6.1”指的是在黑莓8830这款智能手机上可以使用的浏览器版本——Opera Mini 6.1。这款浏览器是专为移动设备设计的,特别是针对黑莓系列手机优化,提供了更便捷的网页...
标题中的"Windows6.1-KB2999226-x86"是指一个针对Windows 7(版本号6.1)32位系统的安全更新。KB2999226是这个更新的独特标识符,通常由微软用于追踪和识别特定的更新或补丁。这个更新旨在解决操作系统中的安全问题...
力控6.1版本破解力控6.1版本破解力控6.1版本破解力控6.1版本破解力控6.1版本破解力控6.1版本破解力控6.1版本破解
本篇文章将详细解析“MATLAB6.1完整版下载”的相关知识点。 首先,MATLAB6.1,也称为R12,是MATLAB历史上的一个重要版本,发布于2001年。相比于后来的版本,它的体积更小,安装包只有几百MB,但这并不意味着其功能...
美国国家标准学会(American National Standards Institute, ANSI)发布了一项重要的标准——ANSI ESD S6.1-2019,专门针对静电放电敏感物品的防护进行了详细规定。本文将深入探讨这一标准的核心内容及其在实际应用...
Websphere 6.1 资料集涵盖了关于IBM的Websphere Application Server (WAS) 6.1版本的全面知识,包括安装、配置和实用操作等多个方面。Websphere是IBM提供的一个强大的企业级Java应用服务器,用于部署和管理基于Java...
标题中的“WIN7(32位) 微软WIN CE同步MicrosoftActiveSync6.1”指的是一款在32位Windows 7操作系统上使用的软件,用于与运行Windows CE(一种嵌入式操作系统)设备进行同步的工具——Microsoft ActiveSync 6.1。...
LabVIEW Runtime Engine 6.1是该平台的一个重要组成部分,它允许用户在没有完整LabVIEW开发环境的情况下运行由LabVIEW编译的程序或VI(Virtual Instruments)。 **LabVIEW Runtime Engine的基本概念:** LabVIEW ...
力控6.1破解文件
EhLib 6.1 Build 6.1.129最新版,从官网下载的,可支持最新版本Delphi XE4
《PyPI官网下载的instancelib-0.3.6.1.tar.gz——探索Python分布式云原生库》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了无数的开源Python库,便于开发者们下载和安装。在本文中,我们将...
### Unicode字符集 V6.1 知识点详解 #### 一、Unicode标准简介 Unicode是一种全球性的字符编码标准,旨在提供一个通用的字符集,支持世界上几乎所有语言的文字表示。Unicode标准由Unicode联盟制定和维护,它定义了...