SQL Server實(shí)踐性練習(xí)之創(chuàng)建庫表及條件查詢
坦白說,SQL Server數(shù)據(jù)庫的學(xué)習(xí)過程是比較枯燥的,因?yàn)槲覀儾坏炀氄莆掌髽I(yè)管理器的操作,還要熟練掌握SQL語句的查詢。其實(shí)這一過程是通過做大量的實(shí)踐練習(xí)來熟練掌握的。本文開始我們就介紹幾篇關(guān)于SQL Server數(shù)據(jù)庫實(shí)踐性練習(xí)的文章,希望能夠?qū)δ兴鶐椭1酒覀兿冉榻B一些SQL Server數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫和創(chuàng)建表以及條件查詢方面的操作實(shí)例,接下來就讓我們一起來了解一下這部分內(nèi)容吧。
1、創(chuàng)建數(shù)據(jù)庫以及創(chuàng)建表
- create database CAP
- create table CUSTOMERS
- (
- cid varchar(10) primary key,
- canme varchar(10),
- city varchar(20),
- discnt money
- )
- insert into CUSTOMERS values ('c001','TipTop','Duluth',10.00)
- insert into CUSTOMERS values ('c002','Basics','Dallas',12.00)
- insert into CUSTOMERS values ('c003','Allied','Dallas',8.00)
- insert into CUSTOMERS values ('c004','ACME','Duluth',8.00)
- insert into CUSTOMERS values ('c006','ACME','Kyoto',0.00)
- create table PRODUCTS
- (
- pid varchar(10)primary key,
- pname varchar(10),
- city varchar(20),
- quantity varchar(10),
- price money
- )
- insert into PRODUCTS values ('p01','comb','Dallas','111400',0.50)
- insert into PRODUCTS values ('p02','brush','Newark','203000',0.50)
- insert into PRODUCTS values ('p03','razor','Duluth','150600',1.00)
- insert into PRODUCTS values ('p04','pen','Duluth','125300',1.00)
- insert into PRODUCTS values ('p05','pencil','Dallas','221400',1.00)
- insert into PRODUCTS values ('p06','folder','Dallas','123100',2.00)
- insert into PRODUCTS values ('p07','case','Newark','100500',1.00)
- create table AGENTS
- (
- aid varchar(4) primary key,
- aname varchar(10),
- city varchar(10),
- [percent] int
- )
- insert into AGENTS values('a01','Smith','New York',6)
- insert into AGENTS values('a02','Jones','Newark',6)
- insert into AGENTS values('a03','Brown','Tokyo',7)
- insert into AGENTS values('a04','Gray','New York',6)
- insert into AGENTS values('a05','Otasi','Duluth',5)
- insert into AGENTS values('a06','Smith','Dallas',5)
- create table ORDERS
- (
- ordno varchar(4),
- [month] varchar(3),
- cid varchar(10),
- aid varchar(4),
- pid varchar(10),
- qty int,
- dollars money
- )
- insert into ORDERS values('1011','jan','c001','a01','p01',1000,450.00)
- insert into ORDERS values('1012','jan','c001','a01','p01',1000,450.00)
- insert into ORDERS values('1019','feb','c001','a02','p02',400,180.00)
- insert into ORDERS values('1017','feb','c001','a06','p03',600,540.00)
- insert into ORDERS values('1018','feb','c001','a03','p04',600,540.00)
- insert into ORDERS values('1023','mar','c001','a04','p05',500,450.00)
- insert into ORDERS values('1022','mar','c001','a05','p06',400,720.00)
- insert into ORDERS values('1025','apr','c001','a05','p07',800,720.00)
- insert into ORDERS values('1013','jan','c002','a03','p03',1000,880.00)
- insert into ORDERS values('1026','may','c002','a05','p03',800,704.00)
- insert into ORDERS values('1015','jan','c003','a03','p05',1200,1104.00)
- insert into ORDERS values('1014','jan','c003','a03','p05',1200,1104.00)
- insert into ORDERS values('1021','feb','c004','a06','p01',1000,460.00)
- insert into ORDERS values('1016','jan','c006','a01','p01',1000,500.00)
- insert into ORDERS values('1020','feb','c006','a03','p07',600,600.00)
- insert into ORDERS values('1024','mar','c006','a06','p01',800,400.00)
2、sql語句的編寫
--題1:找出住在紐約的代理商的aid值和名字
- select aid ,aname from AGENTS where city='New York'
--題2:檢索訂貨記錄中所有零件的pid值
- select distinct pid from ORDERS
--題3:檢索所有滿足以下條件的顧客-代理商姓名對(cname,aname),其中的cname 通過aname訂了貨(曾經(jīng)出過錯(cuò))
- create table b
- (cid varchar(10),
- aid varchar(4)
- )
- insert into b
- select cid,aid
- from ORDERS group by cid,aid
- select distinct aname,cname from AGENTS,CUSTOMERS,b where AGENTS.aid=b.aid and CUSTOMERS.cid=b.cid
--上面是通過建臨時(shí)表得出結(jié)果,如果直接寫呢?(注意一定還要有distinct)
- select distinct cname,aname from agents,customers,orders where agents.aid=orders.aid and customers.cid=orders.cid
--答案:
- select distinct CUSTOMERS.cname,AGENTS.aname from CUSTOMERS,AGENTS,ORDERS where CUSTOMERS.cid=ORDERS.cid and AGENTS.aid=ORDERS.aid
--可以看出,答案非常簡單
--題4:在orders表的基礎(chǔ)上生成含有列ordno,cid,aid,pid和profit的"表",其中的profit是由quantity和price計(jì)算所得,方法是全部銷售收入減去60%的銷售收入.顧客的折扣以及代理商的酬金百分率
--答案:此題告訴我們關(guān)鍵字加[]的重要性,不然一直出現(xiàn)“關(guān)鍵字 'percent' 附近有語法錯(cuò)誤。”
- select ordno,x.cid,x.aid,x.pid,40*(x.qty*p.price)-01*(c.discnt+a.[percent])*(x.qty*p.price) as profit
- from orders as x,customers as c,agents as a,products as p
- where c.cid=x.cid and a.aid=x.aid and p.pid=x.pid;
--題5:求出住在同一城市的顧客對。
- select distinct c1.cname,c2.cname,c1.city from customers c1, customers c2 where c1.city=c2.city and c1.cname<c2.cname
- select c1.cid,c2.cid from customers c1,customers c2
- where c1.city=c2.city and c1.cid<c2.cid
--此題的關(guān)鍵點(diǎn)即為可以給一個(gè)表取兩個(gè)別名.如果題目要求在一個(gè)表中的同一列取出匹配項(xiàng)的話都可以用這種方法。
--題6:找出至少被兩個(gè)顧客訂購的產(chǎn)品的pid值
select pid,count(cid) as 訂購產(chǎn)品的顧客數(shù)量 from orders group by pid having count(cid)>=2
--此時(shí)用此法更好一些
--答案:
- select distinct x1.pid from orders x1, orders x2
- where x1.pid=x2.pid and x1.cid<x2.cid
--總結(jié):對一個(gè)表的操作大多可以通過去別名來完成,這里應(yīng)該會(huì)有冗余
--題6:查詢那些訂購了某個(gè)被代理商a06訂購過的產(chǎn)品的顧客的cid值
- select distinct cid from orders where pid in (select pid from orders where aid='a06')
--這時(shí)用in感覺渾然天成,因?yàn)檫@里要去的是“某一個(gè)”被代理商a06訂購過的產(chǎn)品
--同理,對一個(gè)表里面的這種操作都可以通過取別名(且這種方式更簡單)
- select distinct y.cid from orders x,orders y
- where y.pid=x.pid and x.aid='a06'
--總結(jié):可以用一次查詢的就用一次查詢,通過表取別名。
關(guān)于SQL Server數(shù)據(jù)庫實(shí)踐性練習(xí)之創(chuàng)建數(shù)據(jù)庫和創(chuàng)建表以及條件查詢方面的實(shí)例就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@吧。
SQL Server實(shí)踐性練習(xí)的相關(guān)文章:
SQL Server實(shí)踐性練習(xí)之子查詢實(shí)例
SQL Server實(shí)踐性練習(xí)之高級SQL查詢
【編輯推薦】






