Sql學習第一天——SQL 練習題(建表/sql語句)_Mssql數(shù)據(jù)庫教程
推薦:Sql學習第三天——SQL 關(guān)于with ties介紹with ties一般是和Top , order by相結(jié)合使用的,會查詢出最后一條數(shù)據(jù)額外的返回值,接下來將為大家詳細介紹下,感興趣的各位可以參考下哈
題目:來自Madrid且訂單數(shù)少于3的消費者
建表:
復(fù)制代碼 代碼如下:www.hl5o.cn
set nocount on --當 SET NOCOUNT 為 ON 時,不返回計數(shù)(表示受 Transact-SQL 語句影響的行數(shù))。當 SET NOCOUNT 為 OFF 時,返回計數(shù)
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);
------------------------------------------------------------------------------------------------------------------------------
做題分析:
復(fù)制代碼 代碼如下:www.hl5o.cn
select customerid as 消費者,count(customerid) as 訂單數(shù)
from dbo.Orders
where customerid in (
select customerid
from dbo.Customers
where city = 'Madrid')
group by customerid
having count(customerid) < 3
結(jié)果如圖所示:

--第一次想到的答案,突然發(fā)現(xiàn)少了一個來自Madrid的FISSA訂單,FISSA訂單數(shù)量為0,所以在Orders表中沒有出現(xiàn),所以上面的寫法會少一個.
--推翻了上面的答案,又想到了用表的連接,而用內(nèi)連接出現(xiàn)的情況會和上面的一樣,所以我選擇了左連接,如下:
復(fù)制代碼 代碼如下:www.hl5o.cn
select C.customerid as 消費者,count(O.customerid) as 訂單數(shù)
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
結(jié)果如圖所示:

--查詢發(fā)現(xiàn)是正確的。
--分析查看不帶條件的左連接
復(fù)制代碼 代碼如下:www.hl5o.cn
select * from dbo.Customers as C left join dbo.Orders as O on C.customerid = O.customerid
復(fù)制代碼 代碼如下:www.hl5o.cn
select * from dbo.Customers as C left join dbo.Orders as O on C.customerid = O.customerid
結(jié)果如圖所示:

--書中給的標準答案是:
復(fù)制代碼 代碼如下:www.hl5o.cn
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
結(jié)果如圖所示:

--書中給的只是多了一個order by 進行定義了排序方式(以numorders這一列的升序進行排序)
分享:Sql學習第二天——SQL DML與CTE概述關(guān)于DML即數(shù)據(jù)操縱語言;關(guān)于CTE即公用表表達式,接下來為大家介紹下CTE使用的地方以及優(yōu)點同時提供一個簡單的CTE例題,感興趣的各位可以參考下哈
相關(guān)Mssql數(shù)據(jù)庫教程:
- sql 語句練習與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-Sql學習第一天——SQL 練習題(建表/sql語句)
。