赞
踩
DISTINCT
关键字SELECT name FROM user limit 5;
SELECT name FROM user limit 5 offset 5;
#
,这一整行都将作为注释。/**/
SELECT
语句检索出来的数据,可使用ORDER BY
子句。
ORDER BY
子句取一个或多个列的名字,据此对输出进行排序。ORDER BY
子句的位置
ORDER BY
子句的事后,应该确保它是SELECT
语句的最后一条子句。如果它不是最后一条子句,将会出现错误信息。ORDER BY
还支持按照相对位置进行排序。SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3;
DESC
.ASC
WHERE
子句
ORDER BY
和WHERE
子句,应该让ORDER BY
位于WHERE
之后,否则将会产生错误。WHERE
子句操作符
SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01'
和 SELECT vend_id, prod_name FROM Products WHERE vend_id != 'DLL01'
。BETWEEN
操作符。NULL
,不能简单地检查是否=NULL
SELECT prod_name FROM Products WHERE prod_price IS NULL
NULL
值的行。但是这做不到,因为未知(unknown)有特殊的含义,数据库不知道他们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。WHERE
子句。这些子句有两种使用方式,即以AND
和OR
子句的方式使用。
WHERE
子句中的子句的关键字,也称为逻辑运算符(logical operation)AND
操作符
AND
操作符给WHERE
子句附加条件。SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4;
OR
操作符
AND
操作符相反AND
和OR
操作符的WHERE
子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序。IN
操作符
IN
操作符用来指定条件范围。NOT
操作法
NOT
操作符只有一格功能,否定其后所跟的任何条件。Fish
起头的产品:SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'Fish%';
# 执行这条语句将检索任意以Fish起头的词。SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '%began bag%';
# 搜索模式’%began bag%'表示任何位置商包含文本began bag
的值,不论它之前或之后出现什么字符。SELECT prod_name FROM Products WHERE prod_name LIKE 'F%y';
# 有一种情况下把通配符放在中间是有用的,比如WHERE email LIKE b%forta.com
SELECT prod_name LIKE %
不会匹配产品名称为NULL
的行%
一样,但它只匹配单个字符,而不是多个字符。SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear'
# 注意后面的空格_
总是刚好匹配一格字符,不能多也不能少,与%匹配0个不一样。SELECT vend_name + '(' + vend_country + ')' FROM Vendors ORDER BY vend_name
SELECT vend_name || '(' || vend_contry || ')' FROM Vendors ORDER BY vend_name;
AS
关键字赋予。SELECT RTRIM(vend_name) + '(' + RTRIM(vend_contry) + ')' AS vend_title FROM Vendors ORDER BY vend_name;
SELECT prod_id, quantity, item_price, quantity * item_price AS expand_price FROM OrderItems WHERE order_num = 20008;
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM Vendors ORDER BY vend_name;
SELECT order_num FROM Orders WHERE YEAR(order_date) = 2012;
AVG()
:返回某列的平均值COUNT()
: 计算某列的行数MAX()
:返回某列的最大值MIN()
: 返回某列的最小值SUM()
: 返回某列值值和AVG()
通过对表中行数计算并计算其列值之和。SELECT AVG(prod_price) AS avg_price FROM Products;
AVG()
函数忽略值为NULL的行COUNT()
函数进行计数。COUNT()
函数两种使用方式
COUNT(*)
对表中数目进行计算,不管表列中是否包含的是空值(NULL)还是非空值COUNT(column)
对特定列中具有值的行进行计算,忽略NULL值SELECT MAX(prod_price) AS max_price FROM Products;
MAX()
,用于文本数据时,MAX()
返回按该列排序后的最后一行。SELECT MIN(prod_price) AS min_price FROM Products
SELECT SUM(quantity) AS items_ordered FROM OrderItems WHERE order_num = 2005;
DISTINCT
不能用于COUNT(*)
DISTINCT
只能用于COUNT
。DISTINCT
不能用于COUNT(*)
。类似地,DISTINCT
必须使用列名,不能用于计算或表达式。SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
MAX(prod_price) AS price_avg
FROM Products
SELECT COUNT(*) AS num_prods FROM Products WHERE vend_id = 'DLL01'
SELECT
和GROUP BY
子句。SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id
HAVING
非常类似于WHERE
。事实上,目前所有类型的WHERE
都可以用HAVING
来代替。唯一的差别,WHERE
过滤行,而HAVING
过滤分组。SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
GROUP BY
和ORDER BY
完成相同工作。ORDER BY
对产生的输出排序,任意列都可以使用,但不一定需要。GROUP BY
子句时,应该也使用ORDER BY
子句。这是保证数据正确排序的唯一方法。千万不要依赖GROUP BY
排序数据。SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY order_num
HAVING COUNT(*) >= 3
SELECT cust)id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01');
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Order
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RANGE01'));
SELECT cust_name,
cust_state,
(SELECT Orders
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name;
CREATE TABLE
Products
CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
prod_vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8, 2) NOT NULL,
prod_desc VARCHAR(1000) NULL
)
CREATE TABLE Vendors
(
vend_id CHAR(10) NOT NULL,
vend_name CHAR(50) NOT NULL,
vend_city CHAR(50) ,
vend_zip CHAR(10)
);
CREATE TABLE
语句的列定义中用关键字DEFAULT
指定。CREATE TABLE OrderItems
(
order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
item_price DECIMAL(8,2) NOT NULL
);
ALTER TABLE
语句。ALTER TABLE Vendors
ADD vend_phone CHAR(20);
ALTER TABLE Vendors
DROP COLUMN vend_phone
ALTER TABLE
ALTER TABLE
要极为小心,应该在进行该动前做完整的备份。(模式和数据的备份)。数据表的更改不能撤销,如果增加了不需要的列,业务无法删除他们。DROP TABLE CustCopy;
RENAME
语句。INSERT INTO TABLE Customer
VALUES ('1004',
'Toy Land'
);
INSERT
一般用来给表插入具有指定列的值的行。INSERT
还存在另外一种形式,可以利于它将SELECT
语句的结果插入表中。这就是所谓的INSERT SELECT
.INSER INTO Customers(
cust_id,
cust_contact)
SELECT cust_id,
cust_contact
FROM Custnew;
INSERT
语句。要将表的内容复制到另一个全新的表,可以使用SELECT INTO
.SELECT *
INTO CustCopy
FROM Customer;
UPDATE
UPDATE Customer
SET cust_email = 'abc123@163.com'
WHERE cust_id = '11'
DELETE
DELETE FROM Customer
WHERE cust_id = '100';
TRUNCATE TABLE;
语句UPDATE
和DELETE
时所遵循的原则
WHERE
子句的UPDATE
和DELETE
WHERE
那样使用它。UPDATE
或DELETE
语句使用WHERE
子句之前,应该先使用SELECT
进行测试,确保它过滤的是正确的记录,以防止编写的WHERE
子句不正确。SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
AND prod_id = 'RGAN01';
CREATE VIEW
来创建视图。只能用于创建不存在的视图。删除视图使用DROP VIEW
,覆盖更新视图需要先删除存在的视图。CREATE VIEW ProductCustomer AS
SELECT custom_id, custom_contact, prod_id
FROM Customer, Orders, OrderItems
WHERE Customer.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num;
SELECT custom, cust_content
FROM ProductCustomer
WHERE prod_id = 'RGAN01';
SELECT
能执行的最重要动作。SELECT RTRIM(vend_name) + '(' + RTRIM(vend_price) + ')'
AS vend_title
FROM Vendors
ORDER BY vend_name;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。