1、TOP
# 在 SQL Server 中使用 SELECT 时,可以用 TOP 关键字来限制最多返回多少行
SELECT TOP 5 prod_name
FROM Products;
# 在MySQL中用LIMIT实现
SELECT prod_name
FROM Products
LIMIT 5;
2、WHERE
<> --不等于
!< --不小于
!> --不大于
IS NULL --为空值
# IN IN 的最大优点是可以包含其他 SELECT 语句,能够更动态地建立WHERE 子句
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01')
ORDER BY prod_name;
3、通配符
_ # 它只匹配单个字符,而不是多个字符。
% # 匹配多个字符
4、连接
# Contact
SELECT Concat(vend_name, ' (', vend_country, ')')
FROM Vendors
ORDER BY vend_name;
# TRIM 函数
# 大多数 DBMS 都支持 RTRIM()(正如刚才所见,它去掉字符串右边的
# 空格)、LTRIM()(去掉字符串左边的空格)以及 TRIM()(去掉字符
# 串左右两边的空格)。
SELECT Concat(RTrim(vend_name), ' (',
RTrim(vend_country), ')') AS vend_title
FROM Vendors
ORDER BY vend_name
5、COUNT
# 使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
# 使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值。
6、语句顺序
7、子查询
# 注意:只能是单列
# 作为子查询的 SELECT 语句只能查询单个列。企图检索多个列将返回错误。
SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01');
# 作为计算字段使用子查询
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name;
8、联表查询
# 笛卡儿积(cartesian product)
# 由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目
# 将是第一个表中的行数乘以第二个表中的行数。
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products;
# 内联结
SELECT vend_name, prod_name, prod_price
FROM Vendors
INNER JOIN Products ON Vendors.vend_id = Products.vend_id;
#另一种不规范的写法
SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Vendors.vend_id = Products.vend_id;
9、UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
# 使用 UNION ALL的话,DBMS 不取消重复的行。
# 两个查询语句的列名要一致,不一致的话会返回第一个列名
10、插入语句
INSERT INTO Customers(cust_id,cust_contact,cust_email,
cust_name,cust_address,cust_city,
cust_state,cust_zip)
VALUES(1000000006,NULL,NULL,'Toy Land',
'123 Any Street','New York','NY','11111');
# 插入查询到的结果
INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;
11、更新语句
UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = 'sam@toyland.com'
WHERE cust_id = 1000000006;
12、删除语句
DELETE FROM Customers
WHERE cust_id = 1000000006;
# 如果想从表中删除所有行,不要使用 DELETE。可使用 TRUNCATE TABLE
# 语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。
# 删除某列的值
UPDATE table_name SET column_name=NULL WHERE condition;
# 删除某列
ALTER TABLE table_name DROP COLUMN column_name;
13、创建索引
CREATE INDEX prod_name_ind
ON Products (prod_name);