首页
论坛
门户
空间
手机版
IXPUB
插件
收藏
设置
注册
登录
商店
搜索
培训
Wiki
Blog
归档
丛书
退出
ITPUB论坛
»
移动及嵌入式数据库
» 《SQL Anywhere Studio 9开发指南》代码
‹‹ 上一主题
|
下一主题 ››
55
1/6
1
2
3
4
5
6
››
投票
交易
悬赏
活动
评价
|
打印
|
推荐
|
订阅
|
收藏
标题:
[参考文档]
《SQL Anywhere Studio 9开发指南》代码
ninetailsfox
老会员
精华贴数 0
个人空间
0
技术积分 2440 (647)
社区积分 0 (1542575)
注册日期 2007-9-5
论坛徽章:2
#1
使用道具
发表于 2007-11-14 18:55
《SQL Anywhere Studio 9开发指南》代码
Code Examples from SQL Anywhere Studio 9
Breck Carter [
bcarter@risingroad.com
,
www.risingroad.com
]
ISBN 1-55622-506-7 Copyright © 2004 Wordware Publishing, Plano, Texas [
www.wordware.com/computer
]
Here are all the code examples from SQL Anywhere Studio 9,
arranged by chapter and section and presented in a format that's easy
to copy and paste.
If you have any questions or comments, please write to me at
bcarter@risingroad.com
.
Also see the BNF Syntax file.
只看该作者
ninetailsfox
老会员
精华贴数 0
个人空间
0
技术积分 2440 (647)
社区积分 0 (1542575)
注册日期 2007-9-5
论坛徽章:2
#2
使用道具
发表于 2007-11-14 18:56
Chapter
--------------------------------------------------------------------------------
Section
--------------------------------------------------------------------------------
1 - Creating
2 - Inserting
3 - Selecting
4 - Updating
5 - Deleting
6 - Fetching
7 - Synchronizing
8 - Packaging
9 - Protecting
10 - Tuning
只看该作者
ninetailsfox
老会员
精华贴数 0
个人空间
0
技术积分 2440 (647)
社区积分 0 (1542575)
注册日期 2007-9-5
论坛徽章:2
#3
使用道具
发表于 2007-11-14 18:59
CHAPTER 1 - CREATING
1.1 Introduction [Top]
1.2 Codd's 12 Rules For Relational Databases
1.3 Five Types of Tables
1.4 Global Permanent Table
-----------------------------------------------------------------------------------
CREATE TABLE t1 (
key_1 INTEGER NOT NULL PRIMARY KEY,
non_key_1 VARCHAR ( 100 ) NOT NULL,
non_key_2 VARCHAR ( 100 ) NOT NULL );
-----------------------------------------------------------------------------------
1.5 Data Types [Top]
-----------------------------------------------------------------------------------
1.5.1 A String Is A String: BINARY, CHARACTER, LONG
-----------------------------------------------------------------------------------
1.5.2 Dates and Times
-----------------------------------------------------------------------------------
1.5.3 Exact Decimals
-----------------------------------------------------------------------------------
2 + TRUNCNUM ( ( p - s + 1 ) / 2, 0 ) + TRUNCNUM ( ( s + 1 ) / 2, 0 )
-----------------------------------------------------------------------------------
1.5.4 Floating Point Numbers
-----------------------------------------------------------------------------------
1.5.5 Binary Integers
-----------------------------------------------------------------------------------
1.5.6 Literals
-----------------------------------------------------------------------------------
1.6 Column Properties
-----------------------------------------------------------------------------------
1.7 Computed Columns
-----------------------------------------------------------------------------------
CREATE TABLE street (
pkey INTEGER NOT NULL DEFAULT AUTOINCREMENT,
street_name VARCHAR ( 100 ) NOT NULL,
range_part_1 INTEGER NOT NULL,
range_part_2 VARCHAR ( 100 ) NOT NULL,
postal_code VARCHAR ( 6 ) NOT NULL,
PRIMARY KEY ( pkey ) );
SELECT *
FROM street
WHERE street_name LIKE 'GRAND%'
AND postal_code LIKE 'L6H5%';
-----------------------------------------------------------------------------------
CREATE TABLE street (
pkey INTEGER NOT NULL DEFAULT AUTOINCREMENT,
fast_search VARCHAR ( 5 ) NOT NULL
COMPUTE ( STRING ( LEFT ( postal_code, 3 ),
LEFT ( street_name, 2 ) ) ),
street_name VARCHAR ( 100 ) NOT NULL,
range_part_1 INTEGER NOT NULL,
range_part_2 VARCHAR ( 100 ) NOT NULL,
postal_code VARCHAR ( 6 ) NOT NULL,
PRIMARY KEY ( pkey ) );
-----------------------------------------------------------------------------------
CREATE CLUSTERED INDEX xfast ON street ( fast_search );
SELECT *
FROM street
WHERE fast_search = 'L6HGR'
AND street_name LIKE 'GRAND%'
AND postal_code LIKE 'L6H5%';
-----------------------------------------------------------------------------------
CREATE TABLE t (
pkey INTEGER NOT NULL DEFAULT AUTOINCREMENT,
x INTEGER,
y INTEGER,
z INTEGER,
PRIMARY KEY ( pkey ) );
SELECT * FROM t WHERE ( x + y + z ) BETWEEN 1501 AND 1510;
-----------------------------------------------------------------------------------
SELECT EXPRTYPE ( 'SELECT ( x + y + z ) FROM t', 1 );
-----------------------------------------------------------------------------------
CREATE TABLE t (
pkey INTEGER NOT NULL DEFAULT AUTOINCREMENT,
x INTEGER,
y INTEGER,
z INTEGER,
xyz INTEGER COMPUTE ( x + y + z ),
PRIMARY KEY ( pkey ) );
CREATE CLUSTERED INDEX xyz ON t ( xyz );
SELECT * FROM t WHERE ( x + y + z ) BETWEEN 1501 AND 1510;
-----------------------------------------------------------------------------------
1.8 DEFAULT Values
-----------------------------------------------------------------------------------
1.8.1 DEFAULT AUTOINCREMENT
-----------------------------------------------------------------------------------
BEGIN
DECLARE @max_key_1 INTEGER;
SELECT MAX ( key_1 ) INTO @max_key_1 FROM t1;
CALL sa_reset_identity ( 't1', 'DBA', @max_key_1 );
END;
-----------------------------------------------------------------------------------
1.8.2 DEFAULT GLOBAL AUTOINCREMENT
-----------------------------------------------------------------------------------
SET OPTION PUBLIC.GLOBAL_DATABASE_ID = '5';
CREATE TABLE t (
auto UNSIGNED BIGINT DEFAULT GLOBAL AUTOINCREMENT ( 1000 ) );
INSERT t VALUES ( DEFAULT );
INSERT t VALUES ( DEFAULT );
COMMIT;
SELECT * FROM t ORDER BY t.auto;
-----------------------------------------------------------------------------------
INSERT t VALUES ( 9999 );
INSERT t VALUES ( DEFAULT );
INSERT t VALUES ( 5100 );
INSERT t VALUES ( 5004 );
INSERT t VALUES ( DEFAULT );
COMMIT;
SELECT * FROM t ORDER BY t.auto;
-- Displays 5001, 5002, 5003, 5004, 5100, 5101, 9999
-----------------------------------------------------------------------------------
SET OPTION PUBLIC.GLOBAL_DATABASE_ID = '1000';
CREATE TABLE t (
auto UNSIGNED BIGINT DEFAULT GLOBAL AUTOINCREMENT ( 1000000000000000 ) );
INSERT t VALUES ( DEFAULT ); -- 1000000000000001
INSERT t VALUES ( DEFAULT ); -- 1000000000000002
INSERT t VALUES ( 1001 * 1000000000000000 ); -- 1001000000000000
INSERT t VALUES ( DEFAULT ); -- NULL
-----------------------------------------------------------------------------------
1.8.3 Literal Defaults
-----------------------------------------------------------------------------------
CREATE TABLE t (
c1 INTEGER,
c2 VARCHAR ( 1 ) DEFAULT 'Y', -- Y
c3 BINARY ( 20 ) DEFAULT 0x48656C6C6F, -- Hello
c4 VARCHAR ( 1 ) DEFAULT '\n', -- new line
c5 VARCHAR ( 100 ) DEFAULT 'c:\\new', -- c:\new
c6 LONG VARCHAR DEFAULT '\x61\x62\x63', -- abc
c7 INTEGER DEFAULT 0, -- 0
c8 DECIMAL ( 9, 2 ) DEFAULT 27.95, -- 27.95
c9 DOUBLE DEFAULT -123.456E-2, -- -1.23456
c10 DATE DEFAULT '2003 07 06', -- July 6, 2003
c11 TIME DEFAULT '00:01', -- 1 minute past midnight
c12 TIMESTAMP DEFAULT '20030706 14:30' ); -- 2:30 PM, July 6, 2003
-----------------------------------------------------------------------------------
只看该作者
ninetailsfox
老会员
精华贴数 0
个人空间
0
技术积分 2440 (647)
社区积分 0 (1542575)
注册日期 2007-9-5
论坛徽章:2
#4
使用道具
发表于 2007-11-14 19:04
1.8.4 Special Update Defaults
-----------------------------------------------------------------------------------
1.8.5 Expressions As Defaults
-----------------------------------------------------------------------------------
CREATE TABLE t (
c1 INTEGER,
server VARCHAR ( 100 ) DEFAULT PROPERTY ( 'MachineName' ),
today VARCHAR ( 100 ) DEFAULT DAYNAME ( CURRENT DATE ),
tomorrow DATE DEFAULT ( CURRENT DATE + 1 ),
guid BINARY ( 16 ) DEFAULT NEWID() );
-----------------------------------------------------------------------------------
1.9 NULL Property [
-----------------------------------------------------------------------------------
1.10 Column Constraints
-----------------------------------------------------------------------------------
1.10.1 NOT NULL Constraint
-----------------------------------------------------------------------------------
1.10.2 Column CHECK Constraint
-----------------------------------------------------------------------------------
CREATE TABLE schema_created (
pkey INTEGER NOT NULL DEFAULT 1 CHECK ( pkey = 1 ),
created TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
PRIMARY KEY ( pkey ) );
INSERT schema_created VALUES ( DEFAULT, DEFAULT );
-----------------------------------------------------------------------------------
CREATE TABLE t (
c1 INTEGER CHECK ( c1 > ( SELECT MAX ( c1 ) FROM t ) ) );
INSERT t VALUES ( 3 ); -- OK
INSERT t VALUES ( 4 ); -- OK
INSERT t VALUES ( 1 ); -- Fails
-----------------------------------------------------------------------------------
CREATE TABLE t (
c1 INTEGER CONSTRAINT "c1 must increase in value"
CHECK ( c1 > ( SELECT MAX ( c1 ) FROM t ) ) );
-----------------------------------------------------------------------------------
1.10.3 PRIMARY KEY Column Constraint
-----------------------------------------------------------------------------------
1.10.4 Foreign Key Column Constraint
-----------------------------------------------------------------------------------
CREATE TABLE country (
country_code VARCHAR ( 2 ) PRIMARY KEY,
name VARCHAR ( 100 ) NOT NULL );
CREATE TABLE office (
office_code VARCHAR ( 10 ) PRIMARY KEY,
country_code VARCHAR ( 2 ) NULL
CONSTRAINT "office.country_code must be valid or NULL"
REFERENCES country ( country_code )
ON UPDATE CASCADE ON DELETE SET NULL );
-----------------------------------------------------------------------------------
INSERT country VALUES ( 'CA', 'Canada' );
INSERT office VALUES ( '001', 'CA' ); -- OK
INSERT office VALUES ( '002', NULL ); -- OK
INSERT office VALUES ( '003', 'XX' ); -- fails
只看该作者
ninetailsfox
老会员
精华贴数 0
个人空间
0
技术积分 2440 (647)
社区积分 0 (1542575)
注册日期 2007-9-5
论坛徽章:2
#5
使用道具
发表于 2007-11-14 19:06
1.10.5 UNIQUE Column Constraint
-----------------------------------------------------------------------------------
1.11 User-Defined Data Types
-----------------------------------------------------------------------------------
CREATE DOMAIN address AS VARCHAR ( 100 )
NOT NULL
DEFAULT ''
CHECK ( LENGTH ( TRIM ( @col ) ) > 0 );
CREATE TABLE office (
office_code INTEGER PRIMARY KEY,
address_1 address,
address_2 address CHECK ( address_2 IS NOT NULL ),
address_3 address NULL DEFAULT ( NULL ) );
INSERT office ( office_code, address_1 ) VALUES ( 1, '123 Main Street' );
-----------------------------------------------------------------------------------
1.12 Free Space
-----------------------------------------------------------------------------------
1.13 Table Constraints [
-----------------------------------------------------------------------------------
1.13.1 Table CHECK Constraint
-----------------------------------------------------------------------------------
CREATE TABLE t (
c1 INTEGER,
c2 INTEGER,
c3 INTEGER,
CONSTRAINT "0 < c1 < c2 < c3"
CHECK ( 0 < c1 AND c1 < c2 AND c2 < c3 ) );
INSERT t VALUES ( 1, 2, 3 ); -- OK
INSERT t VALUES ( 2, 2, 2 ); -- fails
-----------------------------------------------------------------------------------
1.13.2 PRIMARY KEY Table Constraint ]
-----------------------------------------------------------------------------------
CREATE TABLE audit_office (
copied TIMESTAMP DEFAULT TIMESTAMP,
office_code VARCHAR ( 10 ),
country_code VARCHAR ( 2 ),
PRIMARY KEY ( copied, office_code ) );
-----------------------------------------------------------------------------------
1.13.3 FOREIGN KEY Table Constraint
-----------------------------------------------------------------------------------
CREATE TABLE country (
country_code VARCHAR ( 2 ),
name VARCHAR ( 100 ),
PRIMARY KEY ( country_code ) );
CREATE TABLE office (
country_code VARCHAR ( 2 ),
office_code VARCHAR ( 10 ),
address VARCHAR ( 1000 ),
PRIMARY KEY ( country_code, office_code ),
FOREIGN KEY ( country_code ) REFERENCES country );
CREATE TABLE representative (
country_code VARCHAR ( 2 ),
office_code VARCHAR ( 10 ),
representative_id INTEGER,
name VARCHAR ( 100 ),
PRIMARY KEY ( country_code, office_code, representative_id ),
FOREIGN KEY ( country_code, office_code ) REFERENCES office );
-----------------------------------------------------------------------------------
1.13.4 UNIQUE Table Constraint
-----------------------------------------------------------------------------------
CREATE TABLE t (
c1 INTEGER PRIMARY KEY,
c2 INTEGER,
c3 INTEGER,
UNIQUE ( c2, c3 ) );
INSERT t VALUES ( 1, 1, 1 ); -- OK
INSERT t VALUES ( 2, 1, 2 ); -- OK
INSERT t VALUES ( 3, 2, 1 ); -- OK
INSERT t VALUES ( 4, 1, 1 ); -- fails
只看该作者
ppstone
资深会员
精华贴数 0
个人空间
0
技术积分 3810 (377)
社区积分 0 (1046257)
注册日期 2006-7-25
论坛徽章:1
#6
使用道具
发表于 2007-11-15 08:49
1.14 Remote Data Access
-----------------------------------------------------------------------------------
SELECT *
FROM Oracle_employee
JOIN DB2_sales_projection
ON Oracle_employee.employee_id
= DB2_sales_projection.employee_id;
-----------------------------------------------------------------------------------
INSERT sales_projection
SELECT *
FROM DB2_sales_projection;
-----------------------------------------------------------------------------------
1.14.1 CREATE SERVER
-----------------------------------------------------------------------------------
1.14.2 CREATE EXTERNLOGIN
-----------------------------------------------------------------------------------
1.14.3 CREATE Remote And Proxy Tables
-----------------------------------------------------------------------------------
CREATE SERVER ASAEXCEL CLASS 'ODBC' USING 'EXCEL SAMPLE';
CREATE TABLE etest
( pkey INTEGER NOT NULL,
fld1 VARCHAR ( 20 ) NOT NULL,
fld2 INTEGER NOT NULL )
AT 'ASAEXCEL;c:\\temp\\asaexcel.xls;;test1';
INSERT INTO etest VALUES ( 1, 'Hello, World', 9 );
SELECT * FROM etest;
-----------------------------------------------------------------------------------
1.14.4 CREATE EXISTING TABLE [Top]
-----------------------------------------------------------------------------------
CREATE SERVER ORASAMPLE CLASS 'ORAODBC' USING 'ORA SAMPLE';
CREATE EXTERNLOGIN DBA TO ORASAMPLE
REMOTE LOGIN system IDENTIFIED BY 'manager';
CREATE EXISTING TABLE ora_dept AT 'ORASAMPLE..SCOTT.DEPT';
SELECT * FROM ora_dept;
-----------------------------------------------------------------------------------
CREATE SERVER DB2DELL180 CLASS 'DB2ODBC' USING 'DB2 SAMPLE';
CREATE EXTERNLOGIN DBA TO DB2DELL180
REMOTE LOGIN db2admin IDENTIFIED BY 'secret';
CREATE EXISTING TABLE db2_department
AT 'DB2DELL180.SAMPLE.ADMINISTRATOR.DEPARTMENT';
SELECT * FROM db2_department;
-----------------------------------------------------------------------------------
CREATE EXISTING TABLE etest2
( pkey NUMERIC ( 10 ) NOT NULL,
fld1 VARCHAR ( 100 ) NOT NULL )
AT 'ASAEXCEL;c:\\temp\\asaexcel.xls;;test1';
INSERT INTO etest2 VALUES ( 2, 'A value that is longer than 20 characters.' );
SELECT * FROM etest2;
-----------------------------------------------------------------------------------
-- Part 1 of full end-to-end example using SQL Anywhere 9
CREATE TABLE t1 (
pkey INTEGER NOT NULL,
c1 VARCHAR ( 20 ) NOT NULL,
PRIMARY KEY ( pkey ) );
INSERT INTO t1 VALUES ( 1, 'Hello, World' );
COMMIT;
-----------------------------------------------------------------------------------
-- Part 2 of full end-to-end example using SQL Anywhere 9
CREATE SERVER other CLASS 'ASAODBC' USING 'otherdsn';
CREATE EXTERNLOGIN DBA TO other
REMOTE LOGIN DBA IDENTIFIED BY "SQL";
CREATE EXISTING TABLE t1proxy AT 'other;otherdb;dba;t1';
SELECT * FROM t1proxy; -- displays 'Hello, World'
CREATE TABLE t2proxy (
pkey INTEGER NOT NULL,
c1 VARCHAR ( 20 ) NOT NULL,
PRIMARY KEY ( pkey ) )
AT 'other;otherdb;dba;t2';
INSERT INTO t2proxy VALUES ( 1, 'Goodbye' );
SELECT * FROM t2proxy; -- displays 'Goodbye'
-----------------------------------------------------------------------------------
只看该作者
ppstone
资深会员
精华贴数 0
个人空间
0
技术积分 3810 (377)
社区积分 0 (1046257)
注册日期 2006-7-25
论坛徽章:1
#7
使用道具
发表于 2007-11-15 08:49
1.15 Temporary Tables
-----------------------------------------------------------------------------------
1.15.1 Global Temporary Tables
-----------------------------------------------------------------------------------
CREATE GLOBAL TEMPORARY TABLE t (
c1 INTEGER )
ON COMMIT PRESERVE ROWS;
INSERT t VALUES ( 1 ); -- gets rolled back
ROLLBACK;
INSERT t VALUES ( 2 ); -- gets committed
COMMIT;
INSERT t VALUES ( 3 ); -- gets rolled back
ROLLBACK;
SELECT * FROM t; -- only shows row # 2
-----------------------------------------------------------------------------------
CREATE GLOBAL TEMPORARY TABLE t (
c1 INTEGER )
NOT TRANSACTIONAL;
INSERT t VALUES ( 1 );
ROLLBACK; -- has no effect
INSERT t VALUES ( 2 );
COMMIT; -- has no effect
SELECT * FROM t; -- shows both rows
-----------------------------------------------------------------------------------
1.15.2 Local Temporary Tables
-----------------------------------------------------------------------------------
1.15.2.1 CREATE TABLE #table_name
-----------------------------------------------------------------------------------
CREATE TABLE #t ( c1 INTEGER );
INSERT #t VALUES ( 1 ); -- gets rolled back
ROLLBACK;
INSERT #t VALUES ( 2 ); -- gets committed
COMMIT;
INSERT #t VALUES ( 3 ); -- gets rolled back
ROLLBACK;
SELECT * FROM #t; -- only shows row 2
-----------------------------------------------------------------------------------
CREATE TABLE #t ( c1 INTEGER );
INSERT #t VALUES ( 1 );
SELECT * FROM #t; -- displays 1
BEGIN
SELECT * FROM #t; -- still displays 1
CREATE TABLE #t ( c1 INTEGER );
INSERT #t VALUES ( 2 );
SELECT * FROM #t; -- now displays 2
END;
SELECT * FROM #t; -- displays 1 again
-----------------------------------------------------------------------------------
1.15.2.2 DECLARE LOCAL TEMPORARY TABLE
-----------------------------------------------------------------------------------
CREATE TABLE t ( c1 INTEGER ); -- permanent table
INSERT t VALUES ( 1 );
SELECT * FROM t; -- displays 1
BEGIN
DECLARE LOCAL TEMPORARY TABLE t ( c1 INTEGER );
INSERT t VALUES ( 2 );
SELECT * FROM t; -- displays 2
END;
SELECT * FROM t; -- displays 1 again
-----------------------------------------------------------------------------------
CREATE GLOBAL TEMPORARY TABLE t ( c1 INTEGER );
INSERT t VALUES ( 1 );
SELECT * FROM t; -- displays 1
DECLARE LOCAL TEMPORARY TABLE t ( c1 INTEGER );
INSERT t VALUES ( 2 );
SELECT * FROM t; -- displays 2
DROP TABLE t; -- drops the temporary table
SELECT * FROM t; -- displays 1 again
只看该作者
ppstone
资深会员
精华贴数 0
个人空间
0
技术积分 3810 (377)
社区积分 0 (1046257)
注册日期 2006-7-25
论坛徽章:1
#8
使用道具
发表于 2007-11-15 19:22
1.16 Normalized Design
-----------------------------------------------------------------------------------
CREATE TABLE order_form (
order_number INTEGER NOT NULL PRIMARY KEY,
client_name VARCHAR ( 100 ) NOT NULL,
shipping_address VARCHAR ( 1000 ) NOT NULL,
salesperson_name VARCHAR ( 100 ) NOT NULL,
salesperson_phone VARCHAR ( 100 ) NOT NULL,
salesperson_commission NUMERIC ( 6, 3 ) NOT NULL,
product_number_1 INTEGER NOT NULL,
product_description_1 VARCHAR ( 100 ) NOT NULL,
requested_quantity_1 INTEGER NOT NULL,
estimated_shipping_date_1 DATE NOT NULL,
product_number_2 INTEGER NULL,
product_description_2 VARCHAR ( 100 ) NULL,
requested_quantity_2 INTEGER NULL,
estimated_shipping_date_2 DATE NULL,
product_number_3 INTEGER NULL,
product_description_3 VARCHAR ( 100 ) NULL,
requested_quantity_3 INTEGER NULL,
estimated_shipping_date_3 DATE NULL );
-----------------------------------------------------------------------------------
1.16.1 First Normal Form
-----------------------------------------------------------------------------------
CREATE TABLE order_header (
order_number INTEGER NOT NULL PRIMARY KEY,
client_name VARCHAR ( 100 ) NOT NULL,
shipping_address VARCHAR ( 1000 ) NOT NULL,
salesperson_name VARCHAR ( 100 ) NOT NULL,
salesperson_phone VARCHAR ( 100 ) NOT NULL,
salesperson_commission NUMERIC ( 6, 3 ) NOT NULL );
CREATE TABLE order_detail (
order_number INTEGER NOT NULL REFERENCES order_header,
product_number INTEGER NOT NULL,
product_description VARCHAR ( 100 ) NOT NULL,
requested_quantity INTEGER NOT NULL,
estimated_shipping_date DATE NOT NULL,
PRIMARY KEY ( order_number, product_number ) );
-----------------------------------------------------------------------------------
1.16.2 Second Normal Form
-----------------------------------------------------------------------------------
CREATE TABLE order_header (
order_number INTEGER NOT NULL PRIMARY KEY,
client_name VARCHAR ( 100 ) NOT NULL,
shipping_address VARCHAR ( 1000 ) NOT NULL,
salesperson_name VARCHAR ( 100 ) NOT NULL,
salesperson_phone VARCHAR ( 100 ) NOT NULL,
salesperson_commission NUMERIC ( 6, 3 ) NOT NULL );
CREATE TABLE product_catalog (
product_number INTEGER NOT NULL PRIMARY KEY,
product_description VARCHAR ( 100 ) NOT NULL );
CREATE TABLE product_order (
order_number INTEGER NOT NULL REFERENCES order_header,
product_number INTEGER NOT NULL REFERENCES product_catalog,
requested_quantity INTEGER NOT NULL,
estimated_shipping_date DATE NOT NULL,
PRIMARY KEY ( order_number, product_number ) );
-----------------------------------------------------------------------------------
1.16.3 Third Normal Form
-----------------------------------------------------------------------------------
CREATE TABLE salesperson (
salesperson_id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR ( 100 ) NOT NULL,
phone VARCHAR ( 100 ) NOT NULL );
CREATE TABLE sales_order (
order_number INTEGER NOT NULL PRIMARY KEY,
client_name VARCHAR ( 100 ) NOT NULL,
shipping_address VARCHAR ( 1000 ) NOT NULL,
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
salesperson_commission NUMERIC ( 6, 3 ) NOT NULL );
CREATE TABLE product_catalog (
product_number INTEGER NOT NULL PRIMARY KEY,
product_description VARCHAR ( 100 ) NOT NULL );
CREATE TABLE product_order (
order_number INTEGER NOT NULL REFERENCES sales_order,
product_number INTEGER NOT NULL REFERENCES product_catalog,
requested_quantity INTEGER NOT NULL,
estimated_shipping_date DATE NOT NULL,
PRIMARY KEY ( order_number, product_number ) );
-----------------------------------------------------------------------------------
只看该作者
ppstone
资深会员
精华贴数 0
个人空间
0
技术积分 3810 (377)
社区积分 0 (1046257)
注册日期 2006-7-25
论坛徽章:1
#9
使用道具
发表于 2007-11-15 19:23
1.16.4 Boyce-Codd Normal Form
-----------------------------------------------------------------------------------
CREATE TABLE sales_skill (
sales_skill_id INTEGER NOT NULL PRIMARY KEY,
description LONG VARCHAR );
CREATE TABLE salesperson_skill (
salesperson_id INTEGER NOT NULL,
salesperson_name VARCHAR ( 100 ) NOT NULL,
sales_skill_id INTEGER NULL REFERENCES sales_skill,
PRIMARY KEY ( salesperson_id, sales_skill_id ),
UNIQUE ( salesperson_name, sales_skill_id ) );
-----------------------------------------------------------------------------------
CREATE TABLE salesperson (
salesperson_id INTEGER NOT NULL PRIMARY KEY,
salesperson_name VARCHAR ( 100 ) NOT NULL UNIQUE );
CREATE TABLE sales_skill (
sales_skill_id INTEGER NOT NULL PRIMARY KEY,
description LONG VARCHAR );
CREATE TABLE salesperson_skill (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
sales_skill_id INTEGER NULL REFERENCES sales_skill,
PRIMARY KEY ( salesperson_id, sales_skill_id ) );
-----------------------------------------------------------------------------------
1.16.5 Fourth Normal Form
-----------------------------------------------------------------------------------
CREATE TABLE salesperson (
salesperson_id INTEGER NOT NULL PRIMARY KEY,
salesperson_name VARCHAR ( 100 ) NOT NULL );
CREATE TABLE sales_skill (
sales_skill_id INTEGER NOT NULL PRIMARY KEY,
description LONG VARCHAR );
CREATE TABLE technical_skill (
technical_skill_id INTEGER NOT NULL PRIMARY KEY,
description LONG VARCHAR );
CREATE TABLE salesperson_skill (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
sales_skill_id INTEGER NOT NULL REFERENCES sales_skill,
technical_skill_id INTEGER NOT NULL REFERENCES technical_skill,
PRIMARY KEY ( salesperson_id, sales_skill_id, technical_skill_id ) );
-----------------------------------------------------------------------------------
CREATE TABLE salesperson_sales_skill (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
sales_skill_id INTEGER NOT NULL REFERENCES sales_skill,
PRIMARY KEY ( salesperson_id, sales_skill_id ) );
CREATE TABLE salesperson_technical_skill (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
technical_skill_id INTEGER NOT NULL REFERENCES technical_skill,
PRIMARY KEY ( salesperson_id, technical_skill_id ) );
-----------------------------------------------------------------------------------
1.16.6 Fifth Normal Form
-----------------------------------------------------------------------------------
CREATE TABLE salesperson (
salesperson_id INTEGER NOT NULL PRIMARY KEY,
salesperson_name VARCHAR ( 100 ) NOT NULL );
CREATE TABLE company (
company_id VARCHAR ( 10 ) NOT NULL PRIMARY KEY,
company_name VARCHAR ( 100 ) NOT NULL );
CREATE TABLE product_line (
product_line_id VARCHAR ( 10 ) NOT NULL PRIMARY KEY,
product_line_description VARCHAR ( 100 ) NOT NULL );
CREATE TABLE salesperson_company_line (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
company_id VARCHAR ( 10 ) NOT NULL REFERENCES company,
product_line_id VARCHAR ( 10 ) NOT NULL REFERENCES product_line,
PRIMARY KEY ( salesperson_id, company_id, product_line_id ) );
-----------------------------------------------------------------------------------
INSERT salesperson_company_line VALUES ( 1, 'Acme', 'cars' );
INSERT salesperson_company_line VALUES ( 2, 'Acme', 'trucks' );
INSERT salesperson_company_line VALUES ( 2, 'Best', 'cars' );
-----------------------------------------------------------------------------------
CREATE TABLE salesperson_company (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
company_id VARCHAR ( 10 ) NOT NULL REFERENCES company,
PRIMARY KEY ( salesperson_id, company_id ) );
CREATE TABLE company_line (
company_id VARCHAR ( 10 ) NOT NULL REFERENCES company,
product_line_id VARCHAR ( 10 ) NOT NULL REFERENCES product_line,
PRIMARY KEY ( company_id, product_line_id ) );
CREATE TABLE salesperson_line (
salesperson_id INTEGER NOT NULL REFERENCES salesperson,
product_line_id VARCHAR ( 10 ) NOT NULL REFERENCES product_line,
PRIMARY KEY ( salesperson_id, product_line_id ) );
-----------------------------------------------------------------------------------
INSERT salesperson_company VALUES ( 1, 'Acme' );
INSERT salesperson_company VALUES ( 2, 'Acme' );
INSERT salesperson_company VALUES ( 2, 'Best' );
INSERT company_line VALUES ( 'Acme', 'cars' );
INSERT company_line VALUES ( 'Acme', 'trucks' );
INSERT company_line VALUES ( 'Best', 'cars' );
INSERT salesperson_line VALUES ( 1, 'cars' );
INSERT salesperson_line VALUES ( 2, 'cars' );
INSERT salesperson_line VALUES ( 2, 'trucks' );
SELECT DISTINCT
salesperson_company.salesperson_id,
company_line.company_id,
salesperson_line.product_line_id
FROM salesperson_company
JOIN company_line
ON salesperson_company.company_id = company_line.company_id
JOIN salesperson_line
ON salesperson_company.salesperson_id = salesperson_line.salesperson_id
AND company_line.product_line_id = salesperson_line.product_line_id;
只看该作者
ppstone
资深会员
精华贴数 0
个人空间
0
技术积分 3810 (377)
社区积分 0 (1046257)
注册日期 2006-7-25
论坛徽章:1
#10
使用道具
发表于 2007-11-15 19:24
1.17 Chapter Summary
-----------------------------------------------------------------------------------
Chapter 2 - INSERTING
-----------------------------------------------------------------------------------
2.1 Introduction
-----------------------------------------------------------------------------------
2.2 Insert
-----------------------------------------------------------------------------------
2.2.1 INSERT All Values
-----------------------------------------------------------------------------------
CREATE TABLE t1 (
key_1 INTEGER NOT NULL DEFAULT AUTOINCREMENT,
non_key_1 VARCHAR ( 100 ) NOT NULL,
last_updated TIMESTAMP NOT NULL DEFAULT TIMESTAMP,
PRIMARY KEY ( key_1 ) );
INSERT t1 VALUES ( 1, 'first row', '2003 09 29 13:21' );
-----------------------------------------------------------------------------------
CREATE TABLE t1 (
key_1 INTEGER NOT NULL DEFAULT AUTOINCREMENT,
non_key_1 VARCHAR ( 100 ) NOT NULL,
last_updated TIMESTAMP NOT NULL DEFAULT TIMESTAMP,
PRIMARY KEY ( key_1 ) );
INSERT t1 VALUES ( 1, 'first row', DEFAULT );
INSERT t1 ON EXISTING UPDATE VALUES ( 1, 'replaced', DEFAULT );
INSERT t1 ON EXISTING SKIP VALUES ( 1, 'ignored', DEFAULT );
-----------------------------------------------------------------------------------
2.2.2 INSERT Named Values
-----------------------------------------------------------------------------------
CREATE TABLE t1 (
key_1 INTEGER NOT NULL DEFAULT AUTOINCREMENT,
col_2 VARCHAR ( 100 ) NOT NULL DEFAULT 'X',
col_3 VARCHAR ( 100 ) NOT NULL DEFAULT 'Y',
updated_by VARCHAR ( 128 ) NOT NULL DEFAULT LAST USER,
last_updated TIMESTAMP NOT NULL DEFAULT TIMESTAMP,
PRIMARY KEY ( key_1 ) );
INSERT t1 ( col_3, col_2 ) VALUES ( 'B', 'A' );
-----------------------------------------------------------------------------------
INSERT t1 ( key_1 ) VALUES ( DEFAULT );
-----------------------------------------------------------------------------------
2.2.3 INSERT Select All Columns
-----------------------------------------------------------------------------------
CREATE TABLE t1 (
key_1 INTEGER NOT NULL DEFAULT AUTOINCREMENT,
non_key_1 VARCHAR ( 100 ) NOT NULL DEFAULT 'xxx',
last_updated TIMESTAMP NOT NULL DEFAULT TIMESTAMP,
PRIMARY KEY ( key_1 ) );
CREATE TABLE t2 (
key_1 INTEGER NOT NULL DEFAULT AUTOINCREMENT,
non_key_1 VARCHAR ( 100 ) NOT NULL DEFAULT 'xxx',
last_updated TIMESTAMP NOT NULL DEFAULT TIMESTAMP,
PRIMARY KEY ( key_1 ) );
INSERT t2
SELECT key_1, non_key_1, last_updated
FROM t1;
-----------------------------------------------------------------------------------
INSERT t2 SELECT * FROM t1;
-----------------------------------------------------------------------------------
INSERT t2
SELECT 0, 'first', '2001-01-01'
UNION
SELECT * FROM t1
WHERE key_1 BETWEEN 1 AND 9998
UNION
SELECT 9999, 'last', CURRENT TIMESTAMP;
-----------------------------------------------------------------------------------
CREATE TABLE t1 (
key_1 INTEGER NOT NULL PRIMARY KEY );
INSERT t1 VALUES ( 1 );
CREATE TABLE t2 (
key_1 VARCHAR ( 10 ) NOT NULL PRIMARY KEY,
non_key_1 INTEGER NOT NULL );
INSERT t2 VALUES ( 'A', 1 );
INSERT t2 VALUES ( 'B', 2 );
INSERT t2 VALUES ( 'C', 2 );
INSERT t1
SELECT t2.non_key_1
FROM t2
WHERE NOT EXISTS ( SELECT *
FROM t1
WHERE t1.key_1 = t2.non_key_1 );
-----------------------------------------------------------------------------------
只看该作者
55
1/6
1
2
3
4
5
6
››
投票
交易
悬赏
活动
相关内容
ITPUB论坛
≡ 数据库技术 ≡
> Oracle数据库管理
> Oracle开发
> Oracle Developer Suite
> Oracle入门与认证
> Oracle专题深入讨论
> Oracle新技术/11g
> Oracle电子文档
> Oracle Application Server套件
> IBM数据库产品
> MS SQL Server
> Sybase管理与开发
> MySQL及其它开源数据库
> 内存数据库
> 数据仓库与数据挖掘
> 移动及嵌入式数据库
≡ 企业信息化 ≡
> ERP产品与实践
> CRM产品与实践
> HR产品与实践
> 物流
> 供应链
> 供应链建模与仿真
> 物流设备与系统工程
> 企业管理咨询
> 管理协同与办公自动化
> IT服务管理
> 数据中心建设
> ERP二次开发
> Oracle ERP
> EBS相关文档
> PeopleSoft与JDE
> SAP R/3
> SAP Business One开发与快速实施
> SAP财务及CRM
> SAP后勤及HR
> mySAP ERP
> 系统开发及跨应用设置
> SAP相关文档
> 国外其它ERP产品
> 国内ERP产品
≡ 开发技术 ≡
> Java入门与认证版
> Java web开发及框架技术
> Java企业开发
> ASP.NET【已迁移到微软开发技术论坛】
> .Net企业开发与应用【已迁移到微软开发技术论坛】
> WEB程序开发
> WEB 2.0技术
> 动态语言
> 移动与游戏开发
≡ 系统设计与项目管理 ≡
> 系统分析与UML
> 系统分析与UML精华区
> 项目管理
> 项目过程
> 软件测试
> 算法讨论与研究
≡ IBM软件技术园地 ≡
> IBM数据库产品
> Lotus
> Tivoli
> Websphere
> Rational
> 与SOA相关的IBM产品与技术
> IBM软件技术精英协会
> 软件技术精英活动专版
≡ 操作系统与硬件 ≡
> AIX及IBM产品【已迁移到IXPUB】
> HP-UX及HP产品【已迁移到IXPUB】
> Solaris及SUN产品【已迁移到IXPUB】
> Linux及其应用 【已迁移到IXPUB】
> 其它UNIX系统【已迁移到IXPUB】
> windows系统及微软相关产品 【已迁移到IXPUB】
> 存储设备与容灾技术 【已迁移到IXPUB】
> 服务器 【已迁移到IXPUB】
≡ 行业纵向讨论区 ≡
> IT业界评论与展望
> 政府与教育事业
> 中国政府信息主管联盟
> 电信行业
> 金融行业
> 医卫行业
> 制造行业
> 电力行业
> 信息安全与审计
≡ 会员交流 ≡
> IT职业生涯
> 招聘求职商务信息
> 体育世界
> 体育博彩专版
> 旅游,驴友
> 汽车世界
> 外语角
> 数码摄影
> 你的故事我的歌
> 音乐推荐区
> 电子图书与IT文档资料
> 软件交流
> 软件交流精华区
≡ ITPUB产品与服务 ≡
> ITPUB地面活动专版
> BLOG天地
> WIKI世界
> 授权用户区
> 站务管理
≡ 微软开发技术 ≡
> 开发工具和语言
> .NET Framework 相关
> Visual Basic/VB.net
> Visual C#
> Visual C++/vc.net
> Visual Studio
> .NET软件架构与模式
> .NET开发辅助工具及框架
> Web开发
> ASP.NET与AJAX
> Web相关技术讨论(IIS等)
> Silverlight 技术
> 微软企业级产品技术
> SQL Server
> windows server
> SharePoint
> Exchange Server
> Biztalk
> 嵌入式及移动开发
> Windows Embedded 嵌入式技术
> Windows 移动设备
> Office开发
> Microsoft office system
> Office Business Application
> 微软产品用户交流区
> .Net电子书籍&&书籍介绍
> .Net人才交流
技术积分榜
社区积分榜
徽章
电子杂志
会员
团队
统计
邮箱
游乐场
帮助
TOP
CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号
联系我们
法律顾问
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计