第12章 联结表
联结表多个表直接通过关系形成的。数据库设计里面我们努力的把信息分解到多个表里面,表直接通过关系来联系。
看例子,这里不给表关系了,想想应该能看个大概:
1.
SELECT vend_name,prod_name,prod_price
FROM Vendors INNER JOIN Products
WHERE Vendors.vend_id = Products.vend_id;
注意:Where语句是关键,没有这个约束得到的只能是个笛卡尔积。
2.
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 ='RGA01';
这个等价于下面这条SQL
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='RGAO1' ));
注意:关联可以发生在多个表直接,表的数量没有限制。但是,联结表越多性能下降越快。
大家可以是试试,联结性能远高于嵌套查询。
第13章 创建高级联结
自联结:
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';
外部链接:左外部链接(左链接,left outer join ... on ,*= ) 和 右外部链接(右链接,right out join ... on , =*); 这个应该N熟悉了。
第14章 组合查询
1.组合查询一般用在两个地方:
在单个查询中,从不同的表类似的返回结构数据。
对单个表执行多个查询,按照单个查询返回数据。
2.其实where组合可以视为一种组合查询。
3.Union关键字,用于关联两个select查询。但是每个查询必须包含完全相同的列,表达式或聚集函数(不过各列的次序是不要求相同的)
4.Union会从查询结果中去除重复的结果,这个where组合的效果是一样的。如果不愿意这样,可以使用Union All 来关联查询。一般而言,Union都可以通过where来替代,但是Union All 有点特色,where替代不了。
5.某些DBMS还提供了其他的类似Union的关键字,如Except(Minus):检索第一个表中存在,而第二个表中不存在的行;Intersect:检索两个表中都存在的行,可用联结来取代。
第15章 插入数据
日常开发中用的比较多,而且一般用的比较简单。
1.最基本的插入:Insert Into ... Values...
2.插入检索出来的数据:
INSERT INTO Customers(cust_id,cust_contact,cust_email,cust_name)
SELECT cust_id,cust_contact,cust_email,cust_name
FROM CustNew;
注意:对应列的列名不要求一样,但是类型至少是兼容的。
SELECT子句可以使用Where加以修饰。
3.从一个表复制到另一个表
SELECT * INTO CustCopy FROM Customers;
而Mysql写法:
CREATE TABLE CustCopy AS
SELECT * FROM Customers;
这样适合更合适表达这样的意思。
第16章 更新和删除数据
几个好习惯:
1.更新和删除操作一定要记得设置合适的Where子句;
2.实际操作前只好通过Select验证Where子句是否正确。
因为Sql里面是没有undo操作的。
第17章 创建和操作表
1.创建表: CREATE TABLE tablename;
删除表: DROP TABLE tablename;
更新表: ALERT TABLE tablename;
具体的需要查询手册。
2.重命名表:
DB2, Mysql,Oracle和PostgreSQL可以使用RENAME语句;而SQL Server 和Sybase可以使用sp_rename存储过程。
3.复杂的更新表操作一般过程如下
a.安装新的列规范重建立新表,复制旧表数据到新表,并检查新表所包含的数据
b.重明白旧表,用旧表名字重命名新表,更加需要重新创建触发器,存储过程,索引和外键。
平凡而简单的人一个,无权无势也无牵无挂。一路厮杀,只进不退,死而后已,岂不爽哉!
收起对“车”日行千里的羡慕;收起对“马”左右逢缘的感叹;目标记在心里面,向前进。一次一步,一步一脚印,跬步千里。
这个角色很适合现在的我。
posted on 2007-11-28 14:36
过河卒 阅读(906)
评论(0) 编辑 收藏 所属分类:
DataBase/Sql