sql 数据库语法总结

                数据库语法总结

------------------------------------------------- 创建的数据库 ---------------------------------------

------- 设置当前数据库为 master ,以便访问 sysdatabases

USE master 

------ 批处理( SQLServer 规定:如果是建库 , 建表,存储过程和视图等必须在语句末尾添加批处理标志 ”GO”

GO

----- 判断是否存在要创建的数据库

IF  EXISTS SELECT * FROM  sysdatabases WHERE  name =' 数据库名 '

------ 存在则删除(再创建)

drop database  数据库名

------- 创建数据库

CREATE  DATABASE   数据库名

ON [PRIMARY]

  (

  数据文件参数 [ …n]  [ 文件组参数 ]

  )

  [LOG ON]

  (

  日志文件参数 [ …n]

  )

文件参数 包括: NAME=' stuDB_data ',  ------ 数据文件的逻辑名

              FILENAME='D:/project/stuDB_data.mdf',  ----- 数据文件的物理名

SIZE=5mb,  ------ 数据文件初始大小

  MAXSIZE=100mb,  ------ 数据文件增长的最大值

FILEGROWTH=15%   ------ 数据文件的增长率

 

--------------------------------------------------- 创建的表 -----------------------------------------------

------- 设置当前数据库为创建的数据库,以便访问 sysobjects

USE 创建的数据库名

------ 批处理

GO

----- 判断是否存在要创建的表

IF  EXISTS SELECT * FROM  sysobjects WHERE  name =' 表名 '

------ 存在则删除(再创建)

drop table 表名

---------- 创建一个数据表

CREATE TABLE 表名

(

       列名 1   类型 1 identity (1,1) 约束 ,    ---- 设置为标识列

       列名 2   类型 2 约束 ,

       列名 n   类型 n 约束

)

 

------- 创建表时直接创建各种约束

CREATE TABLE 表名

(

       列名 1   类型 1 primary key( 列名 1, 列名 2, ……列名 n),--- 主键约束

       列名 2   类型 2 unique,--- 唯一约束

       列名 3   类型 3 identity( 初始值 , 增量 ),--- 标识列约束

       列名 4   类型 4 default 默认值 [ 注意 : 字符和日期要用单引号 ]--- 默认值约束

       列名 5   类型 5 check( 列名及常量及运算符组成的表达式 )--- 检查约束

…………………

       列名 n   类型 n,foreign key( 列名 1, 列名 2, ……列名 n) references 主键所在表名 ( 列名 a1, 列名 a2, ……列名 n)

)

 

----------------------------------------- 删除数据库 -----------------------------------------

drop database 数据库名 1 ,数据库名 2 ,……数据库 n

 

----------------------------------------- 删除数据表 -----------------------------------------

drop table 表名 1, 表名 2, ……表名 n

 

---------------------------------- 维护数据表的结构 ---------------------------------------

------- 修改列

alter table 表名 alter column 列名 新类型 ( 长度 )

 

------- 添加列

alter table 表名 add 列名 类型 ( 长度 )

 

------- 删除列

alter table 表名 drop column 列名

 

------- 添加主键约束

alter table 表名 add constraint 主键约束名 primary key ( 列名 1, 列名 2, ……列名 n)

 

------- 删除主键约束

alter table 表名 drop constraint 主键约束名

 

------- 添加唯一约束

alter table 表名 add constraint 唯一约束名 unique ( 列名 )

 

------- 删除唯一约束

alter table 表名 drop constraint 唯一约束名

 

------- 添加默认约束

alter table 表名 add constraint 默认约束名 default 默认值 for 列名

 

------- 删除默认约束

alter table 表名 drop constraint 默认约束名

 

------- 添加检查约束

alter table 表名 add constraint 检查约束名 check ( 列名及常量及运算符组成的表达式 )

 

------- 删除检查约束

alter table 表名 drop constraint 检查约束名

 

------- 添加外键约束

alter table 表名 add constraint 外键约束名 foreign key ( 列名 1, 列名 2, ……列名 n) references

主键所在的表名 ( 列名 A1, 列名 A2, ……列名 An)

 

------- 删除外键约束

alter table 表名 drop constraint 外键约束名

 

--------------------------------------- 维护表的数据 -------------------------------------

------------------------------ 插入数据 -----------------------------

----------------- 插入单行数据 ----------------

-------- 整行插入(表名后未跟列名要将所有的列值全部列出)

insert [into] 表名 values( 列值 1, 列值 2, ……列值 n)

 

-------- 插入某几列(不能为空无默认值非表识列的列必须全部列出)

Insert  [into] 表名   ( 列名 1, 列名 2, ……列名 n)  values (列值 1, 列值 2, ……列值 n

 

------------------ 插入多行数据 -----------------+

---------- 直接插入多行

Insert  into 表名 ( 列名 1, 列名 2, ……列名 n)

Select   列值 1, 列值 2, ……列值   union

Select  列值 1, 列值 2, ……列值   union

……

 

---------- 新表已存在

insert [into] 表名 1( 列名 1, 列名 2, ……列名 n) select ( 列名 a1, 列名 a2, ……列名 an) from 源表名

 

---------- 建表和插入数据一起完成

Select 列名 1, 列名 2, ……列名 n    into 表名 from 源表名

 

----------SELECT INTO 插入多行数据的同时插入新的标识

Select   列名 1, 列名 2, ……列名 n, Identity ( 数据类型 , 标识种子 , 标识增长量 ) as 列名 into 新表 from 原始表

 

-------------------------------- 查询数据 ----------------------------

------- 显示所有记录的所有列

select * from 表名

 

------- 显示所有记录的某些列

select 列名 1, 列名 2, ……列名 n from 表名

-------- 显示满足条件的所有记录的所有列

select * from 表名 where 条件表达式  

 

-------- 显示满足条件的所有记录的某些列

select 列名 1, 列名 2, ……列名 n from 表名 where 条件表达式

 

---------------- 内联接查询 ---------------

-------- 内联接的等值联接

select 别名 1. 列名 1, ……别名 1. 列名 n, 别名 2. 列名 1, ……别名 2. 列名 n from 表名 1 as 别名 1 inner join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

-------- 内联接的不等值联接

select 别名 1. 列名 1, ……别名 1. 列名 n, 别名 2. 列名 1, ……别名 2. 列名 n from 表名 1 as 别名 1 inner join 表名 2 as 别名 2 on 别名 1. 列名 > 别名 2. 列名 where 条件表达式

 

--------------- 外联接查询 ---------------

-------- 外联接的左外联接

select 别名 1. 列名 1, ……别名 1. 列名 n, 别名 2. 列名 1, ……别名 2. 列名 n from 表名 1 as 别名 1 left outer join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

-------- 外联接的右外联接

select 别名 1. 列名 1, ……别名 1. 列名 n, 别名 2. 列名 1, ……别名 2. 列名 n from 表名 1 as 别名 1 right outer join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

-------- 外联接的完全外联接

select 别名 1. 列名 1, ……别名 1. 列名 n, 别名 2. 列名 1, ……别名 2. 列名 n from 表名 1 as 别名 1 full outer join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

-------- 按某列排序 [ ASC 为升序, DESC 为降序。对于联接查询的排序只需将上述语法后加上 order by 子句即可 ]

select 列名 1, 列名 2, ……列名 n from 表名 where 条件表达式 order by 列名

 

------- 使用特殊符号显示满足条件的所有记录的某些列

select 列名 1+' 符号常量 '+ 列名 2+' 符号常量 '+ ……列名 n from 表名 where 条件表达式

 

------- 使用 as 子句显示满足条件的所有记录的某些列

select 列名 1 as 新列名 1, 列名 2 as 新列名 2, ……列名 n as 新列名 n from 表名 where 条件表达式  

 

------- 使用 Identity 从一个旧表创建一个新表 , 且只有一个标识列

select identity ( 类型 , 初值 , 增量 ) as 新列名 into 新创建的表名 from 已有的表名

 

------- 使用 identity 从一个旧表创建一个新表 , 且只有一个标识列 [ 当新表中只有一个标识列时可不用 as]

select identity ( 类型 , 初值 , 增量 ) as 新列名 into 新创建的表名 from 已有的表名

 

------- 使用 identity 从一个旧表创建一个新表 , 且只有一个标识列

select 新列名 = identity ( 类型 , 初值 , 增量 )  into 新创建的表名 from 已有的表名

 

------- 使用 identity 从一个旧表创建一个新表 , 且有一个标识列和其它列 [ 当新表中有很多列时必用 as]

select identity( 类型 , 初值 , 增量 ) as 新列名 1, 旧表的列名 1 as 新表的列名 2, …… 旧表的列名 n as 新表的列名 n into 新创建的表名 from 已有的表名

 

-------- 显示前 n 行记录

select top n * from 表名 where 条件表达式

 

------ 显示前 n% 行记录

select top n percent * from 表名 where 条件表达式

 

------- 使用聚合函数分组查询 [ 注意 sum avg 只用于数字型的列, count 用于数字型和字符型的列, max min 用于数字、字符和日期型的列, sum avg count 支持 distinct]

select 列名 1, 列名 2, ……列名 n from 表名 group by 列名 1, 列名 2, ……列名 n

select 列名 , 聚合函数 [sum( 列名 ) avg( 列名 ) count( 列名 ) max( 列名 ) min( 列名 )] from 表名 group by 列名

 

------- 使用 having 子句查询 [ 注意 where group having 的顺序不能颠倒 ]

select 列名 1, 列名 2, ……列名 n from 表名 group by 列名 1, 列名 2, ……列名 n having 条件表达式

 

-------- 使用通配符进行模糊查询

select * from 表名 where 通配符条件表达式

                   --- 列名 like '_A%'

                   --- 列名 not like '_A%'

                   --- 列名 in ( 1 ,值 2 ,……值 n)

                   --- 列名 not in ( 1 ,值 2 ,……值 n)

                   --- 列名 between 1 and 2

                   --- 列名 not between 1 and 2

                   --- 列名 is null

                   --- 列名 is not null

 

----------------------------- 更新数据 ----------------------------

-------- 更新满足条件的记录的某些列值

update 表名 set 列名 1= 1, 列名 2= 2, ……列名 n= n where 条件表达式

 

------- 内联接的等值联接更新

update 表名 set 列名 1= 1, 列名 2= 2, ……列名 n= n from 表名 1 as 别名 1 inner join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

-------- 内联接的不等值联接更新

update 表名 set 列名 1= 1, 列名 2= 2, ……列名 n= n from 表名 1 as 别名 1 inner join 表名 2 as 别名 2 on 别名 1. 列名 > 别名 2. 列名 where 条件表达式

 

-------- 外联接的左外联接更新

update 表名 set 列名 1= 1, 列名 2= 2, ……列名 n= n from 表名 1 as 别名 1 left outer join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

------- 外联接的右外联接更新

update 表名 set 列名 1= 1, 列名 2= 2, ……列名 n= n from 表名 1 as 别名 1 right outer join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

-------- 外联接的完全外联接更新

update 表名 set 列名 1= 1, 列名 2= 2, ……列名 n= n from 表名 1 as 别名 1 full outer join 表名 2 as 别名 2 on 别名 1. 列名 = 别名 2. 列名 where 条件表达式

 

------------------------------ 删除数据 -----------------------------

------- 删除满足条件的记录

delete from 表名 where 条件表达式

 

----- 删除所有的记录 , 只保留表的结构 .

truncate table 表名

 

---------------------------------------------- 添加 SQL 登录帐户 ------------------------------------------

------------------ 添加登录帐户 -----------------

------- - 添加 Windows 登录帐户

EXEC sp_grantlogin    jbtraining/S26301        

-------- 添加 SQL 登录帐户 [ 帐户: zhangsan 密码: 1234]

EXEC  sp_addlogin   'zhangsan', '1234' 

----------------- 添加数据库用户 ------------------     

-------- master 数据库中添加两个用户

USE master

GO

EXEC sp_grantdbaccess   'jbtraining/S26301', 'S26301DBUser' 

EXEC sp_grantdbaccess  'zhangsan', 'zhangsanDBUser'

----------------- 分配对表的权限 ----------------

-------- S26301DBUser 分配建表的权限

GRANT  create  table  TO  S26301DBUser

-------- zhangsanDBUser 分配对表 stuInfo select, insert, update 权限

GRANT select, insert, update  ON  stuInfo  TO  zhangsanDBUser

 

-------------------------------------------- 数据库中的变量 -----------------------------------------------

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

----------- 局部变量的声明(局部变量必须以标记 @ 作为前缀 ,如 @age

DECLARE   @ 变量名   数据类型

----------- 局部变量的赋值(局部变量的使用必须先声明,再赋值

SET @ 变量名 =           SELECT  @ 变量名 =

 

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

----------- 全局变量的使用(全局变量不需定义,由系统维护;且不能赋值,只能读取它的值,以 @@ 作前缀)

变量

含义

@@ERROR

最后一个 T-SQL 错误的错误号

@@ IDENTITY

最后一次插入的标识值

@@LANGUAGE

当前使用的语言的名称

@@MAX_CONNECTIONS

可以创建的同时连接的最大数目

@@ROWCOUNT 

受上一个 SQL 语句影响的行数

@@SERVERNAME

本地服务器的名称

@@TRANSCOUNT     

当前连接打开的事务数

@@VERSION      

SQL Server 的版本信息

 

---------------------------------------------------- 逻辑控制语句 --------------------------------------------------

--------- SQL 中的 IF-ELSE 语句 ELSE 是可选部分,如果有多条语句,才需要 BEGIN-END 语句块

IF (条件)

BEGIN

语句 1

语句 2

……

END

ELSE

BEGIN

语句 1

语句 2

……

END

 

---------- SQL 中的 WHILE 循环语句( BREAK 表示退出循环,如果有多条语句,才需要 BEGIN-END 语句块

WHILE (条件)

BEGIN

语句 1

语句 2

……

BREAK

END

----------SQL 中的 CASE END 多分支语句

CASE

WHEN 条件 1 THEN  结果 1

WHEN 条件 2 THEN  结果 2

……

ELSE 其他结果

END

 

---------------------------------------------------- 创建事务 --------------------------------------------------------

开始事务: BEGIN TRANSACTION

提交事务: COMMIT TRANSACTION

回滚(撤销)事务: ROLLBACK TRANSACTION

-------- 示例说明创建事务

BEGIN TRANSACTION

DECLARE @errorSum INT     ------ 定义变量,用于累计事务执行过程中的错误

SET @errorSum=0             ------- 初始化为 0 ,即无错误

UPDATE bank SET currentMoney=currentMoney-1000   ------ 转账:张三的账户少 1000 元,李四的账户多 1000

   WHERE customerName=' 张三 '

SET @errorSum=@errorSum+@@error

UPDATE bank SET currentMoney=currentMoney+1000

   WHERE customerName=' 李四 '

SET @errorSum=@errorSum+@@error  ------ 累计是否有错误

IF @errorSum<>0  ------ 如果有错误

  BEGIN

    print ' 交易失败,回滚事务 '

    ROLLBACK TRANSACTION

  END 

ELSE

  BEGIN

    print ' 交易成功,提交事务,写入硬盘,永久的保存 '

    COMMIT TRANSACTION  

  END

GO

 

----------------------------------------------------- 创建索引 -------------------------------------------------------

-------- 判断要创建的索引是否存在

USE stuDB

GO

IF EXISTS (SELECT name FROM sysindexes WHERE name = ' 索引名(如: IX_writtenExam ')

DROP INDEX 表名 . 索引名  

------- - 创建索引

CREATE [UNIQUE (唯一索引) ] [CLUSTERED||NONCLUSTERED (聚集索引或非聚集索引) ]   

    INDEX    索引名

     ON 表名 ( 列名 )

    WITH   FILLFACTOR =x x 填充因子(系数) : 指定一个 0 100 之间的值,表示索引页填充的百分比)

------- 指定按索引查询

SELECT * FROM   表名 with  ( INDEX = 索引名( IX_writtenExam )

WHERE 列名( writtenExam BETWEEN 60 AND 90

 

----------------------------------------------------- 创建视图 ------------------------------------------------------

-------- 判断要创建的视图是否存在

IF EXISTS (SELECT * FROM sysobjects WHERE  name = ' 视图名(如: view_stuInfo_stuMarks ')

     DROP VIEW 视图名

GO

-------- 创建视图

CREATE VIEW 视图名

  AS

   查询语句(如: SELECT 姓名 =stuName, 学号 =stuInfo.stuNo,

                     笔试成绩 =writtenExam,  机试成绩 =labExam,

                     平均分 =(writtenExam+labExam)/2

                         FROM stuInfo LEFT JOIN stuMarks

                        ON stuInfo.stuNo=stuMarks.stuNo

GO

--------- 查询试图

SELECT * FROM 视图名

 

--------------------------------------------------------- 系统存储过程 ----------------------------------------------------

--------- 常用的系统存储过程

系统存储过程

说明

sp_databases

列出服务器上的所有数据库。

sp_helpdb

报告有关指定数据库或所有数据库的信息

sp_renamedb

更改数据库的名称

sp_tables

返回当前环境下可查询的对象的列表

sp_columns

回某个表列的信息

sp_help

查看某个表的所有信息

sp_helpconstraint

查看某个表的约束

sp_helpindex

查看某个表的索引

sp_stored_procedures

列出当前环境中的所有存储过程。

sp_password

添加或修改登录帐户的密码。

sp_helptext

显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。

---------- 常用的扩展存储过程 xp_cmdshell

1, 可以执行 DOS 命令下的一些的操作

2, 以文本行方式返回任何输出

xp_cmdshell 调用语法:

EXEC xp_cmdshell DOS 命令 [NO_OUTPUT]

例如 :EXEC xp_cmdshell 'mkdir d:/bank', NO_OUTPUT ( d 盘创建了一个名为 bank 的文件夹 )

 

---------- 创建存储过程

CREATE  PROC[EDURE]   存储过程名

@ 参数 数据类型 = 默认值 OUTPUT,

              …… ,

@ 参数 数据类型 = 默认值 OUTPUT

             AS

            SQL 语句

GO

 

----------- 处理存储过程中的错误

RAISERROR (msg_id | msg_str , severity state WITH option[,...n]])

注意 :  msg_id( sysmessages 系统表中指定用户定义错误信息 )

msg_str( 用户定义的特定信息,最长 255 个字符 )

severity( 定义严重性级别。用户可使用的级别为 0–18 )

state( 表示错误的状态, 1 127 之间的值 )

option( 指示是否将错误记录到服务器错误日志中

 

---------- 调用存储过程

EXEC[UTE]  过程名   [ 参数 ]

---------------------------------------------------SQL Server 中的函数 ---------------------------------------------------

----------- 字符串函数

函数名

描述

举例

CHARINDEX

 

用来寻找一个指定的字符串在另一个字符串中的起始位置

 

SELECT CHARINDEX('ACCP','My Accp Course',1 )

返回: 4

LEN

 

返回传递给它的字符串长度

 

SELECT LEN('SQL Server 课程 ')

返回: 12

LOWER

 

把传递给它的字符串转换为小写

 

SELECT LOWER('SQL Server 课程 ')

返回: sql server 课程

UPPER

 

把传递给它的字符串转换为大写

 

SELECT UPPER ('sql server 课程 ')

返回: SQL SERVER 课程

LTRIM

 

清除字符左边的空格

 

SELECT LTRIM ('  周智宇   ')

返回:周智宇   (后面的空格保留)

RTRIM

 

清除字符右边的空格

 

SELECT RTRIM ('  周智宇   ')

返回:   周智宇(前面的空格保留)

RIGHT

 

从字符串右边返回指定数目的字符 ( 最后几个字符 )

SELECT RIGHT(' 买卖提 . 吐尔松 ',3)

返回:吐尔松

REPLACE

 

替换一个字符串中的字符

 

SELECT REPLACE(' 莫乐可切 . 杨可 ',' ',' ')

返回:莫乐兰切 . 杨兰

STUFF

 

在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串 ( 填充 )

SELECT STUFF('ABCDEFG', 2, 3, ' 我的音乐我的世界 ')

返回: A 我的音乐我的世界 EFG

 

---------- 日期函数

函数名

描述

举例

GETDATE

取得当前的系统日期

SELECT GETDATE()

返回:今天的日期

DATEADD

将指定的数值添加到指定的日期部分后的日期

SELECT DATEADD(mm,4, 01/01/99 )

返回:以当前的日期格式返回 05/01/99

DATEDIFF

两个日期之间的指定日期部分的区别

SELECT DATEDIFF(mm,’01/01/99’,’05/01/99’)

返回: 4

DATENAME

日期中指定日期部分的字符串形式

SELECT DATENAME(dw, 01/01/2000 )

返回: Saturday

DATEPART

日期中指定日期部分的整数形式

SELECT DATEPART(day, 01/15/2000 )

返回: 15

 

------------ 数学函数

函数名

描述

举例

ABS

取数值表达式的绝对值

SELECT ABS(-43)

返回: 43

CEILING

返回大于或等于所给数字表达式的最小整数

SELECT CEILING(43.5)

返回: 44

FLOOR

取小于或等于指定表达式的最大整数

SELECT FLOOR(43.5)

返回: 43

POWER

取数值表达式的幂值

SELECT POWER(5,2)

返回: 25

ROUND

将数值表达式四舍五入为指定精度

SELECT ROUND(43.543,1)

返回: 43.5

Sign

对于正数返回 +1 ,对于负数返回 -1 ,对于 0 则返回 0

SELECT SIGN(-43)

返回: -1

Sqrt

取浮点表达式的平方根

SELECT SQRT(9)

返回: 3

 

----------- 系统函数

函数名

描述

举例

CONVERT

用来转变数据类型

SELECT CONVERT (VARCHAR (5) 12345)

返回 :字符串 12345

CURRENT_USER

返回当前用户的名字

SELECT CURRENT_USER

返回 你登录的用户名

DATALENGTH

返回用于指定表达式的字节数

SELECT DATALENGTH (' 中国 A ')

返回: 7

HOST_NAME

返回当前用户所登录的计算机名字

SELECT HOST_NAME()

返回:你所登录的计算机的名字

SYSTEM_USER

返回当前所登录的用户名称

SELECT SYSTEM_USER

返回:你当前所登录的用户名

USER_NAME

从给定的用户 I D 返回用户名

SELECT USER_NAME(1)

返回:从任意数据库中返回 “dbo”

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值