国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

Sql學習第一天――SQL 練習題(建表/sql語句)

2024-08-31 00:44:14
字體:
來源:轉載
供稿:網友

題目:來自Madrid且訂單數少于3的消費者

建表:

復制代碼 代碼如下:


set nocount on --當 SET NOCOUNT 為 ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。當 SET NOCOUNT 為 OFF 時,返回計數
use SY
GO
if object_Id('dbo.Orders') is not null
drop table dbo.Orders
GO
if object_Id('dbo.Customers') is not null
drop table dbo.Customers
GO
create table dbo.Customers
(
customerid char(5) not null primary key ,
city varchar(10) not null
);
insert into dbo.Customers values('FISSA','Madrid');
insert into dbo.Customers values('FRNDO','Madrid');
insert into dbo.Customers values('KRLOS','Madrid');
insert into dbo.Customers values('MRPHS','Zion');

create table dbo.Orders
(
orderid int not null primary key ,
customerid char(5) null references customers(customerid)
)
insert into dbo.Orders values(1,'FRNDO');
insert into dbo.Orders values(2,'FRNDO');
insert into dbo.Orders values(3,'KRLOS');
insert into dbo.Orders values(4,'KRLOS');
insert into dbo.Orders values(5,'KRLOS');
insert into dbo.Orders values(6,'MRPHS');
insert into dbo.Orders values(7,null);


------------------------------------------------------------------------------------------------------------------------------

做題分析:

復制代碼 代碼如下:


select customerid as 消費者,count(customerid) as 訂單數
from dbo.Orders
where customerid in (
select customerid
from dbo.Customers
where city = 'Madrid')
group by customerid
having count(customerid) < 3


結果如圖所示:

--第一次想到的答案,突然發現少了一個來自Madrid的FISSA訂單,FISSA訂單數量為0,所以在Orders表中沒有出現,所以上面的寫法會少一個.

--推翻了上面的答案,又想到了用表的連接,而用內連接出現的情況會和上面的一樣,所以我選擇了左連接,如下:

復制代碼 代碼如下:


select C.customerid as 消費者,count(O.customerid) as 訂單數
from dbo.Customers as C left join dbo.Orders as O on C.customerid = O.customerid
where C.city= 'Madrid'
group by C.customerid
having count(C.customerid) < 3


結果如圖所示:

--查詢發現是正確的。

--分析查看不帶條件的左連接

復制代碼 代碼如下:


select * from dbo.Customers as C left join dbo.Orders as O on C.customerid = O.customerid

復制代碼 代碼如下:


select * from dbo.Customers as C left join dbo.Orders as O on C.customerid = O.customerid


結果如圖所示:

Sql學習第一天――SQL 練習題(建表/sql語句)

--書中給的標準答案是:

復制代碼 代碼如下:


select C.customerid , count(O.orderid) as numorders
from dbo.Customers as C left join dbo.Orders as O on C.customerid = O.customerid
where C.city= 'Madrid'
group by C.customerid
having count(O.orderid) < 3
order by numorders


結果如圖所示:

--書中給的只是多了一個order by 進行定義了排序方式(以numorders這一列的升序進行排序)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泗洪县| 甘孜县| 保靖县| 横山县| 东丽区| 汶上县| 西峡县| 湖南省| 朔州市| 泽库县| 寿宁县| 城步| 大足县| 广饶县| 天津市| 鱼台县| 达日县| 敖汉旗| 友谊县| 古田县| 尚志市| 济阳县| 资源县| 犍为县| 蒙自县| 黎平县| 万宁市| 和平县| 连江县| 库伦旗| 兴业县| 鞍山市| 河曲县| 长泰县| 九龙城区| 恩施市| 左贡县| 山丹县| 丰原市| 鲜城| 环江|