将sql固定语法不变色,将sql结果改变颜色
SQL的基本语法
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
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
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的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
11、说明:几个高级查询运算词
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),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left (outer) join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Group by:
一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
13、对数据库进行操作:
分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
二、提升
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 11(仅用于SQlServer)
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"Server.MapPath(".")"\data.mdb" "' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a 1;
8、说明: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.排序字段
具体实现:
关于数据库分页:
declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid-1)’
exec sp_executesql @sql
注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
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 a 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、说明:删除重复记录
1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
评价: 这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
alter table tablename
--添加一个自增列
add column_b int identity(1,1)
delete from tablename where column_b not in(
select max(column_b) from tablename group by column1,column2,...)
alter table tablename drop column column_b
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U' // U代表用户
21、说明:列出表里的所有的列名
select name from syscolumns where id=object_id('TableName')
22、说明:列示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
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

求SQL关键字和其语法(好的话,给100分)
1.数据定义语言(DDL)
数据定义语言是指用来定义和管理数据库以及数据库中的各种对象的语句,这些语句包括Create、Alter和Drop等语句。在SQL Server 2000中,数据库对象包括表、视图、触发器、存储过程、规则、缺省、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过使用Create、Alter、Drop等语句来完成。
2.数据操纵语言(DML)
数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句,这些语句包括Select、Insert、Update、Delete等。在默认情况下,只有sysadmin、dbcreator、db_owner或db_datawriter等角色的成员才有权利执行数据操纵语言。
3.数据控制语言(DCL)
数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、DENY、REVOKE等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。
GRANT语句是授权语句,它可以把语句权限或者对象权限授予给其他用户和角色。
DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。
REVOKE语句是与GRANT语句相反的语句,它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限。
----------------------------------------------
4. 系统存储过程
系统存储过程是SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其它的系统管理任务。系统存储过程可以在任意一个数据库中执行。系统存储过程创建并存放于系统数据库master中,并且名称以sp_或者xp_开头。
sp_addtype:用于定义一个用户定义数据类型。
sp_configure:用于管理服务器配置选项设置。
xp_sendmail:用于发送电子邮件或寻呼信息。
sp_stored_procedures:用于返回当前数据库中的存储过程的清单。
sp_help:用于显示参数清单和其数据类型。
sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象。
sp_helptext:用于显示存储过程的定义文本。
sp_rename:用于修改当前数据库中用户对象的名称
3.数据控制语言(DCL)
数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、DENY、REVOKE等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。
GRANT语句是授权语句,它可以把语句权限或者对象权限授予给其他用户和角色。
DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。
REVOKE语句是与GRANT语句相反的语句,它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限。
----------------------------------------------
4. 系统存储过程
系统存储过程是SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其它的系统管理任务。系统存储过程可以在任意一个数据库中执行。系统存储过程创建并存放于系统数据库master中,并且名称以sp_或者xp_开头。
sp_addtype:用于定义一个用户定义数据类型。
sp_configure:用于管理服务器配置选项设置。
xp_sendmail:用于发送电子邮件或寻呼信息。
sp_stored_procedures:用于返回当前数据库中的存储过程的清单。
sp_help:用于显示参数清单和其数据类型。
sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象。
sp_helptext:用于显示存储过程的定义文本。
sp_rename:用于修改当前数据库中用户对象的名称。
程序代码
1. EXEC sp_renamedb 'userdb1', 'userdb2'
更改数据库的名称,由userdb1更改为userdb2
2.EXEC sp_rename 'user_log','用户登录表'
更改当前数据库表的名称,由user_log,改为'用户登录表'
EXEC sp_rename 'user_info.user_name', '用户名','column'
将user_info表的'user_name'列重命名为'用户名'
3.EXEC sp_detach_db 'pubs', 'true'
sp_detach_db
从服务器分离数据库,并可以选择在分离前在所有的表上运行 Update STATISTICS。
4. 将数据库附加到服务器
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'
5. 将只有一个数据文件的数据库附加到当前服务器
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
----------------------------------------------
SQL中的注释
在SQL Server中,可以使用两种类型的注释字符:一种是ANSI标准的注释符“--”,它用于单行注释;另一种是与C语言相同的程序注释符号,即“/* */”。
SQL中的变量
Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。
3.数据控制语言(DCL)
数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、DENY、REVOKE等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。
GRANT语句是授权语句,它可以把语句权限或者对象权限授予给其他用户和角色。
DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。
REVOKE语句是与GRANT语句相反的语句,它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限。
----------------------------------------------
4. 系统存储过程
系统存储过程是SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其它的系统管理任务。系统存储过程可以在任意一个数据库中执行。系统存储过程创建并存放于系统数据库master中,并且名称以sp_或者xp_开头。
sp_addtype:用于定义一个用户定义数据类型。
sp_configure:用于管理服务器配置选项设置。
xp_sendmail:用于发送电子邮件或寻呼信息。
sp_stored_procedures:用于返回当前数据库中的存储过程的清单。
sp_help:用于显示参数清单和其数据类型。
sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象。
sp_helptext:用于显示存储过程的定义文本。
sp_rename:用于修改当前数据库中用户对象的名称。
程序代码
1. EXEC sp_renamedb 'userdb1', 'userdb2'
更改数据库的名称,由userdb1更改为userdb2
2.EXEC sp_rename 'user_log','用户登录表'
更改当前数据库表的名称,由user_log,改为'用户登录表'
EXEC sp_rename 'user_info.user_name', '用户名','column'
将user_info表的'user_name'列重命名为'用户名'
3.EXEC sp_detach_db 'pubs', 'true'
sp_detach_db
从服务器分离数据库,并可以选择在分离前在所有的表上运行 Update STATISTICS。
4. 将数据库附加到服务器
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'
5. 将只有一个数据文件的数据库附加到当前服务器
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
----------------------------------------------
SQL中的注释
在SQL Server中,可以使用两种类型的注释字符:一种是ANSI标准的注释符“--”,它用于单行注释;另一种是与C语言相同的程序注释符号,即“/* */”。
SQL中的变量
Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。
局部变量:局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量可以作为计数器来计算循环执行的次数,或是控制循环执行的次数。另外,利用局部变量还可以保存数据值,以供控制流语句测试以及保存由存储过程返回的数据值等。局部变量被引用时要在其名称前加上标志“@”,而且必须先用DECLARE命令定义后才可以使用。
全局变量:全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。
使用全局变量时应该注意以下几点:
①全局变量不是由用户的程序定义的,它们是在服务器级定义的。
②用户只能使用预先定义的全局变量。
③引用全局变量时,必须以标记符“@@”开头。
④局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。
----------------------------------------------
SQL中的函数
在Transact-SQL语言中,函数被用来执行一些特殊的运算以支持SQL Server的标准命令。Transact-SQL 编程语言提供了三种函数:
一行集函数:行集函数可以在Transact-SQL语句中当作表引用。
二聚合函数:聚合函数用于对一组值执行计算并返回一个单一的值。
三标量函数:标量函数用于对传递给它的一个或者多个参数值进行处理和计算,并返回一个单一的值。
1.字符串函数
字符串函数包括:
基本字符串函数:UPPER、LOWER、SPACE、REPLICATE、STUFF、REVERSE、LTRIM、RTRIM。
字符串查找函数:CHARINDEX、PATINDEX。
长度和分析函数:DATALENGTH、SUBSTRING、RIGHT。
转换函数:ASCH、CHAR、STR、SOUNDEX、DIFFERENCE。
基本字符串函数
UPPER:将小写字符数据转换为大写的字符
LOWER:将大写字符数据转换为小写的字符
SPACE:返回由重复的空格组成的字符串。如:space(2)则返回两个空格
REPLICATE:以指定的次数重复字符表达式。
语法:REPLICATE ( character_e-xpression , integer_e-xpression )
如:Select REPLICATE(au_fname, 2) FROM authors,则重复两遍每个作者的名字
STUFF:删除指定长度的字符并在指定的起始点插入另一组字符。
语法:STUFF ( character_e-xpression , start , length , character_e-xpression )
(start是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_e-xpression 长,则返回空字符串。
length是一个整数,指定要删除的字符数。如果 length 比第一个 character_e-xpression 长,则最多删除到最后一个 character_e-xpression 中的最后一个字符。)
3.数据控制语言(DCL)
数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、DENY、REVOKE等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。
GRANT语句是授权语句,它可以把语句权限或者对象权限授予给其他用户和角色。
DENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。
REVOKE语句是与GRANT语句相反的语句,它能够将以前在当前数据库内的用户或者角色上授予或拒绝的权限删除,但是该语句并不影响用户或者角色从其他角色中作为成员继承过来的权限。
----------------------------------------------
4. 系统存储过程
系统存储过程是SQL Server系统创建的存储过程,它的目的在于能够方便地从系统表中查询信息,或者完成与更新数据库表相关的管理任务或其它的系统管理任务。系统存储过程可以在任意一个数据库中执行。系统存储过程创建并存放于系统数据库master中,并且名称以sp_或者xp_开头。
sp_addtype:用于定义一个用户定义数据类型。
sp_configure:用于管理服务器配置选项设置。
xp_sendmail:用于发送电子邮件或寻呼信息。
sp_stored_procedures:用于返回当前数据库中的存储过程的清单。
sp_help:用于显示参数清单和其数据类型。
sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象。
sp_helptext:用于显示存储过程的定义文本。
sp_rename:用于修改当前数据库中用户对象的名称。
程序代码
1. EXEC sp_renamedb 'userdb1', 'userdb2'
更改数据库的名称,由userdb1更改为userdb2
2.EXEC sp_rename 'user_log','用户登录表'
更改当前数据库表的名称,由user_log,改为'用户登录表'
EXEC sp_rename 'user_info.user_name', '用户名','column'
将user_info表的'user_name'列重命名为'用户名'
3.EXEC sp_detach_db 'pubs', 'true'
sp_detach_db
从服务器分离数据库,并可以选择在分离前在所有的表上运行 Update STATISTICS。
4. 将数据库附加到服务器
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'
5. 将只有一个数据文件的数据库附加到当前服务器
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
----------------------------------------------
SQL中的注释
在SQL Server中,可以使用两种类型的注释字符:一种是ANSI标准的注释符“--”,它用于单行注释;另一种是与C语言相同的程序注释符号,即“/* */”。
SQL中的变量
Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。
局部变量:局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量可以作为计数器来计算循环执行的次数,或是控制循环执行的次数。另外,利用局部变量还可以保存数据值,以供控制流语句测试以及保存由存储过程返回的数据值等。局部变量被引用时要在其名称前加上标志“@”,而且必须先用DECLARE命令定义后才可以使用。
全局变量:全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。
使用全局变量时应该注意以下几点:
①全局变量不是由用户的程序定义的,它们是在服务器级定义的。
②用户只能使用预先定义的全局变量。
③引用全局变量时,必须以标记符“@@”开头。
④局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。
----------------------------------------------
SQL中的函数
在Transact-SQL语言中,函数被用来执行一些特殊的运算以支持SQL Server的标准命令。Transact-SQL 编程语言提供了三种函数:
一行集函数:行集函数可以在Transact-SQL语句中当作表引用。
二聚合函数:聚合函数用于对一组值执行计算并返回一个单一的值。
三标量函数:标量函数用于对传递给它的一个或者多个参数值进行处理和计算,并返回一个单一的值。
1.字符串函数
字符串函数包括:
基本字符串函数:UPPER、LOWER、SPACE、REPLICATE、STUFF、REVERSE、LTRIM、RTRIM。
字符串查找函数:CHARINDEX、PATINDEX。
长度和分析函数:DATALENGTH、SUBSTRING、RIGHT。
转换函数:ASCH、CHAR、STR、SOUNDEX、DIFFERENCE。
基本字符串函数
UPPER:将小写字符数据转换为大写的字符
LOWER:将大写字符数据转换为小写的字符
SPACE:返回由重复的空格组成的字符串。如:space(2)则返回两个空格
REPLICATE:以指定的次数重复字符表达式。
语法:REPLICATE ( character_e-xpression , integer_e-xpression )
如:Select REPLICATE(au_fname, 2) FROM authors,则重复两遍每个作者的名字
STUFF:删除指定长度的字符并在指定的起始点插入另一组字符。
语法:STUFF ( character_e-xpression , start , length , character_e-xpression )
(start是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_e-xpression 长,则返回空字符串。
length是一个整数,指定要删除的字符数。如果 length 比第一个 character_e-xpression 长,则最多删除到最后一个 character_e-xpression 中的最后一个字符。)
REVERSE:反转字符串Select REVERSE('abcd') 则返回‘dcba’
字符串查找函数
参考:
长度和分析函数
DATALENGTH :返回任何表达式所占用的字节数。
SUBSTRING:参考
LEFT:返回从字符串左边开始指定个数的字符。
RIGHT:返回从字符串左边开始指定个数的字符。Select RIGHT(au_fname, 5) FROM authors
2.日期和时间函数
datepart
示例:
3.数学函数
数学函数用于对数字表达式进行数学运算并返回运算结果。 常用的有:CEILING()、FLOOR()、ROUND()函数
4.转换函数
一般情况下,SQL Server会自动处理某些数据类型的转换。例如,如果比较 char 和 datetime 表达式、smallint 和 int 表达式、或不同长度的 char 表达式,SQL Server 可以将它们自动转换,这种转换被称为隐性转换。但是,无法由SQL Server自动转换的或者是SQL Server自动转换的结果不符合预期结果的,就需要使用转换函数做显示转换。转换函数有两个:CONVERT和CAST。
CAST ( e-xpression AS data_type )
CONVERT函数允许用户把表达式从一种数据类型转换成另一种数据类型,还允许把日期转换成不同的样式。其语法形式为:
CONVERT (data_type[(length)],e-xpression [,style])
流程控制语句是指那些用来控制程序执行和流程分支的命令,在SQL Server 2000中,流程控制语句主要用来控制SQL语句、语句块或者存储过程的执行流程。
IF Boolean_e-xpression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
BEGIN
{ sql_statement
| statement_block }
END
SQl语法求高人指点
你的这个 a 是什么? 条件吗? 如果是的话这么写
delete from table where a=' '
连接查询
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一
个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑
运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接
连接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接
表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些
运算符包括、=、=、、!、!和。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询
结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.cityQQ291911320
(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
如下面使用左外连接将论坛内容和作者信息连接起来:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
----------------------------------------------------------------------------------
三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement为待联合的SELECT查询语句。
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一
行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1 UNION (查询2 UNION 查询3)
INSERT语句
用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:
INSERT INTO EMPLOYEES valueS
(\'Smith\',\'John\',\'1980-06-10\',
\'Los Angles\',16,45000);
通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。
既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:
INSERT INTO EMPLOYEES valueS
(\'Bunyan\',\'Paul\',\'1970-07-04\', \'Boston\',12,70000);
INSERT INTO EMPLOYEES valueS
(\'John\',\'Adams\',\'1992-01-21\',
\'Boston\',20,100000);
INSERT INTO EMPLOYEES valueS
(\'Smith\',\'Pocahontas\',\'1976-04-06\',
\'Los Angles\',12,100000);
INSERT INTO EMPLOYEES valueS
(\'Smith\',\'Bessie\',\'1940-05-02\',
\'Boston\',5,200000);
INSERT INTO EMPLOYEES valueS
(\'Jones\',\'Davy\',\'1970-10-10\', \'Boston\',8,45000);
INSERT INTO EMPLOYEES valueS
(\'Jones\',\'Indiana\',\'1992-02-01\',
\'Chicago\',NULL,NULL);
在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。
有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:
INSERT INTO EMPLOYEES(
FIRST_NAME, LAST_NAME,
HIRE_DATE, BRANCH_OFFICE)
value(
\'Indiana\',\'Jones\',
\'1992-02-01\',\'Indianapolis\');
这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。
让我们来看一看上述INSERT语句的语法图:
INSERT INTO table
[(column { ,column})]
valueS
(columnvalue [{,columnvalue}]);
和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。value子句和可选的列名列表中必须使用圆括号。
SELECT语句
SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。
SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。
SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算-“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。
SELECT语句最简单的语法如下:
SELECT columns FROM tables;
当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。
让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。
假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:
SELECT BRANCH_OFFICE FROM EMPLOYEES;
以上SELECT语句的执行将产生如图2中表2所示的结果。
由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES;
这次查询的结果如表3所示。
现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
ORDER BY BRANCH_OFFICE ASC;
这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。
同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。
假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:
SELECT BRANCH_OFFICE,FIRST_NAME,
LAST_NAME,SALARY,HIRE_DATE
FROM EMPLOYEES
ORDER BY SALARY DESC,
HIRE_DATE DESC;
这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。
将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:
SELECT * FROM EMPLOYEES;
这次查询返回整个EMPLOYEES表,如表1所示。
下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):
SELECT [DISTINCT]
(column [{, columns}])| *
FROM table [ {, table}]
[ORDER BY column [ASC] | DESC
[ {, column [ASC] | DESC }]];
定义选择标准
在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:
SELECT columns FROM tables [WHERE predicates];
WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = \'Jones\';
LAST_NAME = \'Jones\'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。
使用最多的六种比较
我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = \'Jones\'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:
等于 =
不等于
小于
大于
小于或等于 =
大于或等于 =
下面给出了不是基于等值比较的一个例子:
SELECT * FROM EMPLOYEESWHERE SALARY 50000;
这一查询将返回年薪高于$50,000.00的职员(参见表7)。
逻辑连接符
有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = \'Jones\' AND FIRST_NAME = \'Davy\';
在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = \'Jones\' OR LAST_NAME = \'Smith\';
有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:
SELECT * FROM EMPLOYEES
WHERE NOT(BRANCH_OFFICE = \'Boston\');
关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。
断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:
SELECT * FROM EMPLOYEES
WHERE (LAST_NAME = \'Jones\'
AND FIRST_NAME = \'Indiana\')
OR (LAST_NAME = \'Smith\'
AND FIRST_NAME = \'Bessie\');
SQL沿用数学上标准的表达式求值的约定-圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。
zxcvbnm12pk希望对您有帮助,望采纳!
如何让 Editplus 支持 SQL 语法高亮
方法/步骤
首先新建一个文本文档,并打开它
在打开的文档中添加如下内容:(内容较长,建议复制)
#TITLE=SQL
; SQL syntax file written by xxx
#DELIMITER=,(){}[]-+*%/='~!|?:;.
#QUOTATION1='
#CONTINUE_QUOTE=n
#LINECOMMENT=--
#LINECOMMENT2=#
#COMMENTON=/*
#COMMENTOFF=*/
#ESCAPE=\
#SPECIAL_STX=SQL
#KEYWORD=SQL Tags
;var type
sql_variant
datetime
smalldatetime
float
real
decimal
money
smallmoney
bigint
int
smallint
tinyint
bit
ntext
text
image
integer
timestamp
uniqueidentifier
nvarchar
nchar
varchar
char
varbinary
binary
;database entities
COLUMN
CONSTRAINT
CURSOR
DATABASE
INDEX
TABLE
VIEW
ENGINE
#KEYWORD=Entities
;index type
BTREE
HASH
;character set
utf8
latine
;MySQL features
InnoDB
#KEYWORD=Reserved words
;Common
ADD
ALL
ALTER
AND
ANY
AS
ASC
AUTHORIZATION
AVG
BACKUP
BEGIN
BETWEEN
BREAK
BROWSE
BULK
BY
CASCADE
CASE
CHARACTER
CHECK
CHECKPOINT
CLOSE
CLUSTERED
COALESCE
COMMIT
COMMENT
COMMITTED
COMPUTE
CONFIRM
CONNECT
CONTAINS
CONTAINSTABLE
CONTINUE
CONTROLROW
CONVERT
COUNT
CREATE
CROSS
CURRENT
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
DBCC
DEALLOCATE
DECLARE
DEFAULT
DELETE
DENY
DESC
DISK
DISTINCT
DISTRIBUTED
DOUBLE
DROP
DUMMY
DUMP
ELSE
END
ERRLVL
ERROREXIT
ESCAPE
EXCEPT
EXEC
EXECUTE
EXISTS
EXIT
FETCH
FILE
FILLFACTOR
FLOPPY
FOR
FOREIGN
FREETEXT
FREETEXTTABLE
FROM
FULL
GOTO
GRANT
GROUP
HAVING
HOLDLOCK
IDENTITY
IDENTITY_INSERT
IDENTITYCOL
IF
IN
INNER
INSERT
INTERSECT
INTO
IS
ISOLATION
JOIN
KEY
KILL
LEFT
LEVEL
LIKE
LINENO
LOAD
MAX
MIN
MIRROREXIT
NATIONAL
NOCHECK
NONCLUSTERED
NOT
NULL
NULLIF
OF
OFF
OFFSETS
ON
ONCE
ONLY
OPEN
OPENDATASOURCE
OPENQUERY
OPENROWSET
OPTION
OR
ORDER
OUTER
OVER
PERCENT
PERM
PERMANENT
PIPE
PLAN
PRECISION
PREPARE
PRIMARY
PRIVILEGES
PROC
PROCEDURE
PROCESSEXIT
PUBLIC
RAISERROR
READ
READTEXT
RECONFIGURE
REFERENCES
REPEATABLE
REPLICATION
RESTORE
RESTRICT
RETURN
REVOKE
RIGHT
ROLLBACK
ROWCOUNT
ROWGUIDCOL
RULE
SAVE
SCHEMA
SELECT
SERIALIZABLE
SESSION_USER
SET
SETUSER
SHUTDOWN
SOME
STATISTICS
SUBSTR
SUM
SYSTEM_USER
TABLE
TAPE
TEMP
TEMPORARY
TEXTSIZE
THEN
TIMESTAMP
TO
TOP
TRAN
TRANSACTION
TRIGGER
TRUNCATE
TSEQUAL
UNCOMMITTED
UNION
UNIQUE
UPDATE
UPDATETEXT
USE
USER
USING
VALUES
VARYING
WAITFOR
WHEN
WHERE
WHILE
WITH
WORK
WRITETEXT
;MySQL Features
AUTO_INCREMENT
如图,添加完成后,关闭窗口并保存,然后将文本文档的文件名命名为“sql.stx”(请确保你的电脑已经设置不隐藏文件扩展名)
将这个 sql.stx 文件拖曳进你的 editplus 软件安装目录中,如图
打开 editplus 的“参数设置”菜单,打开后点击“添加”按钮
输入 SQL,并确定
点击如图所示的“三个点”按钮来添加语法文件,也就是刚才我们拖曳进去的 sql.stx 文件
添加好后,在“文件扩展名”一栏中输入“sql”,即对打开的扩展名为 sql 的文件进行高亮显示
9
此时我们再随便用 editplus 打开一个 sql 文件都可以看到语法高亮了
求sql语法
SQL语言快速入门(一)
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。
SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。
数据库表格
一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库
中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有
自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型
,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个
名为天气的数据库表格的实例。
城市 最高气温 最低气温
北京 10 5
上海 15 8
天津 8 2
重庆 20 13
该表格中“城市”,“最高气温”和“最低气温”就是三个不同的列
,而表格中的每一行则包含了具体的表格数据。
数据查询
在众多的SQL命令中,select语句应该算是使用最频繁的。Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([] 表示可选项)
Select语句中位于Select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
Select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目
标表格。
Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在where条件从句中可以使用以下一些运算符来设定查询标准:
= 等于
大于
小于
= 大于等于
= 小于等于
不等于
除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。
LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
Select firstname, lastname, city
from employee
where firstname LIKE ‘E%’;
(注意,字符串必须被包含在单括号内)
上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:
Select * from employee
where firstname = ‘May’;
查询所有名称为May的行。
SQL语言快速入门(二)
创建表格
SQL语言中的create table语句被用来建立新的数据库表格。Create table
语句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);
如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件
选项:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
举例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
简单来说,创建新表格时,在关键词create table后面加入所要建立的表格
的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件
等。注意,所有的SQL语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面
可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在
称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或
列的名称。
数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采
用的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:
char(size):固定长度字符串,其中括号中的size用来设定字符串的最大
度。Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于
设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限
制条件就是当向特定列输入数据时所必须遵守的规则。
例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有
记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件
还包括not, null和primary key等。Not null用来规定表格中某一列的值
不能为空.Primary key则为表格中的所有记录规定了唯一的标识符。
向表格中插入数据
SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语
句的使用格式如下:
insert into tablename
(first_column,...last_column)
values (first_value,...last_value);
例如:
insert into employee
(firstname, lastname, age, address, city)
values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”);
简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输
入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后
,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的
记录值。
更新记录
SQL语言使用update语句更新或修改满足规定条件的现有记录。
Update语句的格式为:
update tablename
set columnname = newvalue [, nextcolumn = newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
update employee
set age = age+1
where first_name= ‘Mary’and last_name= ‘Williams’;
使用update语句时,关键一点就是要设定好用于进行判断的where条件
从句。
删除记录
SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的
格式为:
delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete from employee
where lastname = May;
简单来说,当需要删除某一行或某个记录时,在delete from关键词之
后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,
如果用户在使用delete语句时不设定where从句,则表格中的所有记录将
全部被删除。
删除数据库表格
在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记
录。Drop table命令的使用格式为:
drop table tablename;
例如:
drop table employee;
如果用户希望将某个数据库表格完全删除,只需要在drop table命令后
输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有
记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列
的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息
全部删除。
以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
SQL语言快速入门(三)
我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作。
SELECT…FROM
为方便讲解,我们在数据库中创建名为Store_Information的如下数据表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
SQL语言中用于数据库查询的最简单的命令就是SELECT…FROM,语法格
式为:
SELECT \"column_name\" FROM \"table_name\"
例如,如果我们希望查询Store_Information数据表中所有的商店名称时,可
以使用如下命令:
SELECT store_name FROM Store_Information
查询结果显示为:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston
如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入
SELECT关键字之后,中间用“,”隔开即可。
DISTINCT
SELECT关键字支持用户查询数据表中指定字段的所有数据,但是这样有时
就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信
息的话,可以使用SQL语言的DISTINCT关键字。语法格式如下:
SELECT DISTINCT \"column_name\"
FROM \"table_name\"
例如,我们可以使用以下命令查询Store_Information数据表具有不同记录值
的所有记录。
SELECT DISTINCT Store_Name FROM Store_Information
查询结果如下:
Store_Name
Los Angeles
San Diego
Boston
WHERE
除了选择具有不同记录值的记录之外,有时我们可能还会需要根据某些条
件对数据库中的数据进行查询。例如,我们可能需要查询Store_Information数
据表中销售额超过1000美圆的商店。为此,我们可以使用SQL语言的WHERE
关键字设定查询条件。语法格式如下:
SELECT \"column_name\"
FROM \"table_name\"
WHERE \"condition\"
由此,我们可以使用如下命令查询销售额超过1000美圆的商店信息:
SELECT store_name FROM Store_Information WHERE Sales 1000
查询结果显示为:
store_name
Los Angeles
运算函数
现在,我们已经了解到在使用SQL语言进行数据库查询操作时可以通过对
数值的判断设定灵活的查询条件。为了增强对运算的支持能力,SQL提供了众
多实用的运算函数供广大用户使用。例如,我们可以直接在SQL命令中调用
SUM或AVG这两个分别用于计算总数和平均数的函数。语法格式如下:
SELECT \"function type\"(\"column_name\")
FROM \"table_name\"
如果我们希望查询Store_Information数据表中所有商店的总销售额的话,可
以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
查询结果显示为:
SUM(Sales)
50
COUNT
除了SUM和AVG函数之外,COUNT函数是SQL语言中另一个较为常用
的运算函数。COUNT函数可以用来计算数据表中指定字段所包含的记录数目。
语法格式为:
SELECT COUNT(\"column_name\")
FROM \"table_name\"
例如,如果我们希望查询Store_Information数据表中的有关商店的记录条数
时,可以使用如下命令:
SELECT COUNT(store_name)
FROM Store_Information
查询结果显示为:
Count(store_name)
4
COUNT函数可以和DISTINCT关键字一起使用从而可以查询数据表中指定
字段中所有具有不同记录值的记录数目.例如,如果我们希望查询Store_Information
数据表中不同商店的数目时,可以使用如下命令:
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
查询结果显示为:
Count(DISTINCT store_name)
3
GROUP BY
下面我们来进一步看一下SQL语言中的集合函数。上文中,我们曾使用
SUM函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销
售额时该怎么办呢?要实现这一目的我们需要做两件事:首先,我们需要查询
商店名称和销售额两个字段;然后,我们使用SQL语言的GROUP BY命令将
销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUP
BY命令的语法格式为:
SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
查询结果显示为:
store_name SUM(Sales)
Los Angeles 00
San Diego 0
Boston 0
小注:
GROUP BY关键字一般应用于同时查询多个字段并对字段进行算术运
算的SQL命令中。
HAVING
用户在使用SQL语言的过程中可能希望解决的另一个问题就是对由sum或
其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_
Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使
用HAVING从句。语法格式为:
SELECT \"column_name1\", SUM(\"column_name2\")
FROM \"table_name\"
GROUP BY \"column_name1\"
HAVING (arithematic function condition)
(GROUP BY从句可选)
由此,我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) 1500
查询结果显示为:
store_name SUM(Sales)
Los Angeles 00
小注:
SQL语言中设定集合函数的查询条件时使用HAVING从句而不是
WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。
ALIAS
下面,我们重点介绍一下如何在SQL命令中设定别名。SQL语言中一般使
用两种类型的别名,分别为字段别名和数据表别名。简单的说,使用字段别名
可以帮助我们有效的组织查询的输出结果。例如,上文所列举的多个实例中,
当我们计算商店销售总额时,显示结果中就会出现SUM(sales)。虽然SUM(sales)
并不会对我们理解查询结果带来不便,但是如果我们需要在查询中使用多项复
杂运算时,显示结果就不会这么直观了。如果这时我们使用字段别名就会极大
的提高查询结果的可读性。
对于数据表别名,我们可以通过将别名直接放置在FROM从句中数据表名
称的后面设定。数据表别名在我们下面将要讲述的连接多个数据表进行查询的
操作中极为有用。
字段和数据表别名的语法格式如下:
SELECT \"table_alias\".\"column_name1\" \"column_alias\"
FROM \"table_name\" \"table_alias\"
即别名都直接放置在各自对应名称的后面,中间用空格分开。
以Store_Information数据表为例,我们可以在GROUP BY一节中所使用的
SQL命令中设置如下字段和数据表别名:
SELECT A1.store_name \ "Store\", SUM(Sales) \"Total Sales\"
FROM Store_Information A1
GROUP BY A1.store_name
查询结果显示为:
Store Total Sales
Los Angeles 00
San Diego 0
Boston 0
连接多个数据表
最后,我们来看一下如果使用SQL语言连接多个数据表,实现对多个数据
表的查询。为方便讲解,我们在数据库中分别创建了两个名为Store_Information
和Region的数据表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
Region
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
下面,我们就来看一下通过数据表的连接实现按不同区域查询销售额。
我们注意到在名为Region的数据表中包含区域和商店两个字段信息,而在名为
Store_Information的数据表中则包含每一家商店的销售信息。因此,为了得到按
区域划分的销售信息,我们需要将两个不同数据表的信息结合在一起进行查询.
通过对上述两个数据表的分析,我们发现每个数据表中都包含一个名为
Store_Name的字段,因此,我们可以使用如下命令实现查询目的:
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Region A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
查询结果显示为:
REGION SALES
East 0
West 50
说明:
上述查询命令的前两行用于指定所要查询的目标字段,分别为Region数据
表中的Region_Name字段和Store_Information数据表中Sales字段的记录值总
数。这里,我们设定两个字段的别名分别为REGION和SALES,两个数据表的
别名分别为A1和A2。如果我们只使用字段别名而不设定数据表别名的话,上
述SQL命令的第一行就变成如下形式:
SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES
由此我们可以看出有效的使用数据表别名,可以极大的简化对多个数据表
进行操作的SQL命令。
上述查询命令的第3行为WHERE从句,正是该从句设定了两个数据表的
连接条件。因为我们希望确保Region数据表中的Store_Name字段能够与
Store_Information数据表中的同名字段相对应,所以我们规定两个字段的记录
值应当相等。在连接多个数据表时,一定要准确设定数据表的连接条件,如果
WHERE从句设定不正确,则可能导致查询结果中出现众多不相关的数据 .
SQL语句语法大全
我整理的一些比较常用的SQL语句语法 需要的朋友可以过来参考下
一 数据控制语句 (DML) 部分
INSERT (往数据表里插入记录的语句)
INSERT INTO 表名(字段名 字段名 ……) VALUES ( 值 值 ……);
INSERT INTO 表名(字段名 字段名 ……) SELECT 字段名 字段名 …… FROM 另外的表名;
字符串类型的字段值必须用单引号括起来 例如: GOOD DAY
如果字段值里包含单引号 需要进行字符串转换 我们把它替换成两个单引号
字符串类型的字段值超过定义的长度会出错 最好在插入前进行长度校验
日期字段的字段值可以用当前数据库的系统时间SYSDATE 精确到秒
或者用字符串转换成日期型函数TO_DATE(‘ YYYY MM DD )
TO_DATE()还有很多种日期格式 可以参看ORACLE DOC
年 月 日 小时:分钟:秒 的格式YYYY MM DD HH :MI:SS
INSERT时最大可操作的字符串长度小于等于 个单字节 如果要插入更长的字符串 请考虑字段用CLOB类型
方法借用ORACLE里自带的DBMS_LOB程序包
INSERT时如果要用到从 开始自动增长的序列号 应该先建立一个序列号
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY START WITH
MAXVALUE CYCLE NOCACHE;
其中最大的值按字段的长度来定 如果定义的自动增长的序列号 NUMBER( ) 最大值为
INSERT 语句插入这个字段值为: 序列号的名称 NEXTVAL
DELETE (删除数据表里记录的语句)
DELETE FROM表名 WHERE 条件;
注意 删除记录并不能释放ORACLE里被占用的数据块表空间 它只把那些被删除的数据块标成unused
如果确实要删除一个大表里的全部记录 可以用 TRUNCATE 命令 它可以释放占用的数据块表空间
TRUNCATE TABLE 表名;
此操作不可回退
UPDATE (修改数据表里记录的语句)
UPDATE表名 SET 字段名 =值 字段名 =值 …… WHERE 条件;
如果修改的值N没有赋值或定义时 将把原来的记录内容清为NULL 最好在修改前进行非空校验;
值N超过定义的长度会出错 最好在插入前进行长度校验
注意事项:
A 以上SQL语句对表都加上了行级锁
确认完成后 必须加上事物处理结束的命令 MIT 才能正式生效
否则改变不一定写入数据库里
如果想撤回这些操作 可以用命令 ROLLBACK 复原
B 在运行INSERT DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围
应该把它限定在较小 (一万条记录) 范围内 否则ORACLE处理这个事物用到很大的回退段
程序响应慢甚至失去响应 如果记录数上十万以上这些操作 可以把这些SQL语句分段分次完成
其间加上MIT 确认事物处理
二 数据定义 (DDL) 部分
CREATE (创建表 索引 视图 同义词 过程 函数 数据库链接等)
ORACLE常用的字段类型有
CHAR 固定长度的字符串
VARCHAR 可变长度的字符串
NUMBER(M N) 数字型M是位数总长度 N是小数的长度
DATE 日期类型
创建表时要把较小的不为空的字段放在前面 可能为空的字段放在后面
创建表时可以用中文的字段名 但最好还是用英文的字段名
创建表时可以给字段加上默认值 例如 DEFAULT SYSDATE
这样每次插入和修改时 不用程序操作这个字段都能得到动作的时间
创建表时可以给字段加上约束条件
例如 不允许重复 UNIQUE 关键字 PRIMARY KEY
ALTER (改变表 索引 视图等)
改变表的名称
ALTER TABLE 表名 TO 表名 ;
在表的后面增加一个字段
ALTER TABLE表名 ADD 字段名 字段名描述;
修改表里字段的定义描述
ALTER TABLE表名 MODIFY字段名 字段名描述;
给表里的字段加上约束条件
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);
把表放在或取出数据库的内存区
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;
DROP (删除表 索引 视图 同义词 过程 函数 数据库链接等)
删除表和它所有的约束条件
DROP TABLE 表名 CASCADE CONSTRAINTS;
TRUNCATE (清空表里的所有记录 保留表的结构)
TRUNCATE 表名;
三 查询语句 (SELECT) 部分
SELECT字段名 字段名 …… FROM 表名 [表名 ……] WHERE 条件;
字段名可以带入函数
例如: COUNT(*) MIN(字段名) MAX(字段名) AVG(字段名) DISTINCT(字段名)
TO_CHAR(DATE字段名 YYYY MM DD HH :MI:SS )
NVL(EXPR EXPR )函数
解释:
IF EXPR =NULL
RETURN EXPR
ELSE
RETURN EXPR
DECODE(AA﹐V ﹐R ﹐V ﹐R )函数
解释:
IF AA=V THEN RETURN R
IF AA=V THEN RETURN R
…
ELSE
RETURN NULL
LPAD(char n char )函数
解释:
字符char 按制定的位数n显示 不足的位数用char 字符串替换左边的空位
字段名之间可以进行算术运算
例如: (字段名 *字段名 )/
查询语句可以嵌套
例如: SELECT …… FROM
(SELECT …… FROM表名 [表名 ……] WHERE 条件) WHERE 条件 ;
两个查询语句的结果可以做集合操作
例如: 并集UNION(去掉重复记录) 并集UNION ALL(不去掉重复记录) 差集MINUS 交集INTERSECT
分组查询
SELECT字段名 字段名 …… FROM 表名 [表名 ……] GROUP BY字段名
[HAVING 条件] ;
两个以上表之间的连接查询
SELECT字段名 字段名 …… FROM 表名 [表名 ……] WHERE
表名 字段名 = 表名 字段名 [ AND ……] ;
SELECT字段名 字段名 …… FROM 表名 [表名 ……] WHERE
表名 字段名 = 表名 字段名(+) [ AND ……] ;
有(+)号的字段位置自动补空值
查询结果集的排序操作 默认的排序是升序ASC 降序是DESC
SELECT字段名 字段名 …… FROM 表名 [表名 ……]
ORDER BY字段名 字段名 DESC;
字符串模糊比较的方法
INSTR(字段名 ‘字符串 )
字段名 LIKE ‘字符串% [‘%字符串% ]
每个表都有一个隐含的字段ROWID 它标记着记录的唯一性
四 ORACLE里常用的数据对象 (SCHEMA)
索引 (INDEX)
CREATE INDEX 索引名ON 表名 ( 字段 [字段 ……] );
ALTER INDEX 索引名 REBUILD;
一个表的索引最好不要超过三个 (特殊的大表除外) 最好用单字段索引 结合SQL语句的分析执行情况
也可以建立多字段的组合索引和基于函数的索引
ORACLE 字符串可以索引的最大长度为 单字节
ORACLE 字符串可以索引的最大长度为 单字节
ORACLE DOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)* %
视图 (VIEW)
CREATE VIEW 视图名AS SELECT … FROM … ;
ALTER VIEW视图名 PILE;
视图仅是一个SQL查询语句 它可以把表之间复杂的关系简洁化
同义词 (SYNONMY)
CREATE SYNONYM同义词名FOR 表名;
CREATE SYNONYM同义词名FOR 表名@数据库链接名;
数据库链接 (DATABASE LINK)
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串 ;
数据库连接字符串可以用NET EASY CONFIG或者直接修改TNSNAMES ORA里定义
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样
数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
查询远端数据库里的表
SELECT …… FROM 表名@数据库链接名;
五 权限管理 (DCL) 语句
GRANT 赋于权限
常用的系统权限集合有以下三个:
CONNECT(基本的连接) RESOURCE(程序开发) DBA(数据库管理)
常用的数据对象权限有以下五个:
ALL ON 数据对象名 SELECT ON 数据对象名 UPDATE ON 数据对象名
DELETE ON 数据对象名 INSERT ON 数据对象名 ALTER ON 数据对象名
GRANT CONNECT RESOURCE TO 用户名;
GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT INSERT DELETE ON表名 TO 用户名 用户名 ;
REVOKE 回收权限
REVOKE CONNECT RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
lishixinzhi/Article/program/MySQL/201311/29570