文章目录
- 前言
- 介绍性问题
- 1.我们有哪些承运商?
- 2. 从目录表中查询特定字段
- 3.销售代表
- 4.在美国的销售代表
- 5.由特定员工ID下的订单
- 6.供应商和联系人信息
- 答案
- 1.我们有哪些承运商?
- 2. 从目录表中查询特定字段
- 3.销售代表
- 4.在美国的销售代表
- 5.由特定员工ID下的订单
- 6.供应商和联系人信息
- 未完待续
前言
该系列教程,将会从实际问题出发,边干边学,逐步深入讲解SQL的各方面知识。
你需要完成所有的问题吗?绝对不是。介绍性的问题相当简单,所以你可以直接跳过到“中级问题”部分。如果你不是初学者,但不确定应该从哪里开始,请在“入门问题”部分看看问题和预期结果,并确保你理解这些概念。如果已经理解了这些概念,请开始阅读“中级问题”部分。
你想从这本书中复制代码并在你的服务器上运行?我建议你手动输入,而不是复制粘贴。为什么要去麻烦地重新打字呢?科学表明,打字的行为会在你的脑中留下更深刻的印象。当你只是复制和粘贴时,代码只是直接从你电脑里的一个窗口转到另一个窗口,而不会给你留下多少印象。但是当你把它打出来时,你必须集中精力,这非常有助于保留信息。
一旦你完成了所有的问题,将拥有一些在数据分析和高级Select语句使用方面非常有用的技能。当然,这并不是SQL的全部内容。还有修改数据(更新、插入、删除)、DDL(数据定义语言,即如何创建和修改数据库对象)、编程(如存储过程)和许多其他主题。
该系列教程中,只涉及到了使用Select语句检索数据的问题,这几乎是所有其他数据库主题的基础开端。
介绍性问题
1.我们有哪些承运商?
我们有一张表叫承运商(Shippers)。返回Shippers的所有行的所有字段。
-- 预期结果
ShipperID CompanyName Phone
----------- ------------- ------------------------
1 Speedy Express (503) 555-9831
2 United Package (503) 555-3199
3 Federal Shipping (503) 555-9931
(3 row(s) affected)
提示:返回所有列和所有行的的SELECT语句是“Select * from TableName”
2. 从目录表中查询特定字段
在“类别Categories”表中,使用此SQL选择所有字段:
Select * from Categories
…将返回4列。但是我们只想看到两列:类别名称(CategoryName)和描述(Description)。
-- 预期结果
CategoryName Description
--------------- ----------------------------------------------------------
Beverages Soft drinks, coffees, teas, beers, and ales
Condiments Sweet and savory sauces, relishes, spreads, and seasonings
Confections Desserts, candies, and sweet breads
Dairy Products Cheeses
Grains/Cereals Breads, crackers, pasta, and cereal
Meat/Poultry Prepared meats
Produce Dried fruit and bean curd
Seafood Seaweed and fish
(8 row(s) affected)
提示:在Select语句中,使用逗号分隔的列名返回特定列的结果
3.销售代表
我们只想看看Employees表中所有头衔(Title)为销售代表(Sales Representative)的员工的FirstName、LastName和雇佣日期(HireDate)。编写一个只返回这些员工的SQL语句。
-- 预期结果
FirstName LastName HireDate
---------- -------------------- -----------------------
Nancy Davolio 2010-05-01 00:00:00.000
Janet Leverling 2010-04-01 00:00:00.000
Margaret Peacock 2011-05-03 00:00:00.000
Michael Suyama 2011-10-17 00:00:00.000
Robert King 2012-01-02 00:00:00.000
Anne Dodsworth 2012-11-15 00:00:00.000
(6 row(s) affected)
提示:要从表中过滤掉某些行,请使用Where子句。带有字符串过滤器的where子句的格式为:Where FieldName = ‘Filter Text’
4.在美国的销售代表
现在我们希望看到与上面相同的列,但只针对那些既有销售代表头衔,所在国家(Country)为美国(USA)的员工。
-- 预期结果
FirstName LastName HireDate
---------- -------------------- -----------------------
Nancy Davolio 2010-05-01 00:00:00.000
Janet Leverling 2010-04-01 00:00:00.000
Margaret Peacock 2011-05-03 00:00:00.000
(3 row(s) affected)
提示:要在where子句中应用多个过滤器,请使用“and”来连接过滤器。
5.由特定员工ID下的订单
显示Orders表中,特定员工所下的所有订单。该员工的EmployeeID为5。
-- 预期结果
OrderID OrderDate
----------- -----------------------
10248 2014-07-04 08:00:00.000
10254 2014-07-11 02:00:00.000
10269 2014-07-31 00:00:00.000
10297 2014-09-04 21:00:00.000
10320 2014-10-03 12:00:00.000
10333 2014-10-18 18:00:00.000
10358 2014-11-20 05:00:00.000
10359 2014-11-21 14:00:00.000
10372 2014-12-04 10:00:00.000
10378 2014-12-10 00:00:00.000
10397 2014-12-27 17:00:00.000
10463 2015-03-04 13:00:00.000
10474 2015-03-13 16:00:00.000
10477 2015-03-17 02:00:00.000
10529 2015-05-07 01:00:00.000
10549 2015-05-27 03:00:00.000
10569 2015-06-16 15:00:00.000
10575 2015-06-20 22:00:00.000
10607 2015-07-22 09:00:00.000
10648 2015-08-28 22:00:00.000
10649 2015-08-28 00:00:00.000
10650 2015-08-29 06:00:00.000
10654 2015-09-02 07:00:00.000
10675 2015-09-19 06:00:00.000
10711 2015-10-21 03:00:00.000
10714 2015-10-22 03:00:00.000
10721 2015-10-29 08:00:00.000
10730 2015-11-05 07:00:00.000
10761 2015-12-02 08:00:00.000
10812 2016-01-02 02:00:00.000
10823 2016-01-09 17:00:00.000
10841 2016-01-20 21:00:00.000
10851 2016-01-26 00:00:00.000
10866 2016-02-03 01:00:00.000
10869 2016-02-04 09:00:00.000
10870 2016-02-04 12:00:00.000
10872 2016-02-05 06:00:00.000
10874 2016-02-06 14:00:00.000
10899 2016-02-20 09:00:00.000
10922 2016-03-03 02:00:00.000
10954 2016-03-17 16:00:00.000
11043 2016-04-22 17:00:00.000
(42 row(s) affected)
提示:“EmployeeID”是一个整数字段,而不是一个字符串字段。因此,值“5”不需要在where子句中被单引号包围。
6.供应商和联系人信息
在“Suppliers”表中,显示那些职位(ContactTitle)不是市场经理(Marketing Manager)的供应商的SupplierID、ContactName和ContactTitle。
-- 预期结果
SupplierID ContactName ContactTitle
----------- ------------------------------ ------------------------------
1 Charlotte Cooper Purchasing Manager
2 Shelley Burke Order Administrator
3 Regina Murphy Sales Representative
5 Antonio del Valle Saavedra Export Administrator
6 Mayumi Ohno Marketing Representative
8 Peter Wilson Sales Representative
9 Lars Peterson Sales Agent
11 Petra Winkler Sales Manager
12 Martin Bein International Marketing Mgr.
13 Sven Petersen Coordinator Foreign Markets
14 Elio Rossi Sales Representative
16 Cheryl Saylor Regional Account Rep.
17 Michael Björn Sales Representative
18 Guylène Nodier Sales Manager
19 Robb Merchant Wholesale Account Agent
20 Chandra Leka Owner
21 Niels Petersen Sales Manager
22 Dirk Luchte Accounting Manager
23 Anne Heikkonen Product Manager
24 Wendy Mackenzie Sales Representative
26 Giovanni Giudici Order Administrator
27 Marie Delamare Sales Manager
28 Eliane Noz Sales Representative
29 Chantal Goulet Accounting Manager
(24 row(s) affected)
答案
1.我们有哪些承运商?
答案
Select*
From Shippers
讨论
这是一个基本的选择语句,返回所有的行,只是为了让你进行热身。大多数时候,像这样的简单选择语句都写在一行上,像这样:
Select * From Shippers
2. 从目录表中查询特定字段
SelectCategoryName ,Description
from Categories
3.销售代表
答案
SelectFirstName,LastName,HireDate
From Employees
WhereTitle = 'Sales Representative'
讨论
这是一个针对字符串数据类型的简单过滤器。在将值与字符串数据类型进行比较时,需要将该值括在单引号中。如果你不知道,会发生什么?尝试运行以下内容:
FirstName,LastName,HireDate
From Employees
WhereTitle = Sales Representative
请注意,SQL Server给出了以下错误:
Incorrect syntax near 'Representative'.
4.在美国的销售代表
答案
SelectFirstName,LastName,HireDate
From Employees
WhereTitle = 'Sales Representative'and Country = 'USA'
讨论
你可以在where子句中使用尽可能多的过滤器。我通常会缩进所有的过滤器,并把它们放在新的行上,以便阅读。
5.由特定员工ID下的订单
答案
SelectOrderID,OrderDate
From Orders
WhereEmployeeID = 5
讨论
这个简单的查询使用“=”比较操作符筛选员工ID字段中的一个值。下面是另一组常用的比较运算符:> 大于, < 小于, >= 大于或等于, <= 小于或等于。
6.供应商和联系人信息
答案
SelectSupplierID,ContactName,ContactTitle
From Suppliers
WhereContactTitle <> 'Marketing Manager'
讨论
另一种表达Not的方法是使用"!=",所以,下面的答案等效。
SelectCompanyName,ContactName,ContactTitle
From Suppliers
WhereContactTitle != 'Marketing Manager'
未完待续
下一讲继续讨论剩余的介绍性问题。
如果喜欢这篇文章,请不要忘记关注🧡、点赞👍和收藏📔哦!