在UPDATE语句中可以在更新列表中以及WHERE语句使用子查询。下面演示一个将图书的出版日期全部更新为所有图书中的最新出版日期,SQL语句如下:
UPDATE T_Book SET FYearPublished=(SELECT MAX(FYearPublished) FROM T_Book)
注意,在MYSQL 中是不支持使用子查询来更新一个列的,所以这个UPDATE 语句无法在MYSQL中执行。
执行完毕查看T_Book表中的内容:
FID FNAME FYEARPUBLISHED FCATEGORYID1 About J2EE 2008 42 Learning Hibernate 2008 43 Two Cites 2008 14 Jane Eyre 2008 15 Oliver Twist 2008 16 History of China 2008 27 History of England 2008 28 History of America 2008 29 History of TheWorld 2008 210 Atom 2008 311 RELATIVITY 2008 312 Computer 2008 313 Astronomy 2008 314 How To Singing 2008 515 DaoDeJing 2008 616 Obedience toAuthority 2008 6
如果UPDATE语句拥有WHERE子句,那么还可以在WHERE子句中使用子查询,其使用方式与SELECT语句中的子查询基本相同,而且也可以使用相关子查询等高级的特性。
下面的SQL语句用来将所有同类书本书超过3 本的图书的出版日期更新为2005:
UPDATE T_Book b1 SET b1.FYearPublished=2005WHERE( SELECT COUNT(*) FROM T_Book b2 WHERE b1. FCategoryId=b2. FCategoryId)>3
上面的SQL 语句使用相关子查询来查询所有与待更新的书籍属于同类别的书籍的总数,如果总数大于3则将当前书籍的出版日期更新为2005。
执行完毕查看T_Book表中的内容:
FID FNAME FYEARPUBLISHED FCATEGORYID1 About J2EE 2008 42 Learning Hibernate 2008 43 Two Cites 2008 14 Jane Eyre 2008 15 Oliver Twist 2008 16 History of China 2005 27 History of England 2005 28 History of America 2005 29 History of TheWorld 2005 210 Atom 2005 311 RELATIVITY 2005 312 Computer 2005 313 Astronomy 2005 314 How To Singing 2008 515 DaoDeJing 2008 616 Obedience toAuthority 2008 6