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

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

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

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

題目:來自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這一列的升序進行排序)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白水县| 仙居县| 宁津县| 大丰市| 伊通| 德保县| 绥宁县| 石河子市| 赫章县| 稷山县| 濮阳县| 光泽县| 青海省| 武夷山市| 马边| 吉安市| 新田县| 临朐县| 中西区| 巫溪县| 抚远县| 西和县| 永福县| 恭城| 开鲁县| 越西县| 大宁县| 武冈市| 岢岚县| 海宁市| 葵青区| 会东县| 嘉善县| 卓尼县| 曲阜市| 扎赉特旗| 厦门市| 广水市| 赤峰市| 明水县| 明水县|