SQL系统性讲解

2.1.检索单个列
SELECT prod_name
FROM Products;

2.2.检索多个列
SELECT prod_id,prod_name,prod_price
FROM Products;

2.3.检索所有列
SELECT *
FROM Products;

3.1 排序数据
SELECT prod_name
FROM Products
ORDER BY prod_name;

3.2 按多个列排序
SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY prod_price,prod_name;

3.3按列位置排序
SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY 2,3;
跟上面的一样

3.4 指定排序方向
降序
SELECT prod_id,proc_price,prod_name
FROM Products
ORDER BY prod_price DESC;

SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY prod_price DESC,prod_name;

过滤数据
4.1 使用WHERE子句
SELECT prod_name,prod_price
FROM Products
WHERE prod_price = 3.49;

4.2 WHERE子句操作符
在这里插入图片描述
4.2.1 检查单个值
SELECT prod_name,prod_price
FROM Products
WHERE prod_price < 10;

SELECT prod_name,prod_price
FROM Products
WHERE prod_price <= 10;

4.2.2 不匹配检查
SELECT vend_id,prod_name
FROM Products
WHERE vend_id <> ‘DLL01’;

SELECT vend_id,prod_name
FROM Products
WHERE vend_id != ‘DLL01’;

4.2.3 范围值检查
SELECT prod_name,prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;

4.2.4 空值检查
SELECT prodname
FROM Products
WHERE prod_price IS NULL;

SELECT vend_id
FROM Vendors
WHERE vend_state IS NULL;

高级数据过滤
5.1 组合WHERE子句

5.1.1 AND操作符号
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE vend_id = ‘DLL01’ AND prod_price <= 4;

5.1.2 OR操作符号
SELECT prod_name, prod_price
FROM Products
WHERE vend_id= ‘DLL01’ OR vend_id= ‘BRS01’;

5.1.3 计算次序
优先处理AND
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’
AND prod_price >= 10;

SELECT prod_name,prod_price
FROM Products
WHERE (vend_id= ‘DLL01’ OR vend_id= ‘BRS01’)
AND prod_price >=10;

5.2 IN操作符
SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN (‘DLL01’, ‘BRS01’)
ORDER BY prod_name;

SELECT prod_name,prod_price
FROM Products
WHERE vend_id = ‘DLL01’ OR vend_id = 'BRS01;
ORDER BY prod_name;

5.3 NOT操作符
SELECT prod_name
FROM Products
WHERE NOT vend_id = ‘DLL01’
ORDER BY prod_name;

SELECT prod_name
FROM Products
WHERE vend_id <> ‘DLL01’
ORDER BY prod_name;

通配符进行过滤
6.1 LIKE操作符
通配符 (wildcard) 用来匹配值的一部分的特殊字符

搜索模式(search pattern) 由字面值,通配符或两者组合构成的搜索条件

6.1.1 百分号(%)通配符
Fish开头
SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE ‘Fish%’;

匹配任何位置包含文件bean bag的值
SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE ‘%bean bag%’;

以F开头,y结尾
SELECT prod_name
FROM Products
WHERE prod_name LIKE ‘F%y’;

6.1.2 下划线 (_) 通配符
只能匹配单个字符

SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE ‘_ inch teddy bear’;

SELECT prod_id,prod_name
FROM Products
WHERE prod_name LIKE ‘% inch teddy bear’;

6.1.3 方括号 ([]) 统配符
用来指定一个字符集,必须匹配指定位置的一个字符
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE ‘[JM]%’
ORDER BY cust_contact;

^表示否定
SELECT cust_contact
FROM Customers
WHERE cust_contact LINKE ‘[^JM]%’
ORDER BY cust_contact;

与上面相同
SELECT cust_contact
FROM Customers
WHERE NOT cust_contact LIKE ‘[JM]%’
ORDER BY cust_contact;

6.2 使用通配符的技巧
不要过分使用通配符.
除非绝对有必要,否则不要把它们用在搜索模式的开始处.
注意通配符的位置.

创建计算字段
7.1 计算字段
字段(field) 基本上与列(column)的意思相同.

7.2 拼接字段
拼接(concatenate) 将值联结到一起构成单个值.

SELECT vend_name + ‘(’ + vend_country + ‘)’
FROM Vendors
ORDER BY vend_name;

SELECT vend_name || ‘(’ || vend country || ‘)’
FROM Vendors
ORDER BY vend_name;
上面两个都相同

如果要去掉空格,下面两个都相同
SELECT RTRIM(vend_name) + ‘(’ + RTRIM(vend_country) + ‘)’
FROM Vendors
ORDER BY vend_name;

SELECT RTRIM(vend_name) || ‘(’ || RTRIM(vend_country) || ‘)’
FROM Vendors
ORDER BY vend_name;

RTRIM()函数去掉值右边的所有空格

使用别名(alias)
AS
SELECT RTRIM(vend_name) + ‘(’ + RTRIM(vend_country) + ‘)’ AS vend_title
ORDER BY vend_name;

SELECT RTRIM(vend_name) || ‘(’ || RTRIM(vend_country) || ‘)’ AS vend_title
FROM Vendors
ORDER BY vend_name;

7.3 执行算术计算
SELECT prod_id,quantity,item_price
FROM OrderItems
WHERE order_name = 20000;

SELECT prod_id,
quantity,
item_price,
quantity*item_price AS
expanded_price
FROM OrderItems
WHERE Order_num = 20000;

在这里插入图片描述
使用数据处理函数
8.1 函数
在这里插入图片描述
8.2.1 文本处理函数
UPPER()
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;

在这里插入图片描述
SELECT cust_name,cust_contact
FROM Customers
WHERE cust_contact = ‘Michael Green’;

SOUNDEX()匹配所有发音类似于Michael Green 的联系名:
SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX (‘Michael Green’);

8.2.2 日期和时间处理函数

DATEPART

SQL Server版本
SELECT order_num
FROM Orders
WHERE DATEPART(yy, order_date)=2004;

Access版本
SELECT order_num
FROM
WHERE DATEPART(‘yyyy’,order_date)=2004;

PostgreSQL版本
SELECT order_num
FROM Orders
WHERE DATE_PART(‘year’,order_date)=2004;

MySQL版本
SELECT order_num
FROM Orders
WHERE YEAR(order_date)=2004;

Oracle版本
SELECT order_num
FROM Orders
WHERE to_number(to_char(order_date,‘YY’))=2004;

使用BETWEEN
SELECT order_num
FROM Orders
WHERE order_date BETWEEN to_date(‘01-JAN-2004’)
AND to_date(‘31-DEC-2004’);

8.2.3 数值处理函数
在这里插入图片描述
汇总数据
9.1 聚集函数
聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数

在这里插入图片描述
9.1.1 AVG()函数
SELECT AVG(prod_price) AS avg_price
FROM Products;

SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = ‘DLL01’;

9.1.2 COUNT()函数
SELECT COUNT(*) AS num_cust
FROM Customers;

SELECT COUNT(cust_email) AS num_cust
FROM Customers;

9.1.3 MAX()函数
SELECT MAX(prod_price) AS max_price
FROM Products;

9.1.4 MIN()函数
SELECT MIN(prod_price) AS min_price
FROM Products;

9.1.5 SUM()函数
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005;

SELECT SUM(item_price*quantity) AS total_price
FROM OrderItems
WHERE order_num = 20005;

9.2 聚聚不同值
使用distinct会抬高prod_price
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = ‘DLL01’;

ALL为默认,不需要指定
只包含不同的值,指定distinct参数
如果指定列名,distinct只能用于count()

9.3 组合聚集函数
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products;

分组数据
10.1 数据分组
SELECT COUNT(*) AS num_prods
FROM Products
WHERE vend_id = ‘DLL01’;

10.2 创建分组
SELECT vend_id,COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;

10.3 过滤分组
HAVING过滤掉<2的
SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT ( * ) >=2;

过滤是基于分组聚集值而不是特定行值的

如果没有WHERE将会多出一行
SELECT vend_id, COUNT( * ) AS num_prods
FROM Products
WHERE prod_price >=4
GROUP BY vend_id
HAVING COUNT ( * ) >=2;

10.4 分组和排序
在这里插入图片描述

SELECT order_num, COUNT (*) AS items
FROM OrderItems
GROUP BY order_num
HAVING COUNT ( * ) >=3;

SELECT order_name, COUNT ( * ) AS items
FROM OrderItems
GROUP BY order_name
HAVING COUNT ( * ) >=3
ORDER BY items, order_num;

10.5 SELECT子句顺序
在这里插入图片描述
使用字查询
查询(query) 任何SQL语句都是查询的.一般指SELECT语句.
子查询(subquery)

11.2 利用子查询进行过滤
SELECT order_name
FROM OrderItems
WHERE prod_id = ‘RGAN01’;

SELECT cust_id
FROM Orders
WHERE order_num IN (20007,20008);

SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id =(‘RGAN01’);

检索两列的SQL语句
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (‘1000000004’,‘1000000005’);

SELECT cust_name,cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = ‘RGAN01’));

11.3 作为计算字段使用子查询
SELECT COUNT(*) AS orders
FROM Orders
WHERE cust_id = ‘1000000001’;

SELECT cust_name,cust_state,(SELECT COUNT(*) FROM Orders
WHERE Orders, cust_id = Customers.cust_id)
AS orders
FROM Customers
ORDER BY cust_name;

SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE cust_id = cust_id) AS orders
FROM Customers
ORDER BY cust_name;

联结表
12.1 联结
join
12.1.1 关系表
12.1.2 为什么要使用联结
12.2 创建联结
从两张表中选出相同特征的
SELECT vend_name,prod_name,prod_price
FROM Vendors,Products
WHERE Vendors.vend_id = Products.vend_id;

12.2.1 WHERE子句的重要性
SELECT vend_name,prod_name,prod_price
FROM Vendors,Products;

12.2.2 内部联结
INNER JOIN…ON…
SELECT vend_name,prod_name,prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id

12.2.3 联结多个表
SELECT prod_name,vend_name,prod_price,quantity
FROM OrderItems,Products,Vendors
WHERE Products.vend_id = Vendors.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num = 20007;

SELECT cust_name,cust_contact
FROM Customers
WHERE cust_id IN (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,Orders,OrderItems
WHERE Customers,cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
AND prod_id = ‘RGAN01’;

创建高级联结
13.1 使用表别名
SELECT RTRIM(vend_name) + ’ (’ + RTRIM(vend_country)
+ ’ ) ’ AS vend_title
FROM Vendors
ORDER BY vend_name;

SELECT cust_name, cust_contact
FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id = ‘RGAN01’;

13.2 使用不同类型的联结
13.2.1 自联结
SELECT cust_id,cust_name,cust_contact
FROM Customers
WHERE cust_name = (SELECT cust_name
FROM Customers
WHERE cust_contact = ’ Jim Jones ’ );

SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers AS c1, Customers AS c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = ’ Jim Jones ';

13.2.2 自然联结
SELECT C.*, O.order_num, O.order_date, OI.prod_id, OI.quantity,OI.item_price
FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id = ‘RGAN01’;

13.2.3 外部联结
包含了那些在相关表中没有关联行的行称为外部联结
SELECT Customers.cust_id, Orders.order_num
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id;

外部联结必须包含LEFT或RIGHT
LEFT OUTER JOIN … ON …
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;

RIGHT OUTER JOIN … ON …
SELECT Customers.cust_id, Orders.order_num
FROM Customers RIGHT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;

*=用来指定应该包括Customers表中的每一行,为左外联结操作符.
SELECT Customers.cust_id,Orders.order_num
FROM Customers,Orders
WHERE Customers.cust_id *= Orders.cust_id;

=为右外联结操作符
SELECT Customers.cust_id,Orders.order_num
FROM Customers,Orders
WHERE Orders.cust_id =
Customers.cust_id;

Oracle版本
SELECT Customers.cust_id,Orders.order_num
FROM Customers,Orders
WHERE Customers.cust_id (+) = Orders.cust_id;

Access,MYSQK,SQL Server或Sybase不支持的FULL OUTER JOIN
SELECT Customers.cust_id, Orders.order_num
FROM Orders FULL OUTER JOIN Customers
ON Orders.cust_id = Customers.cust_id;

13.3 使用带聚集函数的联结
SELECT Customers.cust_id, COUNT(Orders.order_num) AS num_ord
FROM Customers INNER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;

SELECT Customers.cust_id, COUNT(Orders.order_num0 AS num_ord
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id
GROUP BY Customers.cust_id;

Oracle没有AS

13.4 使用联结和联结条件

组合查询
14.1 组合查询
14.2 创建组合查询
14.2.1 使用UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ( ‘IL’, ‘IN’, ‘MI’ );

SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = ’ Fun4All ’ ;

组合这两条语句
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 ';

SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ( ‘IL’, ‘IN’, ‘MI’ )
OR cust_name = ‘Fun4All’;

14.2.2 UNION规则

14.2.3 包含或取消重复的行
返回所有匹配行
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ( ‘IL’, ‘IN’, ‘MI’ )
UNION ALL
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = ‘Fun4All’;

14.2.4 对组合查询结果排序
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’
ORDER BY cust_name, cust_contact;

插入数据
15.1 数据插入
15.1.1 插入完整的行
INSERT INTO Customers
VALUES(’ 1000000006’,
‘Toy Land’,
‘123 Any Street’,
‘New York’,
‘NY’,
‘11111’,
‘USA’,
NULL,
NULL);
编写INSERT语句更安全
INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust-country,
cust_contact,
cust_email)
VALUES(’ 1000000006’,
‘Toy Land’,
‘123 Any Street’,
‘New York’,
‘NY’,
‘11111’,
‘USA’,
NULL,
NULL);
顺序不同,但是给了列名,插入的结果仍然正确

15.1.2 插入部分行
可以缺省
15.1.3 插入检索出的数据
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;

15.2 从一个表复制到另一个表
SELECT *
INTO CustCopy
FROM Customers;

CREATE TABLE CustCopy AS
SELECT *
FROM Customers;

跟新和删除数据
UPDATE Customers
SET cust_email = ‘kim@thetoystore.com’
WHERE cust_id = ‘100000005’;

UPDATE Customers
SET cust_contact = ‘Sam Roberts’,
cust_email = ‘sam@toyland.com’
WHERE cust_id =‘1000000006’;

去值
UPDATE Customers
SET cust_email = NULL
WHERE cust_id = ‘10000005’;

删除数据
DELETE FROM Customers
WHERE cust_id = ‘1000000006’;

16.3 更新和删除的指导原则

创建和操纵表
17.1 创建表
17.1.1 表创建基础
CREATE TABLE Products
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL
);

17.1.2 使用NULL值
CREATE TABLE Orders
(
order_num INTEGER NOT NULL,
order_date DATETIME NOT NULL,
cust_id CHAR(10) NOT NULL
);

默认NULL
CREATE TABLE Vendors
(
vend_id CHAR(10) NOT NULL,
vend_name CHAR(50) NOT NULL,
vend_address CHAR(50) ,
vend_city CHAR(50) ,
vend_state CHAR(5) ,
vend_zip CHAR(10) ,
vend_country CHAR(50)
);

17.1.3 指定默认值
关键字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
);

在这里插入图片描述
17.2 更新表
ALTER TABLE Vendors
ADD vend_phone CHAR(20);

这个不是所有DBMS都可以用
ALTER TABLE Vendors
DROP COLUMN vend_phone;

17.3 删除表
DROP TABLE CustCopy;

17.4 重命名表
RENAME
使用视图

18.1 视图
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’;

SELECT cust_name,cust_contact
FROM ProductCustomers
WHERE prod_id = ‘RGAN01’;

18.1.1 为什么使用视图
18.1.2 视图的规则和限制
18.2 创建视图
18.2.1 利用视图简化复杂的联结
联结三个表
CREATE VIEW ProductCustomers AS
SELECT cust_name, cust_contact,prod_id
FROM Customers,Orders,OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order.num;

SELECT * FROM ProductCustomers

SELECT cust_name, cust_contact
FROM ProductCustomers
WHERE prod_id = ‘RGAN01’;

18.2.2 用视图重新格式化检索出的数据
SELECT RTRIM(vend_name) + ‘(’ + RTRIM(vend_country)
+ ‘)’ AS vend_title
FROM Vendors
ORDER BY vend_name;

CREATE VIEW VendorLocations AS
SELECT RTRIM(vend_name) + ’ (’ + RTRIM(vend_country)
+ ’ )’ AS vend_title
FROM Vendors;

SELECT *
FROM VendorLocations;

18.2.3 用视图过滤不想要的数据
CREATE VIEW CustomerEMailList AS
SELECT cust_id, cust_name, cust_email
FROM Customers
WHERE cust_email IS NOT NULL;

SELECT *
FROM CustomerEMailList;

18.2.4 使用视图与计算字段
SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_numj = 20000;

CREATE VIEW OrderItemExpanded AS
SELECT order_num,
prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OrderItems;

SELECT *
FROM OrderItemsExpanded
WHERE order_name = 20000;

使用存储过程
19.1 存储过程
19.2 为什么要使用存储过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
19.3 执行存储过程
EXECUTE
AddNewProduct定义为存储过程自身的组成部分
EXECUTE AddNewProduct( ‘JTS01’,
‘Stuffed Eiffel Tower’,
6.49,
‘Plush stuffed toy with the text La Tour Eiffel in red white and blue’)

存储过程所完成的工作
在这里插入图片描述
在这里插入图片描述

19.4 创建存储过程
Oracle版本
CREATE PROCEDURE MailingListCount
(ListCount OUT NUMBER)
IS
BEGIN
SELECT * FROM Customers
WHERE NOt cust_email IS NULL;
ListCount := SQL%ROWCOUNT;
END;
在这里插入图片描述

Microsoft SQL Server
CREATE PROCEDURE MailingListCount
AS
DECLARE @cnt INTEGER
SELECT @cnt = COUNT(*)
FROM Customers
WHERE NOT cust_email IS NULL;
RETURN @cnt;
在这里插入图片描述
SQL Server
在这里插入图片描述
在这里插入图片描述
管理事务处理
20.1 事务处理
transaction processing
在这里插入图片描述
20.2 空值事务处理
标识开始和结束
sql server
BEGIN TRANSACTION

COMMIT TRANSACTION

MYSQL
START TRANSACTION

20.2.1 使用ROLLBACK
回撤
DELETE FROM Orders;
ROLLBACK;

20.2.2 使用COMMIT
隐含提交implicit commit
SQL Server
BEGIN TRANSACTION
DELETE OrderItems WHERE order_num = 123456
DELETE Orders WHERE order_num = 123456
COMMIT TRANSACTION

20.2.3 使用保留点
MYSQL,Oracle
保留点
SAVEPOINT delete;

SQL Server,Sybase
SAVE TRANSACTION delete1;

SQL Server
ROLLBACK TRANSCATION delete1;

MYSQL,Oracle
ROLLBACK TO delete1;

SQL Server完整例子
在这里插入图片描述

在这里插入图片描述
使用游标
21.1 游标
21.1 使用游标
在这里插入图片描述
在这里插入图片描述
21.2.1 创建游标
DB2,SQL Server ,Sybase
在这里插入图片描述
Oracle PostgreSQL
在这里插入图片描述
21.2.2 使用游标
OPEN CURSOR CustCursor
在这里插入图片描述
FETCH用来检索当前行(自动从第一行开始)到声明的变量CustRecord中.

Oracle
在这里插入图片描述
从第一行到最后一行,对检索出来的数据进行循环.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
21.2.3 关闭游标
CLOSE CustCursor
SQL Server
CLOSE CustCursor
DEALLOCATE CURSOR CustCursor

在这里插入图片描述
了解高级SQL特性
22.1 约束
22.1.1 主键
在这里插入图片描述
在这里插入图片描述
添加主键
在这里插入图片描述
22.1.2 外键
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
22.1.3 唯一约束
在这里插入图片描述
22.1.4 检查约束
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
22.2 索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
22.3 触发器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SQL Server
在这里插入图片描述
Oracle PostgreSQL
在这里插入图片描述
在这里插入图片描述
22.4 数据库安全
在这里插入图片描述
A样例脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
A.2 获得样例表
http://www.forta.com/books/0672325675/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SQL语句的语法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调的小哥哥

你的关注就是我为你服务的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值