SQL-建表与插入数据

SQLserver查看哪些表是非空表

	--这个根据存储区来判断
	select  B.name   from sys.partitions A inner join sys.objects B
	on A.object_id=B.object_id 
	where B.type='U' and  A.rows>0
	--这个根据索引表来判断
	select B.name  from sysindexes A inner join sys.objects B
	on A.id=B.object_id  
	where B.type='U' And A.rows >0

(A,B只是名字代号,不用管)

建表

1. Create Customers Table 顾客表,管理顾客信息
CREATE TABLE Customers
(
	cust_id char(10),     --唯一的顾客ID是主键,非空约束已包含,可不写
	cust_name char(50) NOT NULL,      -- 顾客名,非空约束
	cust_address char(50) NULL,       --属性默认允许取空值,可不写
	cust_city char(50),              -- 顾客所在城市
	cust_state char(5),               -- 顾客所在州
	cust_zip char(10),                -- 顾客地址邮政编码
	cust_country char(50),            -- 顾客所在国家
	cust_contact char(50),             -- 顾客的联系名
	cust_email char(255),               -- 顾客的电子邮件地址
	CONSTRAINT PK_Customers PRIMARY KEY (cust_id)  -- 创建顾客ID的主键,默认检查与已有数据的兼容性,默认创建clusterd索引
);
2. 创建订单表Orders,每一行是一个订单
CREATE TABLE Orders
(
	order_num int,                   -- 唯一的订单号
	order_date datetime NOT NULL,   -- 订单日期
	cust_id char(10) NOT NULL,        -- 该订单的顾客ID,关联到顾客表,外键允许为空,可自己设置非空约束
	CONSTRAINT PK_Orders PRIMARY KEY(order_num),    -- 创建主键
	CONSTRAINT FK_Orders_Customers FOREIGN KEY (cust_id) REFERENCES Customers (cust_id)
);

/*-- 发现订单表创建错了,要先删除,再重新创建
 DROP TABLE Orders;  -- SQLserver中没有级联删除表的语法,直接删除就行
 */
3. 创建供应商表Vendors,每一行是一个供应商
CREATE TABLE Vendors
(
	vend_id char(10),                 -- 唯一的供应商ID,主键
	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),              -- 供应商所在国家
	CONSTRAINT PK_Vendors PRIMARY KEY (vend_id)
);
4. 创建产品表Products,每行一个产品,有供应商属性
CREATE TABLE Products
(
	prod_id char(10),               -- 唯一的产品编号,主键
	vend_id char(10) NOT NULL,       -- 产品供应商ID,关联到供应商表,是外键
	prod_name char(255) NOT NULL,     -- 产品名
	prod_price decimal(8,2) NOT NULL,      -- 产品价格,decimal(p,s) 小数的最大位数(p)和小数位的数量(s)
	prod_desc varchar(1000),              -- 产品描述,可变字符类型,最大长度1000
	CONSTRAINT PK_Products PRIMARY KEY (prod_id),
	CONSTRAINT FK_Products_Vendors FOREIGN KEY(vend_id) REFERENCES Vendors(vend_id)
);
5. 创建订单物品表OrderItems表

存储每个订单中的实际物品,每一行是某一个订单的某一个物品,
主键是订单号+订单中物品唯一标识(是该订单的第几个物品)

CREATE TABLE OrderItems
(
	order_num int,       -- 订单号,外键
	order_item int,      -- 订单中物品标识,即订单物品号(订单内的顺序)
	prod_id char(10) NOT NULL,    -- 产品ID,是外键,关联到产品表
	quantity int NOT NULL,                   -- 物品数量
	item_price decimal(8,2) NOT NULL,         -- 物品价格
	CONSTRAINT PK_OrderItems PRIMARY KEY (order_num,order_item),       -- 组合主键
	CONSTRAINT FK_OrderItems_Orders FOREIGN KEY (order_num) REFERENCES Orders(order_num),
	CONSTRAINT FK_OrderItems_Products FOREIGN KEY (prod_id) REFERENCES Products(prod_id)
);

插入数据

向每个表插入的顺序要注意,先插入没有外键的表,最好有表之间的关系图

-- 插入顾客表
-- 插入一条记录
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES ('1000000001', 'Village Toys', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', 'John Smith', '[email protected]');
-- 一次插入多条
INSERT INTO Customers
VALUES('1000000002', 'Kids Place', '333 South Lake Drive', 'Columbus', 'OH', '43333', 'USA', 'Michelle Green',NULL),
	  ('1000000003', 'Fun4All', '1 Sunny Place', 'Muncie', 'IN', '42222', 'USA', 'Jim Jones', '[email protected]'),
	  ('1000000004', 'Fun4All', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'USA', 'Denise L. Stephens', '[email protected]'),
	  ('1000000005', 'The Toy Store', '4545 53rd Street', 'Chicago', 'IL', '54545', 'USA', 'Kim Howard',NULL);

-- 插入供应商表
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES  ('BRS01','Bears R Us','123 Main Street','Bear Town','MI','44444', 'USA'),
		('BRE02','Bear Emporium','500 Park Street','Anytown','OH','44333', 'USA'),
		('DLL01','Doll House Inc.','555 High Street','Dollsville','CA','99999', 'USA'),
		('FRB01','Furball Inc.','1000 5th Avenue','New York','NY','11111', 'USA'),
		('FNG01','Fun and Games','42 Galaxy Road','London', NULL,'N16 6PS', 'England'),
		('JTS01','Jouets et ours','1 Rue Amusement','Paris', NULL,'45678', 'France');

-- 插入产品表
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR01', 'BRS01', '8 inch teddy bear', 5.99, '8 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR02', 'BRS01', '12 inch teddy bear', 8.99, '12 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR03', 'BRS01', '18 inch teddy bear', 11.99, '18 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG01', 'DLL01', 'Fish bean bag toy', 3.49, 'Fish bean bag toy, complete with bean bag worms with which to feed it');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG02', 'DLL01', 'Bird bean bag toy', 3.49, 'Bird bean bag toy, eggs are not included');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG03', 'DLL01', 'Rabbit bean bag toy', 3.49, 'Rabbit bean bag toy, comes with bean bag carrots');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RGAN01', 'DLL01', 'Raggedy Ann', 4.99, '18 inch Raggedy Ann doll');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RYL01', 'FNG01', 'King doll', 9.49, '12 inch king doll with royal garments and crown');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RYL02', 'FNG01', 'Queen doll', 9.49, '12 inch queen doll with royal garments and crown');

-- 插入订单表
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20005, '2012-05-01', '1000000001');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20006, '2012-01-12', '1000000003');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20007, '2012-01-30', '1000000004');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20008, '2012-02-03', '1000000005');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20009, '2012-02-08', '1000000001');

-- 插入订单细节表
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 1, 'BR01', 100, 5.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 2, 'BR03', 100, 10.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 1, 'BR01', 20, 5.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 2, 'BR02', 10, 8.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 3, 'BR03', 10, 11.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 1, 'BR03', 50, 11.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 2, 'BNBG01', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 3, 'BNBG02', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 4, 'BNBG03', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 5, 'RGAN01', 50, 4.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 1, 'RGAN01', 5, 4.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 2, 'BR03', 5, 11.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 3, 'BNBG01', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 4, 'BNBG02', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 5, 'BNBG03', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 1, 'BNBG01', 250, 2.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 2, 'BNBG02', 250, 2.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 3, 'BNBG03', 250, 2.49);

来自《必知必会》的实践

发布了24 篇原创文章 · 获赞 6 · 访问量 1189

猜你喜欢

转载自blog.csdn.net/wbing96/article/details/103103312