SELECT [ALL/DISTINCT] select-list FROM table_names [WHERE condition AND | OR condition…] [GROUP BY column, [, column…]] [HAVING conditions]
[ORDER BY column [ASC | DESC], column [ASC | DESC]]
现在我们以“朝阳贸易公司订购系统数据库”为例,详细介绍Select语句的使用:(记下,这是我们“数据库考试”的主要内容..)
一、简单查询
1.检索订单主表表中所有的信息。格式:
Select * from订单主表
2、只查询订单主表表中指定的属性列Ccode (自己写!)
3、如果要在第2题的查询结果中去掉Ccode重复的记录行,那么可书写为:
Select distinct Ccode from 订单主表 (关于distinct关键字可以参考书上p.51) 4、只查询 customer表中前三条记录
Select top 3 Ccode as 客户编号, cname as 客户姓名 From 客户情况表
(关于 “as 列标题”可以参考p.50倒数第7行)
如果查询时返回的记录有几千条以上,则top n关键字是有意义的。
二、where子句查询
下面将结合where子句进行查询,以及使用like关键字、通配符,以及其它条件表达式:
5. 在产品表中检索产品价格在1000.00到1600.00之间的产品信息,其SQL语句为:
select * from产品表 where rate>=1000 and rate<=1600 (rate是产品价格属性名)
以上是以比较运算符来查询的,我们也可用between and 来查询。(请把书翻到p.51,这里有一张“where子句常用的查询条件”表) SELECT * FROM 产品表
where rate between 1000 and 1600 (可以演示….)
在这里要求:如果会用between and关键字查询,就要求会用in关键字查询,例如:
select * from 订单明细表 where orderno in('0084/99','0430/99') (谁来读一下….)
select * from 订单明细表
where orderno not in('0084/99','0430/99') 6.从产品表中查询产品代号是“RKSK-T”(我们到资料中去查一下,该产品的名称是什么?)信息,语句如下:
SELECT * FROM 产品表 WHERE itemcode='RKSK-T' 问题的提出:如果用户想查一下“帆布包”,不考虑它的颜色,则就要用到like运算符(请把书翻到p.53),其格式为:
SELECT * FROM 产品表 WHERE itemcode like 'RKSK%'
除了理解p.53的两个通配符“_”和“%”外,还要知道p.的方括号中的字符是如何匹配的,如下:
select * from 客户情况表 where ccode like 'B[CG]_' (谁来说一下?)
如果要查一下所有不姓“王”的客户的所有情况,则该SQL语句该怎么写呢?
三、对查询结果排序
p.55
7.对查询结果进行排序是通过order by子句实现的,大家可以到书上看一下…..。
升序和降序的两个关键字是ASC和DESC,默认情况结果是按升序排的。看以下例子…
8.select * from 产品表 where itemcode like 's%' order by rate desc 我们大家一起来看一下p.56例28….(谁…?) 四、使用计算函数汇总数据
要求掌握书上的(p.56): count(*) ……. Count(<列名>) Sum(<列名>)
AVG(<列名>) max(<列名>) min(<列名>) 举例如下:
9.SELECT avg(rate) as 平均价格 FROM 产品表 10.SELECT min(rate) as 最低价格 FROM 产品表 11.SELECT count(*) as 客户总数 FROM 客户情况表 12.select sum(qty) as 'RKSK-B产品总量' from 订单明细表 where itemcode='RKSK-B'
(列名中因为有“-”,所以必须加上单引号) 五、对查询结果进行分组计算(p.57)
对查询结果进行分组计算是通过group by子句来实现的,大家可以到书上看一下…(p.57)..。
我们来举个例子:
13.在订单明细表中,按每一类产品进行分类并求出各类产品的总数量,参考以下Sql语句:
select itemcode as 产品代号,sum(qty) as 产品数量总和 from 订单明细表 group by itemcode
结果为:
(可以自己做一遍….)
再来看一个例子(有点类似p.57例35,不过书上还可以统计平均成绩):
14.查询每个客户发出的订单数:
SELECT Ccode as 客户代号,count(*) as 订单数 from 订单主表 group by ccode
六、多表连接查询(p.58)
前面介绍的查询都是单表查询,但有时候我们需要从多个表中获取信息。例如,就说第刚才讲的第14条SQL语句,如果想看客户名呢?怎么办?但又不能把客户信息放到“订单主表”中,为什么?(要请同学们来说了…)
15.从“客户情况表”和“订单主表”查询信息,SQL语句为: select 客户情况表.cname,订单主表.orderno from 客户情况表 inner join 订单主表 on 客户情况表.ccode=订单主表.ccode 请比较书上的p.58倒数第9行….
看书上p.59例38…..一般要指定列,如果用星号,则…(你发现了什么?)
进一步介绍(p.60):
引入别名,格式是: 原表名 as 表别名
16.用别名重写第15条SQL语句(从形式上可以简洁的多)。 select a.cname,b.orderno from 客户情况表 as a inner join 订单主表 as b on a.ccode=b.ccode
17.但是,如果要求给出更详细地的信息组合,即从更多张表中查询信息,该如何写呢?可看p.60中
从客户情况表、订单主表、订单明细表这三张表中查询信息,要求列出客户名、订单号、产品代号、产品数量。
SELECT a.cname as 客户名, b.orderno as 订单号,c.itemcode as 产品代号,c.qty as 数量
FROM (客户情况表 AS a INNER JOIN 订单主表 AS b ON a.ccode=b.ccode) inner join 订单明细表 as c on b.orderno=c.orderno
(不会弄错的关键是把握主键和外键这条主线…)
七、子查询(p.62) 子查询的定义: 问题的提出:
在产品表中想查询一下那些产品价格高于平均产品价格的商品,该如何写呢?问题是:平均价格不知道。可以这样来看,先用一个select语句求出平均价格,然后… SELECT * FROM 产品表
WHERE rate>(select avg(rate) from 产品表);
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务