当前位置:首页 > 开发 > 数据库 > 正文

SQL语法

发表于: 2015-03-03   作者:Array_06   来源:转载   浏览:
摘要: //给你常用的sql语句,在Java语言中写法 (1) 数据记录筛选: sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列。默认升序ASC) sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]&q
//给你常用的sql语句,在Java语言中写法

(1) 数据记录筛选:

sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列。默认升序ASC)

sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]"

sql="select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]"

sql="select top 10 * from 数据表 order by 字段名 [desc]"

sql="select * from 数据表 where字段名in ('值1','值2','值3')"

sql="select * from 数据表 where字段名between 值1 and 值2"


(2) 更新数据记录:

sql="update 数据表 set字段名=字段值 where 条件表达式"

sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"


(3) 删除数据记录:

sql="delete from 数据表 where 条件表达式"

sql="delete from 数据表" (将数据表所有记录删除)


(4) 添加数据记录:

sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"

sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值

COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计

MAX(字段名) 取得一个表格栏最大的值

MIN(字段名) 取得一个表格栏最小的值

SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"

set rs=conn.excute(sql)

用 rs("别名") 获取统计的值,其它函数运用同上。

查询去除重复值:select distinct * from table1


(6) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )


(7) 单列求和:

SELECT SUM(字段名) FROM 数据表


SQL常用语句一览

sp_password   null,'新密码','sa'   修改数据库密码


(8)数据表的建立和删除:

CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)

例:CREATETABLEtab01 (namevarchar (50), datetimedefaultnow ())

DROPTABLE数据表名称(永久性删除一个数据表)


4.记录集对象的方法:

rs.movenext将记录指针从当前的位置向下移一行

rs.moveprevious将记录指针从当前的位置向上移一行

rs.movefirst将记录指针移到数据表第一行

rs.movelast将记录指针移到数据表最后一行

rs.absoluteposition=N将记录指针移到数据表第N行

rs.absolutepage=N将记录指针移到第N页的第一行

rs.pagesize=N设置每页为N条记录

rs.pagecount根据pagesize的设置返回总页数

rs.recordcount返回记录总数

rs.bof返回记录指针是否超出数据表首端,true表示是,false为否

rs.eof返回记录指针是否超出数据表末端,true表示是,false为否

rs.delete删除当前记录,但记录指针不会向下移动

rs.addnew添加记录到数据表末端

rs.update更新数据表记录


数据库的操作:

查看表:
查看数据库表结构:desc 表名;

查看数据库中所有的表:show tables;

修改表:
alter table 表名 add 字段名 类型(长度) 约束;--添加列。
alter table 表名 modify 字段名 类型(长度) 约束; --修改表的类型长度约束。
alter table 表名 drop 字段名; --删除列。
alter table 表名 change 旧字段名 新字段名 类型(长度)约束; --修改列名。
rename table 旧表名 to 新表名; --修改表名。
alter table 表名 character set 字符集; --修改表的字符集。

删除表:
drop table 表名;

SQL对表中数据的操作:// 添加含中文的数据带来的乱码,在mysql的安装路径下my.ini.文件里
[mysql]default-character-set=utf8 和 [mysqld]character-set-server=utf8里的字符集改为gbk。

SQL对表中记录进行操作
insert into 表 values (值,值)
update 表 set 字段=值,字段=值 where 条件;
delete from 表 where 条件;
Selete ... From ... Where ... Group by ... Having... Order by ...

查看当前服务器中所有的数据库:show databases;
查看当前数据库定义细节:show create database mysql2;

删除数据库:drop database mysql1;

修改数据库:alter database mysql1;
修改数据库的字符集和校对规则:alter database mysql1 character set gbk collate gbk_bin;

切换数据库:use 数据库名;
显示当前正在使用的数据库:select database();  //属于DDl语句。

SQL对表进行操作
create table 表名(字段 类型(长度) 约束,字段 类型(长度) 约束);
drop table 表名;
desc 表名; show tables;
alter table add、modify、drop、change、rename
单表约束:
主键约束:primary key
唯一约束:unique
非空约束:not null

insert into 表(id, username, password, truename, city, email)
values(1,'aaa','password','truename','beijing','aaa@sina.com')

更改数据库中字段的长度
alter table A modify B VARCHAR2(10);      把A表中的B字段改成长度为10的字符串

Update T_Category SET name='中国' WHERE id=001

数据库中添加字段
alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数
如:alter table zjtable add id varchar2(5)

新建表:
create table [表名]
(
[自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,
[字段1] nVarChar(50) default \'默认值\' null ,
[字段2] ntext null ,
[字段3] datetime,
[字段4] money null ,
[字段5] int default 0,
[字段6] Decimal (12,4) default 0,
[字段7] image null ,
)

添加主键: Alter table tabname add primary key(col)

删除主键: Alter table tabname drop primary key(col)



update jb_spzl set kp_item_name=upper(kp_item_name) 修改数据库表中某一列为大写

select * from master.dbo.sysobjects ,jm_barcode.dbo.users 多库查询

adotable1.sort:='字段名称 ASC'  adotable排序





数据库中操作:

%:代表任意长的一段字符   _ :代表一个字符      [a,b,c,d]:a、b、c、d中的任意一个   [^a,b,c,d]:不在a、b、c、d中的任意一个

添加记录:
部分字段://值的个数要与字段的个数一致。值是字符串或日期时,要用单引号引起来。
insert into 表(字段1,字段2,...) values(值1,值2,...);
所有字段:
insert into 表 values (值1,值2,...);

修改记录:
update 表 set 字段=值,字段=值; --修改表中所有记录。
update 表 set 字段=值,字段=值 where 条件; --按条件进行修改记录。

删除记录:
delete from 表名; -- 删除表中所以数据。
delete from 表名 where 条件; -- 按条件删除记录。

注意事项:
* 删除的时候删除一条记录,不能删除一条记录的某个字段(修改).
* 删除是删除表中的记录,删除整个表.drop table.
* 删除的时候一旦有外键关联,删除表中的记录,需要解除关系!
* 删除表中的记录truncate table 表名;删除表中的所有记录,delete from 表名;删除表中所有记录!

*truncate 和 delete删除表中所有记录的区别?
* delete属于DML,事务作用在DML语句上.事务可以回滚!.在delete语句执行后,如果在一个事务中,将数据找回来.delete将数据库表中的记录一条一条进行删除的.
* 事务:一组操作,要么一起成功,要么一起失败!
* truncate属于DDL.将整个表删除了,创建一个一样的表!------属于DML语句

查询记录:select [distinct]*列名1,列名2,... from 表名;  //distinct:去掉重复值。

查询表中所有信息:select * from 表名;

查询后的数值做+10处理:select name,math+10,english+10,chinese+10 from exam;

查询后显示总数值:select name,math+english+chinese sum from exam;

select条件过滤:select */列名 from 表名 where 条件;
添加记录:
部分字段://值的个数要与字段的个数一致。值是字符串或日期时,要用单引号引起来。
insert into 表(字段1,字段2,...) values(值1,值2,...);
所有字段:
insert into 表 values (值1,值2,...);

修改记录:
update 表 set 字段=值,字段=值; --修改表中所有记录。
update 表 set 字段=值,字段=值 where 条件; --按条件进行修改记录。

删除记录:
delete from 表名; -- 删除表中所以数据。
delete from 表名 where 条件; -- 按条件删除记录。

注意事项:
* 删除的时候删除一条记录,不能删除一条记录的某个字段(修改).
* 删除是删除表中的记录,删除整个表.drop table.
* 删除的时候一旦有外键关联,删除表中的记录,需要解除关系!
* 删除表中的记录truncate table 表名;删除表中的所有记录,delete from 表名;删除表中所有记录!

*truncate 和 delete删除表中所有记录的区别?
* delete属于DML,事务作用在DML语句上.事务可以回滚!.在delete语句执行后,如果在一个事务中,将数据找回来.delete将数据库表中的记录一条一条进行删除的.
* 事务:一组操作,要么一起成功,要么一起失败!
* truncate属于DDL.将整个表删除了,创建一个一样的表!------属于DML语句

查询记录:select [distinct]*列名1,列名2,... from 表名;  //distinct:去掉重复值。

查询表中所有信息:select * from 表名;

查询后的数值做+10处理:select name,math+10,english+10,chinese+10 from exam;

查询后显示总数值:select name,math+english+chinese sum from exam;

select条件过滤:select */列名 from 表名 where 条件;
1.增加字段
     alter table docdsp add dspcode  char(200)
2.删除字段
     ALTER TABLE table_NAME DROP COLUMN column_NAME
3.修改字段类型
     ALTER TABLE table_name     ALTER COLUMN column_name new_data_type
4.sp_rename 改名
     EXEC sp_rename '[dbo].[Table_1].[filedName1]', 'filedName2', 'COLUMN'
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
     语法
     sp_rename [ @objname = ] 'object_name' ,[ @newname = ] 'new_name',分类信息; [ , [ @objtype =] 'object_type' ]
     如:EXEC sp_rename  'newname','PartStock'
5.sp_help 显示表的一些基本情况
     sp_help 'object_name'   
如:EXEC sp_help     'PartStock'
6.判断某一表PartStock中字段PartVelocity是否存在
if   
exists     (select     *     from     syscolumns     where   
id=object_id('PartStock')     and     name='PartVelocity') 
print   
'PartVelocity exists'
else print 'PartVelocity not
exists'
另法:
判断表的存在性:
     select count(*) from sysobjects where type='U' and name='你的表名'
判断字段的存在性:
     select count(*) from syscolumns
     where
id     = (select id from sysobjects where type='U' and name='你的表名')
   
and     name = '你要判断的字段名'
 
一个小例子
--假设要处理的表名为:
tb
--判断要添加列的表中是否有主键
if exists(select 1 from sysobjects where
parent_obj=object_id('tb') and xtype='PK')
begin
print
'表中已经有主键,列只能做为普通列添加'
--添加int类型的列,默认值为0
alter table tb add 列名 int default

end
else
begin
print '表中无主键,添加主键列'
--添加int类型的列,默认值为0
alter
table tb add 列名 int primary key default 0 
end
7.随机读取若干条记录
       Access语法:SELECT top 10 * From 表名 ORDER BY
Rnd(id)
       Sql server:select top n * from 表名 order by newid()
     
mysql select * From 表名 Order By rand() Limit n
8.说明:日程安排提前五分钟提醒
       SQL:
select * from 日程安排 where datediff(minute,f开始时间,getdate())>5
9.前10条记录
       select top 10 * form. table1 where 范围
10.包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
       (select a
from tableA ) except (select a from tableB) except (select a from tableC)
11.说明:随机取出10条数据
       select top 10 * from tablename order by newid()
12.列出数据库里所有的表名
       select name from sysobjects where type=U
13.列出表里的所有的字段名
       select name from syscolumns where
id=object_id(TableName)
14.说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select
中的case。
       select type,sum(case vender when A then pcs else 0
end),sum(case vender when C then pcs else 0 end),sum(case vender when B then pcs
else 0 end) FROM tablename group by type
15.说明:初始化表table1
       TRUNCATE
TABLE table1
16.说明:几个高级查询运算词
  A: UNION 运算符
  UNION 运算符通过组合其他两个结果表(例如
TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION
ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
  B: EXCEPT 运算符
  EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2
中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
  C: INTERSECT 运算符
  INTERSECT 运算符通过只包括 TABLE1 和 TABLE2
中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT
ALL),不消除重复行。
  注:使用运算词的几个查询结果行必须是一致的。
17.说明:在线视图查询(表名1:a )
       select * from (SELECT a,b,c FROM a) T where
t.a > 1;
18.说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
       select * from
table1 where time between time1 and time2
       select a,b,c, from table1
where a not between 数值1 and 数值2
19.说明:in 的使用方法
       select * from table1 where a [not] in
(‘值1’,’值2’,’值4’,’值6’)
20.说明:两张关联表,删除主表中已经在副表中没有的信息
       delete from table1 where not exists (
select * from table2 where table1.field1=table2.field1
)
21. 说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
  法一:select * into b from a
where 1<>1
  法二:select top 0 * into b from a
22.说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
       insert into b(a, b, c)
select d,e,f from b;
23.说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
       insert into b(a, b, c)
select d,e,f from b in ‘具体数据库’ where 条件
  例子:..from b in
"&Server.MapPath(".")&"\data.mdb" &" where..
24.创建数据库
     
CREATE DATABASE database-name
25.说明:删除数据库
       drop database dbname
26.说明:备份sql server
  --- 创建
备份数据的 device
       USE master
       EXEC sp_addumpdevice disk, testBack,
c:\mssql7backup\MyNwind_1.dat
  --- 开始 备份
       BACKUP DATABASE pubs TO testBack
27.说明:创建新表
       create table tabname(col1 type1 [not null] [primary
key],col2 type2 [not null],..)
  根据已有的表创建新表:
       A:create table tab_new
like tab_old (使用旧表创建新表)
       B:create table tab_new as select col1,col2…
from tab_old definition only
28.说明:
  删除新表:drop table tabname
29.说明:
  增加一个列:Alter table tabname add column col
type
  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
30.说明:
  添加主键:Alter table tabname add primary key(col)
  说明:
  删除主键:Alter table tabname drop primary key(col)
31.说明:
  创建索引:create [unique] index idxname on tabname(col….)
  删除索引:drop index idxname
  注:索引是不可更改的,想更改必须删除重新建。
32.说明:
  创建视图:create view viewname as select statement
  删除视图:drop view viewname
33.说明:几个简单的基本的sql语句
  选择:select * from table1 where 范围
  插入:insert into table1(field1,field2) values(value1,value2)
  删除:delete from table1 where
范围
  更新:update table1 set field1=value1 where 范围
  查找:select * from table1
where field1 like ’%value1%’ ---like的语法很精妙,查资料!
  排序:select * from table1
order by field1,field2 [desc]
  总数:select count * as totalcount from
table1
  求和:select sum(field1) as sumvalue from table1
  平均:select
avg(field1) as avgvalue from table1
  最大:select max(field1) as maxvalue from
table1
  最小:select min(field1) as minvalue from table1

几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
前提是:表要先创建。
insert into b(a, b, c) select d,e,f from b;


5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
或者
select * from (select id,name,sex,age,row_number() over(order by id) as rownum from Student) t
where t.rownum>=3 and t.rownum<=4;

14、说明:前10条记录
select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select * from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据
select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()

19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'

21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')

怎样把具有相同字段的纪录删除,只留下一条。
select [标志字段id],count(*) into temp1 from [表名]
group by [标志字段id]
having count(*)>1

SQL Server日期计算
a. 一个月的第一天
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
b. 本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
c. 一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
d. 季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
e. 上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
f. 去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
g. 本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
h. 本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())
), 0)
i. 本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
获取表结构[把 'sysobjects' 替换 成 'tablename' 即可]

SQL语法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

推荐文章
编辑推荐
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号