常用的SQL语句

来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:21:52
一.创建表(含多个字段)
Create table table_name (column_name1 datatype1,column_name2 datatype2,...)
二.删除表格(所有记录)
Delete table_name 删除"表格记录"会把操作记录在日志中,可以通过事务回滚来恢复删除的数据
truncate table table_name删除"表格记录"不可恢复
三.删除表
drop table table_name把"表结构"和所有记录一起删除掉了
四.备份表
1.备份一样的表 select *into table_name1 from table_name2
2.备份一份空的表副本 select *into table_name1  from table_name2  where 1=2(因为 1是不可能等于2的,所以建立的表里不会有记录)
五.常用Select操作
1.为结果集中的列指定别名(新列名)
Select column_name as newcolumnname from table_name
或:Select newcolumnname=column_name from table_name
2.消除取值重复的行
Select distinct column_name from table_name
3.限制返回行数
选取第一条记录:select top 1* from table_name
选取前N条记录: select top N* from table_name
选取最后一条记录:select top 1* from table_name order by  column_name desc
选取最后N条记录:select top N* from table_name order by  column_name desc
选取任意一条记录(随机):select top 1* from table_name order by newid()
六.修改字段值
注:下面用c1代表column_name(列名)
1.修改某一字段前几个字符
Update table_name set c1=‘123’ + right(c1,len(c1)-3)
2.修改某一字段后几个字符
Update table_name set c1=left(c1,len(c1)-3) +’123’
七.对数据进行统计
1.返回记录的条数:Select count(*) as 数目 from table_name
2.返回某列记录的总和(数据类型需是数据类) Select sum(column_name) as 总和 from table_name
Select avg(column_name) as  平均数 from table_name
Select max(column_name) as 最大 from table_name
八.常用的几种查询
1.交叉连接查询(将两个表不加约束地连接在一起,连接产生的结果集的记录为两个表中记录的交叉乘积,
结果集的列为两个表属性性列的和.(使用时需两个表的记录条数对应)
Select *from table_name1 cross join table_name2
2.等值与非等值查询(返回两个表中的两个字段中某记录相同的所有记录)
Select *from table_name1  inner join table_name2 on table_name1.column_name=table_name2.column.name
例如:Select *from table1  inner join table8 on 姓名=table8.aa
3.自身连接查询(可以理解为一个表的两个副本之间的连接)
例:查询选修了两门或两门以上课程的学生姓名和课程名称(假设有一张学生选课表table1,姓名字段名为name,课程名称为coursename)
语句该这样写:select a.name,a.coursename from table1 as a join table1 as b on a.name=b.name and a.coursename!=b.coursename
九.外连接查询(分为左外连接,右外连接和全外连接)
1.左外连接
Select *from table_name1  left outer join table_name2 on table_name1.column_name=table_name2.column_name
2.右外连接(把left 改为right就行了)
3.全外连接(触类旁通,left 改为 full)
十.子查询
1.带有in运算符的子查询
例:查询有产品销售记录的产品信息
Select *from 产品 where 产品编号 in (select 产品编号 from 产品销量)
下面举一个稍微复杂的例子,涉及到三张表.求选修了课程名为”大学语文”的学生学号和姓名. (大学语文是课程表的属性列,学生学号和姓名是学生表的属性列,两者      之间通过课程注册表联系起来)
Select 学号,姓名 from 学生表 where 学号 in(select 学号 from 课程注册表 where 课程号 in (select 课程号 from 课程表 where 课程名=‘大学语     文’))
3.带有比较运算符的子查询,常用的比较运算符有>,>=,<,<=,<>,!=,!<,!>.
例:列出高于平均分的学生的信息(有一张表名为学生,含学号和姓名两个属性列,课程注册表含学号和成绩属性列)
Select *from 学生 Where 学号 in (select 学号 From 课程注册 Where 成绩 > (select avg(成绩) from 课程注册))
实用SQL语句
1.添加新记录
Insert into TableName(字段1,字段2,...) values(value1,value2,...)
例如:insert into Soft_info(SoftName) values(‘" + SoftNameTxtBox.Text + "‘)
2.修改任意一条记录(如要修改多条记录,可同时写多条语句)
Update Table_Name set Column_Name=** where ID=***
例如:Update table8 set aa=44 where ID=1
3.删除某条记录:
Delete from Table_Name where 条件
例如:Delete from table8 where ID=3
4.删除某一字段:
alter table Table_Name drop column Column_Name
例如:alter table table8 drop column cc
SQL核心语句
插入数据
向表中添加一个新记录,你要使用SQL INSERT 语句。这里有一个如何使用这种语句的例子:
INSERT mytable (mycolumn) VALUES (‘some data’)
这个语句把字符串’some data’插入表mytable的mycolumn字段中。将要被插入数据的字段的名字在第一个括号中指定,实际的数据在第二个括号中给出。
INSERT 语句的完整句法如下:
INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |
Values_list | select_statement}
如果一个表有多个字段,通过把字段名和字段值用逗号隔开,你可以向所有的字段中插入数据。假设表mytable有三个字段first_column,second_column,和third_column。下面的INSERT语句添加了一条三个字段都有值的完整记录:
INSERT mytable (first_column,second_column,third_column)
VALUES (‘some data’,’some more data’,’yet more data’)
注意
你可以使用INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
如果你在INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能:
如果该字段有一个缺省值,该值会被使用。例如,假设你插入新记录时没有给字段third_column提供数据,而这个字段有一个缺省值’some value’。在这种情况下,当新记录建立时会插入值’some value’。
如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息:
The column in table mytable may not be null.
最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
注意
向一个有标识字段的表中插入新记录后,你可以用SQL变量@@identity来访问新记录
的标识字段的值。考虑如下的SQL语句:
INSERT mytable (first_column) VALUES(‘some value’)
INSERT anothertable(another_first,another_second)
VALUES(@@identity,’some value’)
如果表mytable有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量@@identity总是保存最后一次插入标识字段的值。
字段another_first应该与字段first_column有相同的数据类型。但是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。
删除记录
要从表中删除一个或多个记录,需要使用SQL DELETE语句。你可以给DELETE 语句提供WHERE 子句。WHERE子句用来选择要删除的记录。例如,下面的这个DELETE语句只删除字段first_column的值等于’Delete Me’的记录:
DELETE mytable WHERE first_column=’Deltet Me’
DELETE 语句的完整句法如下:
DELETE [FROM] {table_name|view_name} [WHERE clause]
在SQL SELECT 语句中可以使用的任何条件都可以在DELECT 语句的WHERE子句 中使用。例如,下面的这个DELETE语句只删除那些first_column字段的值为’goodbye’或second_column字段的值为’so long’的记录:
DELETE mytable WHERE first_column=’goodby’ OR second_column=’so long’
如果你不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。你不应该有这种想法。如果你想删除应该表中的所有记录,应使用第十章所讲的TRUNCATE TABLE语句。
注意
为什么要用TRUNCATE TABLE 语句代替DELETE语句?当你使用TRUNCATE TABLE语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比DELETE快得多。
更新记录
要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。请看这个例子:
UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’
这个UPDATE 语句更新所有second_column字段的值为’Update Me!’的记录。对所有被选中的记录,字段first_column的值被置为’Updated!’。
下面是UPDATE语句的完整句法:
UPDATE {table_name|view_name} SET [{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHERE clause]
注意
你可以对文本型字段使用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 语句,把原来表中的所有数据拷贝到新表中。通过这种方法,你既可以修改表的结构,又能保存原有的数据