2024年5月9日发(作者:)

注意

你可以对文本型字段使用UPDATE语句。但是,如果你需要更新很长的字符串,应使

用UPDATETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的

信息,请参考Microsoft SQL Sever 的文档。

如果你不提供WHERE子句,表中的所有记录都将被更新。有时这是有用的。例如,

如果你想把表titles中的所有书的价格加倍,你可以使用如下的UPDATE 语句:

你也可以同时更新多个字段。例如,下面的UPDATE语句同时更新

first_column,second_column,和third_column这三个字段:

UPDATE mytable SET first_column=’Updated!’

Second_column=’Updated!’

Third_column=’Updated!’

WHERE first_column=’Update Me1’

技巧

SQL忽略语句中多余的空格。你可以把SQL语句写成任何你最容易读的格式。

用SELECT 创建记录和表

你也许已经注意到,INSERT 语句与DELETE语句和UPDATE语句有一点不同,它一

次只操作一个记录。然而,有一个方法可以使INSERT 语句一次添加多个记录。要作到这

一点,你需要把INSERT 语句与SELECT 语句结合起来,象这样:

INSERT mytable (first_column,second_column)

SELECT another_first,another_second

FROM anothertable

WHERE another_first=’Copy Me!’

这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段

another_first的值为’Copy Me!’的记录才被拷贝。

当为一个表中的记录建立备份时,这种形式的INSERT 语句是非常有用的。在删除一

个表中的记录之前,你可以先用这种方法把它们拷贝到另一个表中。

如果你需要拷贝整个表,你可以使用SELECT INTO 语句。例如,下面的语句创建了

一个名为newtable的新表,该表包含表mytable的所有数据:

SELECT * INTO newtable FROM mytable

你也可以指定只有特定的字段被用来创建这个新表。要做到这一点,只需在字段列表

中指定你想要拷贝的字段。另外,你可以使用WHERE 子句来限制拷贝到新表中的记录。

下面的例子只拷贝字段second_columnd的值等于’Copy Me!’的记录的first_column

字段。

SELECT first_column INTO newtable

FROM mytable

WHERE second_column=’Copy Me!’

使用SQL修改已经建立的表是很困难的。例如,如果你向一个表中添加了一个字段,

没有容易的办法来去除它。另外,如果你不小心把一个字段的数据类型给错了,你将没有

办法改变它。但是,使用本节中讲述的SQL语句,你可以绕过这两个问题。

例如,假设你想从一个表中删除一个字段。使用SELECT INTO 语句,你可以创建该

表的一个拷贝,但不包含要删除的字段。这使你既删除了该字段,又保留了不想删除的数

据。

如果你想改变一个字段的数据类型,你可以创建一个包含正确数据类型字段的新表。

创建好该表后,你就可以结合使用UPDATE语句和SELECT 语句,把原来表中的所有数据

拷贝到新表中。通过这种方法,你既可以修改表的结构,又能保存原有的数据。

jsp连接数据库:

<%@ page language="java" import=".*, .*"

pageEncoding="GB18030"%>

<%

String username = ameter("username");

String password = ameter("password");

String password2 = ameter("password2");

e("");

Connection conn

nection("jdbc:mysql://localhost/bishe", "root", "admin");

String sqlQuery = "select count(*) from user where username = ?";

PreparedStatement psQuery = eStatement(sqlQuery);

ing(1, username);

ResultSet rs = eQuery();

();

int count = (1);

if(count > 0) {

direct("");

=

();

();

return;

}

String sql = "insert into user values (null, ?, ?)";

PreparedStatement ps = eStatement(sql);

ing(1, username);

ing(2, password);

eUpdate();

();

();

direct("");

%>

javaBean数据库连接:

e("");

Connection conn =

nection("jdbc:mysql://localhost/spring", "root", "bjsxt");

String sql = "insert into user values (null, ?, ?)";

PreparedStatement ps = eStatement(sql);

ing(1, rname());

ing(2, sword());

eUpdate();

();

();

hibernate 数据操作

Configuration cfg = new Configuration().configure();

factory = essionFactory().openSession();

Session session = sion();

//开启事务

ransaction();

//保存数据

(p);

//事务提交

nsaction().commit();

//关闭session

ession(session);

select(选择) 字段 from (表名) where(筛选条件)

group by(字段名,按什么分组) having (条件,在每组中筛选)

order by (排序)

----------------局部变量--------------

声明:

declare @name varchar(30)--声明一个存放学生名称的变量,最多存放30个字符

declare @age int

---------------全局变量-----------------

输出:

print '服务器的名称:'+@@servername

select @@servername as '是服务器的名称'

print '当前错误号:'+@@error(错误的:将 varchar 值 '当前错误号:' 转换为数据

类型为 int 的列时发生语法错误。)

print '当前错误号: '+convert(varchar(5),@@error)(正确)

---------------if-else语句----------------

declare @myavg float

select @myavg=AVG(writtenExam) from stuMarks

print '本班平均分'+convert(varchar(5),@myavg)

if(@myavg>70) ---(begin-end相当于java中的{})

begin

print '本班笔试成绩优秀,前三名的成绩为:'

select top 3 * from stuMarks order by writtenExam desc

end

else

begin

print '本班笔试成绩较差,后三名的成绩为: '

select top 3 * from stuMarks order by writtenExam [asc]

end

----------------while循环语句-------------

declare @n int

while(1=1)--条件永远成立

begin

select @n=count(*) from stuMarks where writtenExam<60 --统计不及格的人

if(@n>0)

update stuMarks set writtenExam=writtenExam+2 --每人加2分

else

break --退出循环

end

print '加分后的成绩如下:'

select * from stuMarks

-----------------case多分支语句-------------

select * from stuMarks --原始数据

print 'ABCDE五级显示成绩如下:'

select stuNo,成绩=case

when writtenExam<60 then 'E'

when writtenExam between 60 and 69 then 'D'

when writtenExam between 70 and 79 then 'C'

when writtenExam between 80 and 89 then 'B'

else 'A'

end

from stuMarks

-----------------go批处理语句------------------

use Master

go

create table stuInfo

(

id int not null,

name varchar(20)

)

go

-----------------in和not in子查询--------------------

in查询:

select stuName from stuInfo

where stuNo in (select stuNo from stuMarks where writtenExam=60)

not in查询:

select stuName from stuInfo

where stuNo not in (select stuNo from stuMarks)

go

------------------exists和not exists子查询------------

exists子查询:

1、if exists(select * from sysdatabases where name='stuDB')

drop database stuDB

go

2、if exists(select * from stuMarks where writtenExam>80)

begin

print '本班有人笔试成绩高于80分,每人只加2分,加分后的成绩如下:'

update stuMarks set writtenExam=writtenExam+2

select * from stuMarks

end

else

begin

print '本班无人笔试成绩高于80分,每人可以加5分,加分后的成绩如下:'

update stuMarks set writtenExam=writtenExam+5

select * from stuMarks

end

go

not exists子查询:

if not exists(select * from stuMarks where writtenExam>60 and labExam>60)

begin

print '本班无人通过考试,试题偏难,每人加3分,加分后的成绩如下:'

update stuMarks set writtenExam=writtenExam+3,labExam=labExam+3

select * from stuMarks

end

else

begin

print '本班考试成绩一般,每人只加1分,加分后的成绩如下:'

update stuMarks set writtenExam=writtenExam+1,labExam=labExam+1

select * from stuMarks

end