SQL SELECT TOP, LIMIT, ROWNUM
SQL SELECT TOP 子句
- SELECT TOP 子句用于指定要返回的记录数量。
- SELECT TOP子句在包含数千条记录的大型表上很有用。返回大量记录会影响性能。
注:并不是所有的数据库系统都支持SELECT TOP子句。MySQL支持LIMIT子句来选择有限数量的记录,而Oracle使用ROWNUM。
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的
MySQL语法:
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
实例
SELECT *
FROM Persons
LIMIT 5;
Oracle 语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
实例
SELECT *
FROM Persons
WHERE ROWNUM <=5;
SQL SELECT TOP 实例
以下SQL语句从"Customers" 表中选择前两条记录:
实例
SELECT TOP 2 * FROM Customers;
SQL SELECT TOP PERCENT 实例
以下SQL语句从 “Customers” 表中选择前50%的记录:
实例
SELECT TOP 50 PERCENT * FROM Customers;
SQL TOP,LIMIT和ROWNUM示例
以下SQL语句从"Customers"表中选择前三个记录:
SELECT TOP 3 * FROM Customers;
以下SQL语句显示了使用LIMIT子句的等效示例:
SELECT * FROM Customers
LIMIT 3;
以下SQL语句显示了使用ROWNUM的等效示例:
SELECT * FROM Customers
WHERE ROWNUM <= 3;
SQL TOP PERCENT示例
以下SQL语句从"Customers"表中选择记录的前50%:
SELECT TOP 50 PERCENT * FROM Customers;
添加一个条件
以下SQL语句从"Customers"表中选择国家为"Germany"的前三条记录:
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
以下SQL语句显示了使用LIMIT子句的等效示例:
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
以下SQL语句显示了使用ROWNUM的等效示例:
SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;
为什么要LIMIT你的查询结果
LIMIT作为一种简单的分页方法,主要是为了减少数据返回的时间,如果您查询一个非常大的表(例如一个有数十万或数百万行的表)而不使用限制,那么您可能会等待很长时间才能显示所有的结果,所以使用LIMIT可以减少查询数据返回的时间,提高效率。
SQL LIKE 运算符
SQL LIKE 运算符
在WHERE子句中使用LIKE运算符来搜索列中的指定模式。
有两个通配符与LIKE运算符一起使用:
- % - 百分号表示零个,一个或多个字符
- _ - 下划线表示单个字符
注意: MS Access使用问号(?)而不是下划线(_)。
百分号和下划线也可以组合使用!
SQL LIKE 语法
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
提示:还可以使用AND或OR运算符组合任意数量的条件。
下面是一些使用’%‘和’_'通配符显示不同LIKE运算符的例子:
SQL LIKE 运算符实例
以下SQL语句选择以“a”开头的CustomerName的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
以下SQL语句选择客户名称以“a”结尾的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
以下SQL语句选择客户名称在任何位置都具有“或”的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
以下SQL语句选择客户名称在第二位具有“r”的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
以下SQL语句选择客户名称以“a”开头且长度至少为3个字符的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a_%_%';
以下SQL语句选择联系人名称以“a”开头并以“o”结尾的所有客户:
代码示例:
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
以下SQL语句选择客户名称不以“a”开头的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
以下SQL语句选择客户名称以“a”开头,以“s”结尾的5位字符的所有客户:
代码示例:
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a___s';
SQL IN 运算符
SQL IN 运算符
- IN运算符允许在WHERE子句中指定多个值。
- IN运算符是多个OR条件的简写。
SQL IN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
或者
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
IN 操作符实例
以下SQL语句选取位于“Germany”,“France”和“UK”的所有客户:
代码示例:
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
以下SQL语句选取不在“Germany”,“France”或“UK”中的所有客户:
代码示例:
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
以下SQL语句选取来自同一国家的所有客户作为供应商:
代码示例:
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
SQL BETWEEN运算符
SQL BETWEEN 运算符
-
BETWEEN运算符用于选取介于两个值之间的数据范围内的值。
-
BETWEEN运算符选择给定范围内的值。值可以是数字,文本或日期。
-
BETWEEN运算符是包含性的:包括开始和结束值,且开始值需小于结束值。
SQL BETWEEN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
要否定BETWEEN运算符的结果,可以添加NOT运算符:
SELECT column_name(s)
FROM table_name
WHERE column_name NOT BETWEEN value1 AND value2;
BETWEEN 运算符实例
以下SQL语句选择价格在10到20之间的所有产品:
实例
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
NOT BETWEEN 操作符实例
要显示前面示例范围之外的产品,请使用NOT BETWEEN:
实例
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
带有 IN 的 BETWEEN 操作符实例
以下SQL语句选择价格在10到20之间但CategoryID不是1、2或3的所有产品:
实例
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
带有文本值的 BETWEEN 操作符实例
以下SQL语句选择所有带有ProductName BETWEEN’Carnarvon Tigers’和’Mozzarella di Giovanni’的产品:
实例
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
带有文本值的 NOT BETWEEN 操作符实例
以下SQL语句选择ProductName不是BETWEEN’Carnarvon Tigers’和’Mozzarella di Giovanni’的所有产品:
实例
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
带有日期值的 BETWEEN 操作符实例
以下 SQL 语句选取 OrderDate 介于 ‘04-July-1996’ 和 ‘09-July-1996’ 之间的所有订单:
实例
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
注意,在不同的数据库中,BETWEEN 操作符会产生不同的结果!
- 在一些数据库中,BETWEEN 选取介于两个值之间但不包括两个测试值的字段。
- 在一些数据库中,BETWEEN选取介于两个值之间且包括两个测试值的字段。
- 在一些数据库中,BETWEEN选取介于两个值之间且包括第一个测试值但不包括最后一个测试值的字段。
因此,要检查数据库是如何处理 BETWEEN 操作符!
SQL 通用数据类型
SQL 通用数据类型
数据类型定义了存储在列中的值的类型。
SQL 通用数据类型
数据库表中的每一列都需要有一个名称和数据类型。
SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的数据的指南,它也标识了 SQL 如何与存储的数据进行交互。
下面的表格列出了 SQL 中通用的数据类型:
SQL Join连接
SQL 连接(Joins)
SQL join 用于把来自两个或多个表的行结合起来。
SQL JOIN
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
简单地说,就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。
最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。
注意,“Orders” 表中的 “CustomerID” 列指向 “Customers” 表中的客户。上面这两个表是通过 “CustomerID” 列联系起来的。
然后,如果我们运行下面的 SQL 语句(包含 INNER JOIN):
实例
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
运行结果如下所示:
值得注意的是,连接是在WHERE子句中执行的。
可以使用几个操作符连接表,例如=、<、>、<=、>=、!=、BETWEEN、LIKE、 和NOT。
不同的 SQL JOIN
在我们继续讲解实例之前,我们先列出您可以使用的不同的 SQL JOIN 类型:
- INNER JOIN:如果表中有至少一个匹配,则返回行
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN:只要其中一个表中存在匹配,则返回行
- SELF JOIN:用于将表连接到自己,就好像该表是两个表一样,临时重命名了SQL语句中的至少一个表
- CARTESIAN JOIN:从两个或多个连接表返回记录集的笛卡儿积
SQL INNER JOIN 关键字(内部连接)
内部链接INNER JOIN关键字选择两个表中具有匹配值的记录。
SQL INNER JOIN 语法
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
SQL INNER JOIN 实例
以下SQL语句将返回所有下订单的客户:
实例
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
注释:如果表中至少有一个匹配项,INNER JOIN 关键字将返回一行。如果 “Customers” 表中的行与"Orders" 不匹配,则不会列出行。
SQL 左连接 LEFT JOIN 关键字
SQL 左连接 LEFT JOIN 关键字
SQL左连接LEFT JOIN关键字返回左表(表1)中的所有行,即使在右表(表2)中没有匹配。如果在正确的表中没有匹配,结果是NULL。
SQL LEFT JOIN 语法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
注释:在一些数据库中,LEFT JOIN称为LEFT OUTER JOIN。
SQL LEFT JOIN 实例
以下SQL语句将选择所有客户以及他们可能拥有的任何订单:
实例
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
注释:LEFT JOIN 关键字返回左表(Customers)中的所有行,即使在右边表(Orders)中没有匹配。
SQL右连接 RIGHT JOIN 关键字
SQL右连接 RIGHT JOIN 关键字
SQL右链接 RIGHT JOIN 关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为NULL。
SQL RIGHT JOIN 语法
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
注释:在一些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。
SQL RIGHT JOIN 实例
以下SQL语句将返回所有雇员以及他们可能已经放置的任何订单:
实例
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
注释:RIGHT JOIN 关键字返回右表(Employees)的所有行,即使在左表(Orders)中没有匹配。
SQL FULL OUTER JOIN 关键字(完整外部连接)
SQL FULL OUTER JOIN 关键字
当左(表1)或右(表2)表记录匹配时,FULL OUTER JOIN关键字将返回所有记录。
注意: FULL OUTER JOIN可能会返回非常大的结果集!
SQL FULL OUTER JOIN 语法
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
SQL FULL OUTER JOIN 实例
以下SQL语句选择所有客户和所有订单:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
注意: FULL OUTER JOIN关键字返回左表(Customers)中的所有行,以及右表(Orders)中的所有行。如果 "Customers"中的行中没有"Orders"中的匹配项,或者"Orders"中的行中没有 "Customers"中的匹配项,那么这些行也会列出。
SQL自连接 Self JOIN
SQL自连接
自联接是一种常规联接,但表本身是连接的。
Self JOIN语法
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
SQL Self JOIN示例
以下SQL语句匹配来自同一城市的客户:
代码示例
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
SQL UNION 运算符
SQL UNION 运算符
UNION运算符用于组合两个或更多SELECT语句的结果集,而不返回任何重复的行。
- UNION中的每个SELECT语句必须具有相同的列数
- 这些列也必须具有相似的数据类型
- 每个SELECT语句中的列也必须以相同的顺序排列
- 每个SELECT语句必须有相同数目的列表达式 但是每个SELECT语句的长度不必相同
SQL UNION 语法1
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认情况下,UNION 运算符选择一个不同的值。如果允许重复值,请使用 UNION ALL。
SQL UNION 语法2
SELECT column_name(s) FROM table1
[WHERE condition]
UNION
SELECT column_name(s) FROM table2
[WHERE condition];
SQL UNION ALL 语法1
UNION All运算符用于组合两个SELECT语句(包括重复行)的结果。
适用于UNION子句的相同规则将适用于UNION All操作符。
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释:UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。
SQL UNION ALL 语法2
SELECT column_name(s) FROM table1
[WHERE condition]
UNION ALL
SELECT column_name(s) FROM table2
[WHERE condition];
SQL UNION 实例
下面的 SQL 语句从 “Customers” 和 “Suppliers” 表中选取所有不同的城市(只有不同的值):
实例
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
注释:不能用 UNION 来列出两个表中的所有城市。如果一些客户和供应商来自同一个城市,每个城市将只被列入一个列表。UNION将只选择不同的值。请使用UNION ALL选择重复值!
SQL UNION ALL 实例
以下SQL语句使用 UNION ALL 从 “Customers"和"Suppliers” 表中选择所有城市(也是重复的值):
实例
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
带有 WHERE 的 SQL UNION ALL
以下SQL语句使用UNIONALL从"Customers"和 “Suppliers” 表中选择所有德国城市(也是重复数值):
实例
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
SQL UNION与WHERE
以下SQL语句从“客户”和“供应商”中选择所有不同的德国城市(只有不同的值):
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
SQL SELECT INTO 语句
使用 SQL,可以将信息从一个表中复制到另一个表中。
SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。
SQL SELECT INTO 语法
我们可以把所有的列都复制到新表中:
SELECT *
INTO newtable [IN externaldb]
FROM table1;
或者只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
SQL SELECT INTO 实例
创建 Customers 的备份复件:
SELECT *
INTO CustomersBackup2013
FROM Customers;
请使用 IN 子句来复制表到另一个数据库中:
SELECT *
INTO CustomersBackup2013 IN 'Backup.mdb'
FROM Customers;
只复制一些列插入到新表中:
SELECT CustomerName,
ContactName
INTO CustomersBackup2013
FROM Customers;
只复制德国的客户插入到新表中:
SELECT *
INTO CustomersBackup2013
FROM Customers
WHERE Country='Germany';
复制多个表中的数据插入到新表中:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2013
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID;
提示:SELECT INTO 语句可以用于在另一种模式下创建一个新的空表。只需添加WHERE子句,使查询返回时没有数据:
SELECT *
INTO newtable
FROM table1
WHERE 1=0;
SQL INSERT INTO SELECT 语句
SQL INSERT INTO SELECT 语句
使用SQL,可以将信息从一个表中复制到另一个表中。
INSERT INTO SELECT 语句从表中复制数据,并将数据插入现有的表中。目标表中的任何现有行都不会受到影响。
SQL INSERT INTO SELECT 语法
我们可以将所有列从一个表中复制到另一个已经存在的表中:
INSERT INTO table2
SELECT * FROM table1;
或者我们可以把想要的列复制到另一个现有的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
SQL INSERT INTO SELECT 实例
把 “Suppliers” 一栏复制到 “Customers” 一栏:
实例
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers;
只将德国供应商的副本插入 “Customers” :
实例
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers
WHERE Country='Germany';
SQL 撤销索引、表以及数据库
SQL 撤销索引、撤销表以及撤销数据库
通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
DROP INDEX 语句
DROP INDEX 语句用于删除表中的索引。
DROP INDEX index_name ON table_name
用于 DB2/Oracle 的 DROP INDEX 语法:
DROP INDEX index_name
用于 MySQL 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句
DROP TABLE 语句用于删除表。
DROP TABLE table_name
DROP DATABASE 语句
DROP DATABASE 语句用于删除数据库。
DROP DATABASE database_name
TRUNCATE TABLE 语句
只需要删除表中的数据,而不删除表本身
使用TRUNCATE TABLE语句:
TRUNCATE TABLE table_name
SQL CREATE DATABASE 语句
SQL CREATE DATABASE 语句
CREATE DATABASE 语句用于创建数据库。
在RDBMS中,数据库名称始终应该是唯一的。
SQL CREATE DATABASE 语法
CREATE DATABASE dbname;
在创建任何数据库之前,请确保拥有管理权限。
SQL CREATE DATABASE 实例
下面的 SQL 语句创建一个名为 “my_db” 的数据库:
CREATE DATABASE my_db;
数据库表可以通过 CREATE TABLE 语句来添加。
创建数据库后,可以在数据库列表中检查它。
语句:
SHOW DATABASES;
SQL CREATE TABLE 语句
SQL CREATE TABLE 语句
CREATE TABLE 语句用于创建数据库中的表。
表由行和列组成,每个表都必须有个表名。
SQL CREATE TABLE 语法
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。
SQL CREATE TABLE 实例
现在我们想要创建一个名为 “Persons” 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。
我们使用下面的 CREATE TABLE 语句:
实例
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
PersonID列数据类型为int,包含一个整数。
LastName、FirstName、Address和City列具有包含字符的varchar数据类型,这些字段的最大长度为255个字符。
SQL ALTER TABLE 语句
ALTER TABLE 语句
ALTER TABLE 语句用于在现有表中添加、删除或修改列。
SQL ALTER TABLE 语法
若要向表中添加列,请使用以下语法:
ALTER TABLE table_name
ADD column_name datatype
若要删除表中的列,请使用以下语法(请注意,一些数据库系统不允许这样删除数据库表中的列):
ALTER TABLE table_name
DROP COLUMN column_name
SQL ALTER TABLE 实例
现在,我们想在 “Persons” 表中添加一个名为 “DateOfBirth” 的列。
我们使用下面的 SQL 语句:
ALTER TABLE Persons
ADD DateOfBirth date
请注意,新列 “DateOfBirth” 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型。
改变数据类型实例
现在,我们想要改变 “Persons” 表中 “DateOfBirth” 列的数据类型。
使用下面的 SQL 语句:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year
注意,现在 “DateOfBirth” 列的类型是 year,可以存放 2 位或 4 位格式的年份。
DROP COLUMN 实例
接下来,我们想要删除 “Person” 表中的 “DateOfBirth” 列。
我们使用下面的 SQL 语句:
ALTER TABLE Persons
DROP COLUMN DateOfBirth
SQL AUTO INCREMENT 字段
SQL AUTO INCREMENT 字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
以下SQL语句将 “Persons” 表中的“ID”列定义为自动递增(auto-increment)主键字段:
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
);
MySQL使用AUTO_INREMENT关键字来执行自动增量( auto-increment )任务。
默认情况下,AUTO_INREMENT的起始值为1,每个新记录增加1。
若要以其他值开始AUTO_INREMENT序列,使用以下SQL语法:
ALTER TABLE Persons AUTO_INCREMENT=100
SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
SQL 视图(Views)
视图是可视化的表。
SQL CREATE VIEW 语句
在 SQL 中,视图是基于 SQL 语句的结果集的可视化表。
视图包含行和列,就像真正的表一样。视图中的字段是一个或多个数据库中真实表中的字段。
SQL CREATE VIEW 语法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最新数据!每当用户查询视图时,数据库引擎就使用视图的 SQL 语句重新构建数据。
SQL CREATE VIEW 实例
“Current Product List”(当前产品列表)视图从"Products"表中列出了所有正在使用的产品(未停产的产品)。这个视图使用下面的 SQL 创建:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No;
我们可以像这样查询上面这个视图:
SELECT * FROM [Current Product List];
Northwind 样本数据库的另一个视图会选取 “Products” 表中所有单位价格高于平均单位价格的产品:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) ;
我们可以像这样查询上面这个视图:
SELECT * FROM [Products Above Average Price];
Northwind 样本数据库的另一个视图会计算在 1997 年每个种类的销售总数。注意,这个视图会从另一个名为 "Product Sales for 1997" 的视图那里选取数据:
CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName;
我们可以像这样查询上面这个视图:
SELECT * FROM [Category Sales For 1997];
我们也可以向查询添加条件。现在,我们仅仅需要查看 “Beverages” 类的销售总数:
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages' ;
SQL 更新视图
您可以使用下面的语法来更新视图:
SQL CREATE OR REPLACE VIEW 语法
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
现在,我们希望向 “Current Product List” 视图添加 “Category” 列。我们将通过下列 SQL 更新视图:
CREATE OR REPLACE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
SQL 撤销视图
您可以通过 DROP VIEW 命令来删除视图。
SQL DROP VIEW 语法
DROP VIEW view_name;
SQL Server 和 MySQL 中的 Date 函数
SQL Date 函数
注意:当我们处理日期时,最困难的任务可能是确保插入日期的格式与数据库中日期列中的格式相匹配。
只要你的数据仅包含日期的一部分,运行查询就不会成为问题。然而,当涉及到时间时,情况会稍微复杂一些。
在讨论日期查询的复杂性之前,让我们看看最重要的内置日期处理程序。
MySQL Date 函数
SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或时间值:
DATE - 格式:YYYY-MM-DD
DATETIME - 格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
YEAR - 格式:YYYY 或 YY
SQL Server 使用下列数据类型在数据库中存储日期或时间值:
DATE - 格式:YYYY-MM-DD
DATETIME - 格式:YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式:唯一的数字
注释:在数据库中创建新表时,需要为该列选择数据类型!
SQL NULL 值 – IS NULL 和 IS NOT NULL
SQL NULL 值
NULL 空值代表丢失的未知数据。
默认情况下,表列可以保存 NULL 值。
SQL IS NULL
如何选择 “Address” 列中有 NULL 值的记录?
我们必须使用 IS NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL;
SQL IS NOT NULL
如何能选择 “Address” 列中没有 NULL 值的记录?
我们必须使用 IS NOT NULL 操作符:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL