🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.database
Article #1131

zz��α�д��ЧSQL���

#1131
From: Schumi
Date: Mon, 26 May 2008 01:25
242 lines
13037 bytes
�ܽ�1

ȱʡ����½����������ǷǾۼ�������ʱ������ѵģ�������������Ҫ����
�ڶԸ��ֲ�ѯ�ķ�����Ԥ���ϡ�һ����˵��

�д����ظ�ֵ���Ҿ����з�Χ��ѯ��between, >,< ��>=,< =����order by��group by��
����У����ǽ����ۼ�����

����ͬʱ��ȡ���У���ÿ�ж������ظ�ֵ�ɿ��ǽ�������������������ʽ�о�����
���IJ�ֵͬ�϶�����Ͻ����������ڲ�ֵͬ�ٵ����ϲ�Ҫ������������ڹ�Ա��ġ�
�Ա�����ֻ�С��С��롰Ů��������ֵͬ����˾��ޱ�Ҫ�����������������
��������߲�ѯЧ�ʣ���������ؽ��͸����ٶȡ�

�������Ҫ����ʹ�ؼ��ѯ�γ�����ǣ���ǰ����һ����ʹ����Ƶ�����С�

2 ����ʹ�ò����ݵ�������ͣ�

����float��INt��char��varchar��bINary��varbINary�Dz����ݵġ�������͵IJ�����
����ʹ�Ż����޷�ִ��һЩ�������Խ��е��Ż�����������:

SELECT name FROM employee WHERE salary �� 60000

�����������,��salary�ֶ���money�͵�,���Ż������Ѷ�������Ż�,��Ϊ60000�Ǹ���
��������Ӧ���ڱ��ʱ������ת����ΪǮ����,��Ҫ�ȵ�����ʱת����

3 IS NULL ��IS NOT NULL��

������null�������κΰ�nullֵ���ж������ᱻ���������С���ʹ�����ж�����
�������£�ֻҪ��Щ������һ�к���null�����оͻ���������ų�Ҳ����˵���ij
�д��ڿ�ֵ����ʹ�Ը��н�����Ҳ����������ܡ��κ���WHERE�Ӿ���ʹ��is null��is
 not null������Ż����Dz�����ʹ������ġ�

4 IN��EXISTS��

EXISTSҪԶ��IN��Ч�ʸߡ������ϵ��full table scan��range scan�����������е�I
N�������Ӳ�ѯ��дΪʹ��EXISTS���Ӳ�ѯ��

���ӣ�

���1

SELECT dname, deptno FROM dept

WHERE deptno NOT IN

(SELECT deptno FROM emp);

���2

SELECT dname, deptno FROM dept

WHERE NOT EXISTS

(SELECT deptno FROM emp

WHERE dept.deptno = emp.deptno);

���Եģ�2Ҫ��1��ִ�����ܺúܶ�

��Ϊ1�ж�emp������full table scan,���Ǻ��˷�ʱ��IJ���������1��û���õ�emp��
INdex��

��Ϊû��WHERE�Ӿ䡣��2�е�����emp���е���range scan��

5 IN��OR�Ӿ䳣��ʹ�ù����?ʹ����ʧЧ��

����������ظ�ֵ�����Կ��ǰ��Ӿ�𿪡��𿪵��Ӿ���Ӧ�ð�����

6 ����������

Ӧ���򻯻����Դ��ͱ�����ظ������򡣵��ܹ����������Զ����ʵ��Ĵ���������
ʱ���Ż����ͱ���������IJ��衣������һЩӰ�����أ�

�����в�����һ���򼸸���������У�

group by��order by�Ӿ����еĴ���������Ĵ���һ��

����������Բ�ͬ�ı?

Ϊ�˱��ⲻ��Ҫ�����򣬾�Ҫ��ȷ�������������غϲ���ݿ�?������ʱ����Ӱ
���Ĺ淶�����������Ч�ʵ������ֵ�õģ���������򲻿ɱ��⣬��ôӦ����ͼ��
��������С������еķ�Χ�ȡ�

7 ���Դ��ͱ�����ݵ�˳���ȡ��

��Ƕ�ײ�ѯ�У��Ա��˳���ȡ�Բ�ѯЧ�ʿ��ܲ��������Ӱ�졣�������˳���ȡ��
�ԣ�һ��Ƕ��3��IJ�ѯ�����ÿ�㶼��ѯ1000�У���ô�����ѯ��Ҫ��ѯ 10�������
�����������������Ҫ�������Ƕ����ӵ��н����������磬�����?ѧ��?ѧ�š�
��������??����ѡ�α?ѧ�š��γ̺š��ɼ��������������Ҫ�����ӣ���Ҫ�ڡ�ѧ
�š���������ֶ��Ͻ�������

������ʹ�ò���������˳���ȡ�����������еļ�����϶�������ijЩ��ʽ��WHER
E�Ӿ�ǿ���Ż���ʹ��˳���ȡ������IJ�ѯ��ǿ�ȶ�orders��ִ��˳�������

SELECT �� FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_n
um=1008

��Ȼ��customer_num��order_num�Ͻ����������������������Ż�������ʹ��˳��
��ȡ·��ɨ������?��Ϊ������Ҫ�������Ƿ�����еļ��ϣ�����Ӧ�ø�Ϊ������
�䣺

SELECT �� FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT �� FROM orders WHERE order_num=1008

���������������·�������ѯ��

8 ��������Ӳ�ѯ��

һ���еı�ǩͬʱ������ѯ��WHERE�Ӿ��еIJ�ѯ�г��֣���ô�ܿ��ܵ�����ѯ�е���ֵ
�ı�֮���Ӳ�ѯ�������²�ѯһ�Ρ���ѯǶ�ײ��Խ�࣬Ч��Խ�ͣ����Ӧ��������
���Ӳ�ѯ������Ӳ�ѯ���ɱ��⣬��ôҪ���Ӳ�ѯ�й��˵������ܶ���С�

9 �������ѵ������ʽ��

MATCHES��LIKE�ؼ���֧��ͨ���ƥ�䣬�����Ͻ������ʽ��������ƥ���ر�ķ�ʱ��
�����磺SELECT �� FROM customer WHERE zipcode LIKE ��98_ _ _��

��ʹ��zipcode�ֶ��Ͻ��������������������Ҳ���Dz���˳��ɨ��ķ�ʽ��������
���ΪSELECT �� FROM customer WHERE zipcode >��98000������ִ�в�ѯʱ�ͻ�����
��������ѯ����Ȼ��������ٶȡ�

���⣬��Ҫ����ǿ�ʼ���Ӵ���������䣺SELECT �� FROM customer WHERE zipcode[
2��3] >��80������WHERE�Ӿ��в����˷ǿ�ʼ�Ӵ������������Ҳ����ʹ������

10 ����ݵ�����������

���card��7896�У���card_no����һ���Ǿۼ������account��191122�У���acco
unt_no����һ���Ǿۼ������Կ��ڲ�ͬ�ı����������£�����SQL��ִ�������

SELECT sum(a.amount) FROM account a,card b WHERE a.card_no = b.card_no

��20�룩

��SQL����

SELECT sum(a.amount) FROM account a,card b WHERE a.card_no = b.card_no and a
account_no=b.account_no

��< 1�룩

������

�ڵ�һ�����������£���Ѳ�ѯ�����ǽ�account�����?card���ڲ�?����card��
��������I/O����������¹�ʽ����Ϊ��

����account�ϵ�22541ҳ+������account��191122��*�ڲ��card�϶�Ӧ�����һ
����Ҫ���ҵ�3ҳ��=595907��I/O

�ڵڶ������������£���Ѳ�ѯ�����ǽ�card�����?account���ڲ�?����accou
nt�ϵ�������I/O����������¹�ʽ����Ϊ��

����card�ϵ�1944ҳ+������card��7896��*�ڲ��account�϶�Ӧ����ÿһ����Ҫ
���ҵ�4ҳ��= 33528��I/O

�ɼ�ֻ�г�ݵ������������������ѷ����Żᱻִ�С�

�������ڱ�ʵ��ִ��ǰ����ѯ�Ż������������������г�������ܵ����ӷ�������
���ҳ�ϵͳ������С����ѷ�������������Ҫ��ݿ��Ǵ�������ı?�����ı?��
����ѡ����ɹ�ʽ�������е�ƥ������*�ڲ����ÿһ�β��ҵĴ���ȷ�����˻���С
Ϊ��ѷ�����

�����Ż���WHERE�Ӿ�

��1

����SQL��������е��ж�����ǡ��������ִ���ٶ�ȴ�dz���

SELECT * FROM record WHERE substrINg(card_no,1,4)='5378'

(13��)

SELECT * FROM record WHERE amount/30< 1000

��11�룩

SELECT * FROM record WHERE convert(char(10),date,112)='19991201'

��10�룩

������

WHERE�Ӿ��ж��е��κβ����������SQL����ʱ���м���õ��ģ������ò�����
����������û��ʹ�ø�����������������Щ����ڲ�ѯ����ʱ���ܵõ�����ô�Ϳ�
�Ա�SQL�Ż����Ż���ʹ������������������˽�SQL��д����������

SELECT * FROM record WHERE card_no like '5378%'

��< 1�룩

SELECT * FROM record WHERE amount< 1000*30

��< 1�룩

SELECT * FROM record WHERE date= '1999/12/01'

��< 1�룩

11 �洢����У�������ʱ���Ż���ѯ��

��

1����parven���а�vendor_num�Ĵ������ݣ�

SELECT part_num��vendor_num��price FROM parven ORDER BY vendor_num

INTO temp pv_by_vn

������˳���parven��50ҳ����дһ����ʱ�?50ҳ���������򡣼ٶ�����Ŀ���Ϊ
200ҳ���ܹ���300ҳ��

2������ʱ���vendor�����ӣ��ѽ�������һ����ʱ�?����part_num����

SELECT pv_by_vn���� vendor.vendor_num FROM pv_by_vn��vendor

WHERE pv_by_vn.vendor_num=vendor.vendor_num

ORDER BY pv_by_vn.part_num

INTO TMP pvvn_by_pn

DROP TABLE pv_by_vn

�����ѯ��ȡpv_by_vn(50ҳ)����ͨ�������ȡvendor��1.5��Σ������ڰ�vendor_nu
m�������У�ʵ����ֻ��ͨ������˳��ض� vendor�?40��2=42ҳ��������ı�ÿҳԼ
95�У���160ҳ��д����ȡ��Щҳ��5��160=800�εĶ�д�������д892ҳ��

3���������part���ӵõ����Ľ��

SELECT pvvn_by_pn.����part.part_desc FROM pvvn_by_pn��part

WHERE pvvn_by_pn.part_num=part.part_num

DROP TABLE pvvn_by_pn

�����ѯ˳��ض�pvvn_by_pn(160ҳ)��ͨ�������part��1.5��Σ����ڽ�������
����ʵ���Ͻ���1772�δ��̶�д���Ż�����Ϊ30��1��
--

�� ��Դ:����ˮ˼Դ bbs.sjtu.edu.cn��[FROM: 207.46.55.29]
Technical Details
Message-ID: <4aD3YG$aab@bbs.sjtu.edu.cn>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!eweka.nl!lightspeed.eweka.nl!213.239.142.2.MISMATCH!border-1.ams.xsnews.nl!feed.xsnews.nl!border-2.ams.xsnews.nl!news.isoc.lu!news.shec6.edu.cn!SJTU

Show Full Headers
Complete Article Headers
X-Google-Thread: 101948,eede068d478f72af,start
X-Google-Attributes: gid101948,domainid0,public,usenet
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!eweka.nl!lightspeed.eweka.nl!213.239.142.2.MISMATCH!border-1.ams.xsnews.nl!feed.xsnews.nl!border-2.ams.xsnews.nl!news.isoc.lu!news.shec6.edu.cn!SJTU
From: Goliath.bbs@bbs.sjtu.edu.cn (Schumi)
Newsgroups: cn.bbs.comp.database
Subject: zz��α�д��ЧSQL���
Date: 26 May 2008 01:25:07 GMT
Organization: ��ˮ˼Դ
Message-ID: <4aD3YG$aab@bbs.sjtu.edu.cn>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: database/M.1211765104.A