无论你是初学数据库的新手,还是许久没接触SQL语句的程序员,亦或是即将面临一场关于数据库的考试的孩子,这十条SQL都将让你受益终生,让你一步一步逐渐将SQL融会贯通。很多数据库的书讲到SQL查询语句时总是让人难以看懂,条理性极差,故本人通过我的学习经历整理了这最经典最重要而且清晰易懂的SQL语句,同时它们也是从难到易排序的。学好这些语句,让你在SQL上从菜鸟变雄鹰~~~~~
我们使用这四张经典的表:
CUSTOMERS:cid,cname,city,discnt(折扣)
AGENTS:aid,aname,city,percent(佣金百分比)
ORDERS:ordno,month,cid,aid,pid,qty(订购商品数量),dollars(商品总价)
PRODUCTS:pid,pname,city,quatity,price
1.最简单的查询:订货记录中所有零件的 pid
select distinct pid from orders ;
2.有查询条件的:查询顾客cid=c05订购的货物pid
select distinct pid from orders where cid='5' ;
3.连接:(1)定了货物 p01的顾客名字
select pname from CUSTOMERS,Orders
where CUSTOMERS.cid = Orders.cid and Orders.pid = 'p01' ;
再来一个两次连接的(3个表):
(2)通过名字为‘寡人无疾’的代理商订货的顾客姓名
select cname from CUSTOMERS,Orders,AGENTS
where CUSTOMERS.cid = ORDERS.cid and ORDERS.aid = AGENTS.aid
and AGENTS.name = '寡人无疾' ;
4.别名:至少被两个人订购了的产品pid:
select distinct o1.pid from ORDERS o1, ORDERS o2
where o1.pid=o2.pid and o1.pid<o2.pid;
如果没有o1.pid<o2.pid 则会每个产品出现两次噢
5.量化查询:佣金百分率最小的代理商aid:
select aid from AGENTS
where percent <=all(select percent from AGENTS);
6.集合函数查询:(1)产量 p03 的订购总量:
select sun(qty) as total from ORDERS where pid = 'p03' ;
注:as total意思是用了sun函数得到结果显示在total这个新的列上
(2)顾客居住的城市数量
select count(city) from CUSTOMERS;
注:这句话查询出的城市是包括重复的城市名的
7.子查询,in:订购了被代理商 a06 订购过的产品的顾客 cid :
select distinct cid from ORDERS
where pid in (select pid from Orders where aid = 'a06') ;
释:selec查询的结果可以作为集合放入另外的select语句
8.exists,in,连接,=any四种方法的等价形式:订购了产品 p01 的顾客所在city
连接: select distinct city from CUSTOMERS c,ORDERS o
where o.cid = c.cid and o.pid = 'p01' ;
in: select distinct city from CUSTOMERS
where cid in (select cid from ORDERS where pid = 'p01') ;
exists: select distinct city from CUSTOMERS c
where exists (select * from ORDERS where cid = c.cid and pid = 'p01')
=any:select distinct city from CUSTOMERS
where cid = any (select cid from ORDERS where pid = 'p01') ;
注:因为exists正向查询不是必须的而且容易出错,故不专门介绍了(但是not exists有时确实必要的)
9.having:被某代理商订购量超过1000的某种商品的pid和aid以及总量
select pid,aid,sun(qty) as total from ORDERS
group by pid,aid
having sun(qty)>1000 ;
注:group by 是按什么排序的意思,having则允许在选择条件里使用集合函数值作为条件。另外记得如果要用having语句必须有group
by 噢。
10.双重否定(not exists):所有顾客都订购过的产品的编号(pid):
select pid from ORDERS
where not exists(
select* fromPRODUCTS
where not exists(
selectpid fromORDERSwhere
pid = PORUCTS.pid
)
) ;
此句意思是:不会有 有顾客没买的的商品 存在
exists的意思是在此范围中或者说存在这样的情况; not exists就是不在这个范围的意思
condition1:这个商品不会condition2。
condition2:有客户没有购买的商品。
这句怎么好像有问题呢,求大神帮改改(*^__^*)
好了,不管怎么说,十条SQL看完有没有觉得自己一下懂SQL啦?
有的话顶一个噢(*^__^*)
分享到:
相关推荐
sql 从入门到精通 SQL 的诞生于 IBM 公司在加利福尼亚 San Jose 的试验室中 在七十年代 SQL 由这里 开发出来 最初它们被称为结构化查询语言 Structured Query Language 并常常简称为 sequel 开始时它们是为 IBM 公司...
Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) ...
oracle pl/sql从入门到精通 配套源代码
这是我自己根据书本《ORACLE PL/SQL从入门到精通》何明,写的笔记,有目录。
Oracle9i PL/SQL从入门到精通
Oracle+11g+SQL和PL+SQL从入门到精通
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
本书是专门为Oracle应用开发人员提供的SQL和PL/SQL编程指南。通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,...
Oracle PL/SQL从入门到精通 配书教学视频 第一章
Oracle PL/SQL从入门到精通 配书教学视频 第18章
Oracle PL/SQL从入门到精通 配书教学视频 第2章
Oracle PL/SQL从入门到精通 配书教学视频 第13章
Oracle PL/SQL从入门到精通 配书教学视频 第16章
Oracle PLSQL从入门到精通 配套资源(所有)软件开发微视频讲解大系 何明编著 112集视频讲解;263项OCP试题分析,PPT 直接网盘提取,我上传的是链接,希望对你们有用。
Oracle PL/SQL从入门到精通 配书教学视频 第3章
Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) ...
oracle 11g sql pl sql 从入门到精通 全本已经压缩成zip,大概71M
T-SQL语法详解,从各个方面详细介绍SQL语法,让你数据库操作更上一存参楼
SQL Server从入门到精通
学习oracle sql pl/sql入门的很不错的一本书。