2018/08/23--mysql数据库

子查询

SELECT order_num FROM orderitems WHERE prod_id='TNT2';

SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');

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='TNT2'));

SELECT prod_name,prod_price,vend_name FROM products,vendors WHERE products.vend_id=vendors.vend_id ORDER BY prod_name,vend_name;

SELECT * FROM orders;

order_num order_date cust_id
20005 2005-09-01 00:00:00 10001
20006 2005-09-12 00:00:00 10003
20007 2005-09-30 00:00:00 10004
20008 2005-10-03 00:00:00 10005

SELECT cust_name,cust_state,cust_id FROM customers;

cust_name cust_state cust_id
Coyote Inc. MI 10001
Mouse House NULL 10002
Wascals IN 10003
Yosemite Place AZ 10004
The Fudds IL  10005

SELECT COUNT(*) AS orders FROM orders WHERE cust_id=10001;

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

cust_name cust_state orders

Coyote Inc.

MI 1
Mouse House  NULL 0
The Fudds IL 1
Wascals IN 1
Yosemite Place AZ 1

关系表的设计

把信息分解成多个表,一类数据一个表,各表通过常用的值互相关联。

主键:主键为某个表的一列,用来唯一标识每行

外键:外键为某个表的一列,它包含另一个表的主键值。

联结

SELECT vend_name,vend_id FROM vendors ORDER BY vend_name;

vend_name vend_id
ACME 1003
Anvils R Us 1001
Furball Inc 1004
Jet Set 1005
Jouets Et Ours 1006
LT Supplies 1002

SELECT prod_name,prod_price,vend_id FROM products ORDER BY prod_name;

prod_name prod_price vend_id
.5 ton anvil 5.99 1001
1 ton anvil 9.99 1001
2 ton anvil 14.99 1001
Bird seed 10.00 1003
Carrots 2.50 1003
Detonator 13.00 1003
Fuses 3.42 1002
JetPack 1000 35.00 1005
JetPack2000 55.00 1005
Oil can 8.99 1002
Safe 50.00 1003
Sling 4.49 1003
TNT (1 stick) 2.50 1003
TNT(5 sticks) 10.00 1003

SELECT prod_name,prod_price,vend_name FROM vendors,products WHERE vendors.vend_id=products.vend_id ORDER BY prod_name,vend_name;

prod_name prod_price vend_name
.5 ton anvil 5.99 Anvils R Us
1 ton anvil 9.99 Anvils R Us
2 ton anvil 14.99 Anvils R Us
Bird seed 10.00 ACME
Carrots 2.50 ACME
Detonator 13.00 ACME
Fuses 3.42 LT Supplies
JetPack 1000 35.00 Jet Set
JetPack2000 55.00 Jet Set
Oil can 8.99 LT Supplies
Safe 50.00 ACME
Sling 4.49 ACME
TNT (1 stick) 2.50 ACME
TNT(5 sticks) 10.00 ACME

SELECT vend_name,prod_name,prod_price,vend_id FROM vendors,products WHERE vendors.vend_id=products.vend_id ORDER BY vend_name,prod_name;

ERROR 1052 (23000): Column 'vend_id' in filed list is ambigous

SELECT vend_name,prod_name,prod_price FROM vendors,products ORDER BY vend_name,prod_name;

SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id=products.vend_id ORDER BY vend_name,prod_name;

联结条件:WHERE vendors.vend_id=products.vend_id

有联结条件:vendors表中的每行和products表中的每行匹配,满足匹配条件的才返回;

无联结条件:vendors表中的每行和products表中的每行匹配,返回 vendors的行数*products的行数 (笛卡尔积)

猜你喜欢

转载自blog.csdn.net/qzw752890913/article/details/81981807
今日推荐