SQL SERVER 2008 常用命令
- 格式:doc
- 大小:137.50 KB
- 文档页数:10
SQLServer2008系统信息查询常⽤命令 查看表⼤⼩、记录数等1、返回所有数据库信息(数据库名,创建⽇期,存储路径等)。
1use master;2GO3select*from dbo.sysdatabases2、返回当前数据库所有对象(可根据type字段过滤出⽤户表,索引等)。
1USE AdventureWorks2008R2;2GO3SELECT*FROM SYS.objects WHERE TYPE='U'3、查询指定库中所有表信息(记录数,使⽤空间等)。
1USE AdventureWorks2008R2;2GO3exec sp_MSForEachTable4@precommand=N'create table ##(5表名 sysname,6记录数 int,7保留空间 Nvarchar(10),8使⽤空间 varchar(10),9索引使⽤空间 varchar(10),10未⽤空间 varchar(10))',11@command1=N'insert ## exec sp_spaceused ''?''',12@postcommand=N'select * from ## order by 记录数 '1314DROP TABLE ##结果如下:表名记录数保留空间使⽤空间索引使⽤空间未⽤空间---------- ----------- ---------- ---------- ------------ ----------discounts 316 KB 8 KB 8 KB 0 KBstores 624 KB 8 KB 16 KB 0 KB4、返回指定库所有表的记录数(使⽤系统函数sp_MSforeachtable(Table))。
1USE AdventureWorks2008R2;2go3CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT)4EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?'5SELECT TableName, RowCnt FROM #temp ORDER BY RowCnt67DROP TABLE #temp;全部在SQL Server 2008 R2环境下测试通过。
SQL8.0(可能是您想指的是SQL Server 2008)的语法与之前的版本有很多相似之处,但也有一些新特性和改进。
以下是一些SQL Server 2008中的重要语法:数据定义语言 (DDL)CREATE TABLE: 用于创建新表。
ALTER TABLE: 用于修改现有表的结构。
DROP TABLE: 用于删除表。
DROP DATABASE: 用于删除数据库。
TRUNCATE TABLE: 用于删除表中的所有行,但不删除表本身。
数据操作语言 (DML)INSERT INTO: 用于插入新行。
UPDATE: 用于修改现有行。
DELETE: 用于删除行。
查询语言 (QL)SELECT: 用于从数据库表中检索数据。
触发器SQL Server 2008 支持触发器,它是一种特殊类型的存储过程,当指定的事件 (如 INSERT、UPDATE 或 DELETE)在相关的表上发生时自动执行。
其他语法SQL Server 2008引入了一些新的数据类型,如 datetime2 和 hierarchyid。
它还引入了 TRY...CATCH 异常处理块,使错误处理更加灵活和强大。
视图创建和使用视图仍然是一个重要的部分,尤其是在构建更复杂的应用程序时。
存储过程和函数存储过程和函数是预编译的 SQL 代码,可以包含多个 SQL 语句。
这些是用于封装常用逻辑并允许在单个命令中执行多个操作的强大工具。
事务处理SQL Server 2008 支持事务处理,允许你执行一系列的操作作为一个单一的工作单元,要么全部成功,要么全部失败。
这有助于维护数据的完整性和一致性。
索引优化和查询性能SQL Server 2008 提供了一些新工具和策略,可以帮助优化查询性能,包括对索引的更精细控制和查询执行计划的改进。
安全性和权限SQL Server 2008 提供了更强大的安全性和权限管理功能,包括对透明数据加密的支持和更精细的访问控制列表管理。
sql server 2008基本操作以下是SQL Server 2008的一些基本操作:1. 创建数据库:使用CREATE DATABASE语句创建新的数据库。
例如,CREATE DATABASE mydatabase;2. 创建表:使用CREATE TABLE语句创建新的表。
例如,CREATE TABLE employees (id INT, name VARCHAR(50), age INT);3. 插入数据:使用INSERT INTO语句将数据插入表中。
例如,INSERT INTO employees (id, name, age) VALUES (1, 'John', 30);4. 更新数据:使用UPDATE语句更新表中的数据。
例如,UPDATE employees SET age = 35 WHERE id = 1;5. 删除数据:使用DELETE FROM语句删除表中的数据。
例如,DELETE FROM employees WHERE id = 1;6. 查询数据:使用SELECT语句从表中检索数据。
例如,SELECT * FROM employees;7. 创建索引:使用CREATE INDEX语句创建索引以提高检索性能。
例如,CREATE INDEX idx_name ON employees (name);8. 删除索引:使用DROP INDEX语句删除索引。
例如,DROP INDEX idx_name ON employees;9. 创建视图:使用CREATE VIEW语句创建视图。
例如,CREATE VIEW view_name AS SELECT * FROM employees;10. 删除视图:使用DROP VIEW语句删除视图。
例如,DROP VIEW view_name;以上只是SQL Server 2008的基本操作之一,实际使用中可能还涉及到更多的功能和操作。
sqlserver2008查询语句SQL Server 2008是一种关系型数据库管理系统,它支持使用SQL 语言进行数据查询和操作。
在本文中,我们将列举一些常用的SQL Server 2008查询语句,以帮助读者更好地了解和使用这个数据库管理系统。
1. 查询表中的所有数据SELECT * FROM table_name;这个查询语句可以用来查询指定表中的所有数据。
其中,table_name是要查询的表的名称。
2. 查询表中的部分数据SELECT column1, column2, ... FROM table_name WHERE condition;这个查询语句可以用来查询指定表中符合条件的部分数据。
其中,column1, column2, ...是要查询的列的名称,condition是查询条件。
3. 查询表中的唯一数据SELECT DISTINCT column1, column2, ... FROM table_name;这个查询语句可以用来查询指定表中唯一的数据。
其中,column1, column2, ...是要查询的列的名称。
4. 对查询结果进行排序SELECT column1, column2, ... FROM table_name ORDER BY column_name ASC|DESC;这个查询语句可以用来对查询结果进行排序。
其中,column1, column2, ...是要查询的列的名称,column_name是要排序的列的名称,ASC表示升序排列,DESC表示降序排列。
5. 对查询结果进行分组SELECT column1, column2, ... FROM table_name GROUP BY column_name;这个查询语句可以用来对查询结果进行分组。
其中,column1, column2, ...是要查询的列的名称,column_name是要分组的列的名称。
SQLServer2008语句⼤全完整版--========================--设置内存选项--========================--设置 min server memory 配置项EXEC sp_configure N'min server memory (MB)',0--设置 max server memory 配置项EXEC sp_configure N'max server memory (MB)',256--使更新⽣效RECONFIGURE WITH OVERRIDE--====================================================================================使⽤⽂件及⽂件组.sql========================/*--功能说明下⾯的代码是在SQL Server 2000上创建名为 MyDB 的数据库该数据库包括1个主要数据⽂件、3个⽤户定义的⽂件组和1个⽇志⽂件ALTER DATABASE语句将⽤户定义⽂件组指定为默认⽂件组。
之后,通过指默认的⽂件组来创建表,并且将图像数据和索引放到指定的⽂件组中。
最后,将⽂件组中的指定数据⽂件删除 --*/--切换到 master 数据库USE masterGO--A. 创建数据库 MyDBCREATE DATABASE MyDBON PRIMARY--主⽂件组和主要数据⽂件( NAME='MyDB_Primary',FILENAME='c:\MyDB_Prm.mdf'),FILEGROUP MyDB_FG1 --⽤户定义⽂件组1(NAME='MyDB_FG1_Dat1',FILENAME='c:\MyDB_FG1_1.ndf'),--次要数据⽂件1(NAME='MyDB_FG1_Dat2',FILENAME='d:\MyDB_FG1_2.ndf'),--次要数据⽂件2FILEGROUP MyDB_FG2--⽤户定义⽂件组2(NAME='MyDB_FG1_Dat',FILENAME='e:\MyDB_FG2.ndf'),--次要数据⽂件LOG ON --⽇志⽂件(NAME='MyDB_log',FILENAME='d:\MyDB.ldf')--DUMP TRANSACTION MyDB WITH NO_LOG and truncate_onlyGO--B. 修改默认数据⽂件组ALTER DATABASE MyDBMODIFY FILEGROUP MyDB_FG1 DEFAULTGO---切换到新建的数据库 MyDBUSE MyDB--C. 在默认⽂件组MyDB_FG1创建表,并且指定图像数据保存在⽤户定义⽂件组MMyDB_FG2CREATE TABLE MyTable(cola int PRIMARY KEY ,colb char(8) ,colc image)TEXT IMAGE_ON MyDB_FG2--在⽤户定义⽂件组MyDB_FG2上创建索引CREATE INDEX IX_MyTableON MyTable(cola)ON MyDB_FG2GO-- 并且清空数据⽂件MyDB_FG1_Dat1DBCC SHRINKFILE(MyDB_FG1_Dat1,EMPTYFILE)--删除数据⽂件MyDB_FG1_Dat1ALTER DATABASE MyDB REMOVE FILE MyDB_FG1_Dat1--========================================================================== --===============================调整数据库的⽂件属性.sql--===============================--A. 将tempdb数据库的主数据⽂件⼤⼩设置为10MB。
1新建数据库create database hhc;2新建数据库里的一张表use hhc;create table hy(name varchar(10),age varchar(10));3查看数据库表结构,不需要制定数据库sp_help hy4修改表的数据类型use hhc;alter table lxalter column name varchar(40);5更改表中的字段的数目向表中添加字段use hhc;alter table hyadd score varchar(20);删除表中的字段use hhc;alter table hydrop column score;6给表中的字段改名sp_rename'','username';7给数据表改名sp_rename hy,hanyan;8删除数据表use hhc;drop table hanyan;9查看数据库表的信息select*from lx10向表中插入数据默认给所有的列添加数据insert into lxvalues('还魂草','18');给特定的列添加数据use hhc;insert into lx(name)values('huanhuncao');一次添加多条数据use hhc;insert into lx(name,age)values('lx','21'),('李行','22');11复制一个表的数据到另外一个表use hhc;insert into hy(name1,age1)select name,agefrom lx;12修改表中的数据,把年龄为21的这一行的姓名改了,不加条件就是这一列的所有数据全部修改use hhc;update lxset name='lixing'where age='21';修改前n条数据use hhc;update top(2)hyset name1='修改的'13从表中删除数据,不加条件就是全部删除use hhc;delete from lxwhere age='21'删除前n条数据use hhc;delete top(2)hy14右键数据库新建表,在新建表里定义表的数据类型和类型名,定义完了后,点击菜单栏下的保存按钮,保存,输入表名。
SqlServer2008快捷键书签:清除所有书签。
CTRL-SHIFT-F2书签:插⼊或删除书签(切换)。
CTRL+F2书签:移动到下⼀个书签。
F2 功能键书签:移动到上⼀个书签。
SHIFT+F2取消查询。
ALT+BREAK连接:连接。
CTRL+O连接:断开连接。
CTRL+F4连接:断开连接并关闭⼦窗⼝。
CTRL+F4数据库对象信息。
ALT+F1编辑:清除活动的编辑器窗格。
CTRL+SHIFT+DEL编辑:注释代码。
CTRL+SHIFT+C编辑:复制。
还可以使⽤ CTRL+INSERT。
CTRL+C编辑:剪切。
还可以使⽤ SHIFT+DEL。
CTRL+X编辑:减⼩缩进。
SHIFT+TAB编辑:在编辑器窗格中删除⾄⾏尾。
CTRL+DEL编辑:查找。
CTRL+F编辑:转到⾏号。
CTRL+G编辑:增⼤缩进。
TAB编辑:使选定内容为⼩写。
CTRL+SHIFT+L编辑:使选定内容为⼤写。
CTRL+SHIFT+U编辑:粘贴。
还可以使⽤ SHIFT+INSERT。
CTRL+V编辑:删除注释。
CTRL+SHIFT+R编辑:重复上次搜索或查找下⼀个。
F3 功能键编辑:替换。
CTRL+H编辑:全选。
CTRL+A编辑:撤消。
CTRL+Z执⾏查询。
还可以使⽤ CTRL+E (针对向后兼容性)。
F5 功能键SQL 查询分析器帮助。
F1 功能键对所选 Transact-SQL 语句的帮助。
SHIFT+F1浏览:在查询窗格和结果窗格之间切换。
F6 功能键浏览:切换窗格。
Shift+F6浏览:窗⼝选择器。
CTRL+W"新建查询"窗⼝。
CTRL+N对象浏览器(显⽰/隐藏)。
F8 功能键对象搜索。
F4 功能键分析查询并检查语法。
CTRL+F5打印。
CTRL+P结果:以表格格式显⽰结果。
CTRL+D结果:以⽂本格式显⽰结果。
CTRL+T结果:移动拆分器。
SQLserver2008R2操作数据库表命令1.修改数据表字段长度语句:ALTER TABLE tableName(表名) ALTER COLUMN columnName(字段名) VARCHAR(n(长度))2.DROP,TRUNCATE和DELETE的区别。
使⽤这3个命令时⼀定要谨慎,都是删除表数据的命令。
按删除实⼒分:第⼀、DROP;第⼆、TRUNCATE;第三、DELETE⽆条件时都是删除表中的全部数据‘。
TRUNCATE⽐DELECTE速度快,占⽤系统资源少。
以下是详细区分:DROP:命令DROP TABLE tableName(表名)------删除内容和定义,释放空间。
即删除整个表,包括表结构,数据,定义。
⽆法回滚,恢复,要恢复只能重新新建⼀个表。
⾮常暴⼒。
TRUNCATE:命令 TRUNCATE TABLE tableName(表名)------删除内容,释放空间但不删除定义结构,只清空表数据。
保留表结构(字段),属性。
所谓释放空间就是删除表的ID标识列,在插⼊数据时,标识列(ID)重新从1开始,DELETE是做不到的。
a.TRUNCATE不能删除⾏数据,要删就清空整张表。
b.删除数据速度来说,TRUNCATE三者中最快,属于DDL语⾔,将被隐式提交时若有ROLLBACK(回滚)命令, TRUNCATE不会被撤销(回滚),但DELETE可以。
c.重新设置⾼⽔平线和所有的索引。
在对整张表和索引进⾏完全浏览时,经过TRUNCATE操作后的表⽐DELETE操作后的表要快很多。
d.TRUNCATE不能清空⽗表,不能触发任何DELETE触发器,当表被清空后表与表的索引将重新设置成初始⼤⼩,⽽DELETE则不能。
DELETE:命令DELETE TABLE tableName(表名)------也可以删除整个表数据,但是⾮常慢,系统是⼀⾏⼀⾏删除,效率低。
后⾯可以跟条件,如:DELETE TABLE tableName(表名) WHERE (条件) 。
SQL2008知识点总结一、数据库的基本操作1. 创建数据库在SQL Server 2008中,可以使用CREATE DATABASE语句来创建一个新的数据库。
这个语句的基本格式如下所示:```sqlCREATE DATABASE database_name;```其中,database_name是要创建的数据库的名称。
2. 删除数据库如果要删除一个数据库,可以使用DROP DATABASE语句,其基本格式如下所示:```sqlDROP DATABASE database_name;```需要注意的是,删除一个数据库将会永久删除所有与该数据库相关联的数据和对象,所以在执行这个语句之前,一定要慎重考虑。
3. 备份和恢复数据库在SQL Server 2008中,可以使用备份和恢复功能来保护数据库的数据。
在执行备份操作时,可以使用BACKUP DATABASE语句,其基本格式如下所示:```sqlBACKUP DATABASE database_name TO disk=’backup_file_path’;```而在执行恢复操作时,可以使用RESTORE DATABASE语句,其基本格式如下所示:```sqlRESTORE DATABASE database_name FROM disk=’backup_file_path’;```在这两个语句中,backup_file_path是指定备份文件的路径。
4. 修改数据库如果要修改数据库的一些属性,可以使用ALTER DATABASE语句,其基本格式如下所示:```sqlALTER DATABASE database_name SET new_property;```其中,new_property是要修改的属性值。
5. 查看数据库在SQL Server 2008中,可以使用系统视图sys.databases来查看当前服务器中存在的所有数据库。
这个视图中包含了每个数据库的详细信息,如数据库的名称、创建日期、状态等。
sqlserver2008 update语句
SQL Server 2008 UPDATE语句用于更新表中的数据。
它的一般语法如下:
```
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
```
其中:
- `table_name` 是需要更新的表的名称。
- `column1`, `column2`, ... 是需要更新的列的名称。
- `value1`, `value2`, ... 是需要更新的值。
- `WHERE condition` 是可选的,用于指定需要更新的行的条件。
如果没有条件,则会更新表中的所有行。
例如,假设我们有一个名为`customers`的表,其中包含
`customer_id`、`first_name`、`last_name`等列。
我们可以使用以下UPDATE语句将`customer_id`为1的顾客的`first_name`更新为"John",`last_name`更新为"Doe":
```
UPDATE customers
SET first_name = 'John', last_name = 'Doe'
WHERE customer_id = 1;
```
这将更新`customers`表中`customer_id`为1的顾客的相关信息。
注意:在更新数据之前,请务必小心进行数据更新操作,确保更新语句的条件和列的值是正确的,以免意外修改了不应该修改的数据。
--[1]创建一个登录名pbMaster密码USE masterGO--创建登录名CREATE LOGIN pbMaster WITH PASSWORD='123456'GO--[2]创建数据库用户USE E_MarketGO--MasterDBUser是数据库用户名,pbMaster是登录名CREATE USER MasterDBUser FOR LOGIN pbMasterGO--[3]赋予用户操作权限USE E_MarketGO--为表UserInfo赋予查看,新增,修改的操作权限MasterDBUser数据库用户GRANT SELECT,INSERT,UPDATE ON UserInfo TO MasterDBUserGO--[4]收回新增的操作权限USE E_MarketGOREVOKE INSERT ON UserInfo TO MasterDBUserGO--使用sql语句来查看数据的状态,这里shuhan是数据库SELECT state_desc FROM sys.databases WHERE name='shuhan'--数据类型char和varchar:汉字点两个字节,英文、数字或字符占一个字节性别:男女char(2)或者是varchar(2)nchar和nvarchar:无论是汉字还是英文,数字或字符都占一个性别:男女nchar(1)或者nvarchar(1)固定长度与非固定长度:身份证号:18位长度固定,char(18)或nchar(18)住址:varchar(255)或nvarchar(255)如果住址中存在汉字、数字,nvarchar(255),小说或新闻:text,或ntext--新建数据库create database数据库名create database shuhanON PRIMARY--主文件组(NAME='E_Market_data',--逻辑文件名--物理文件名FILENAME='H:\project\E_Market_data.mdf', SIZE=5MB,--初始大小MAXSIZE=100MB,--最大容量FILEGROWTH=15%--增长率),FILEGROUP FG--创建了一个次文件组(日志) (NAME='E_Market2_data',FILENAME='H:\project\E_Market2_data.ndf', SIZE=4MB,FILEGROWTH=10%)LOG ON--日志文件(NAME='E_Market_log',FILENAME='H:\project\E_Market_log.ldf',SIZE=5MB,FILEGROWTH=0--未启用自动增长),(NAME='E_Market2_log',FILENAME='H:\project\E_Market2_log.ldf',SIZE=3MB,FILEGROWTH=10%,MAXSIZE=100MB)--建人物表的同时建字段create table renwu--create table表名(bianhao int,--编号xingming nvarchar(5),--姓名xingbie nchar(1),--性别zhiwu nvarchar(50),--职务nianling int,--年龄--numeric(),6表示一共占个字符,表示小数位占位gongzi numeric(6,2),--工资buzhu numeric(5,1)--补助)--添加记录--insert into表名values(添加数据)insert into renwu values(1,'刘备','男','主公',40,9999,1000) insert into renwu values(2,'甘夫人','女','夫人',28,8000,500) insert into renwu values(3,'诸葛亮','男','军师',38,9500,650) insert into renwu values(4,'关羽','男','将军',36,7000,700) insert into renwu values(5,'张飞','男','将军',37,6500,400) insert into renwu values(6,'赵子龙','男','将军',30,6500,600) --删除全部记录delete from renwu--按条件删除记录delete from表名where按什么条件--(含条件)删除delete from renwu where bianhao=2--将已删除的数据从新添加insert into renwu(bianhao,xingming,xingbie,zhiwu,nianling,gongzi)values(2,'甘夫人','女','夫人',28,8000) --删除表drop table表名drop table renwu--检测要删除的表是否存在USE shuhanGOSELECT*FROM renwu--如果存在就将其表删除,否则不执行删除语句IF EXISTS(SELECT*FROM sysobjects WHERE name='gsyg')DROP TABLE gsygGO--CHARINDEX:在一个字符串中查找另一个字符串,如果找到返回找到的位置,如果没有找到返回--两个参数,不指定开始位置,默认从开始SELECT CHARINDEX('zxw','')--三个参数,第一个是查找的,第二个是源字符串,第三个是开始查找的位置SELECT CHARINDEX('zxw','',10)--将函数放在查询语句中进行使用--查询“何双呈”的邮箱中"@"符号的位置SELECT CHARINDEX('@',Email)FROM UserInfoWHERE UserName='何双呈'SELECT*FROM UserInfo WHERE UserName='何双呈'--使用CHARINDEX的目的是想把邮箱中的用户名提取出来--LEN:求子符串的长度SELECT LEN(Email)FROM UserInfo WHERE UserName='何双呈'--LEFT从字符串的左边截取指定个数的字符SELECT LEFT(Email,CHARINDEX('@',Email)-1)FROM UserInfo WHERE UserName='何双呈'--REPLACE替换一个字符串的字符SELECT REPLACE('我最喜欢的颜色是白色','白色','绿色')SELECT REPLACE('我最喜欢的颜色是白色','白色','')--如果最后一个参数是空的话,相当于将第二个参数删除--STUFF--参数,源字符串,参数,开始位置,参数,删除的长度,参数是插入的新字符串SELECT STUFF('ABCDEF',2,3,'我要自学网')--查询表select*from表名select*from renwu--查询表中相应字段的数据--select要查询的数据(多个数据用逗号隔开)from表名select bianhao,gongzi from renwu--按条件查询--select要查询的数据(多个数据用逗号隔开)from表名where按什么条件select bianhao,gongzi from renwu--1、查询bianhao,xingming,gongzi并且查询工资大于的select bianhao,xingming,gongzi from renwu where gongzi>7000--查询不含有重复的记录select distinct要查询的数据form表名--distinct表示去除掉重复的select distinct要查询的数据form表名select distinct bianhao form renwu--更改字段的别名select bianhao编号,gongzi工资from renwu--或者select bianhao as'编号',gongzi as'工资'from renwu--显示每个员工的年薪并且把字段以中文的方式显示select xingming姓名,gongzi*12年工资from renwu--计算年总收入(含补助),和空值做四则运算--isnull(buzhu,0)判断是否为空,如果不为空执行逗号前面的,如果为空执行逗号后面的select xingming'姓名',gongzi*12+isnull(buzhu,0)*12'年总收入'from renwu--查询工资在到之间的员工select xingming'姓名',gongzi'工资'from renwu where gongzi>13000and gongzi<=18000 --查询性李的员工,查询第二个字是俊的员工select xingming from renwu where xingming like'李%'select xingming from renwu where xingming like'_俊%'--批量查询select xingming,bianhao from renwu where bianhao in(1,2,3,4,5,6)--查询一把手,也就是头头select xingming,zhiwu from renwu where bianhao is null--排序(order by)默认升序desc降序中文排序按照拼音顺序和音调select xingming,gongzi from renwu order by gongzi desc--降序select xingming,gongzi from renwu order by gongzi--升序--按部门编号升序,按工资降序select xingming,bianhao,gongzi from renwu order by bianhao,gongzi desc--用起临时名的方法算总收入并降序排序select xingming,gongzi*12+isnull(buzhu,0)*12nianxin from renwu order by nianxin desc --显示最高工资和最低工资select max(gongzi)from renwuselect min(gongzi)from renwu--即显示姓名又显示最高工资select xingming,gongzi from renwu where gongzi=(select max(gongzi)from renwu)--显示总工资和平均工资select sum(gongzi)'总工资',AVG(gongzi)'平均工资'from renwuselect xingming,gongzi,(select AVG(gongzi)from renwu)from renwu where gongzi>(select AVG(gongzi)from renwu) --统计有多少记录select count(*)from renwu--统计每个部门的平均工资和总工资,group by表示分类汇总的意思select bianhao,AVG(gongzi),SUM(gongzi)from renwu group by bianhao--按编号分类--显示每个部门每个职务的平均工资和最低工资select bianhao,AVG(gongzi),MIN(gongzi),zhiwu from renwu group by bianhao,zhiwu order by bianhao--显示平均工资低于的部门编号和平均工资.having表示二次筛选select bianhao,AVG(gongzi)from renwu group by bianhao having AVG(gongzi)<9999--日期函数--【1】获得当前系统时间SELECT GETDATE()--【2】DATEADD()参数,指定的日期部分,参数,整数值,参数,有效的日期格式SELECT DATEADD(MM,1,GETDATE())--参数的整数是否允许为负数,允许SELECT DATEADD(MM,-1,GETDATE())--参数的整数值是否允许为小数,直接舍点小数部分取整SELECT DATEADD(MM,1.5,GETDATE())SELECT DATEADD(MM,1.6,GETDATE())SELECT DATEADD(MM,1.4,GETDATE())--【3】DATEDIFF,求两个指定日期之间的差SELECT DATEDIFF(YY,'2008-8-8',GETDATE())--开始日期小于结束日期,那么如果开始日期大于结束日期,结果如何?SELECT DATEDIFF(YY,GETDATE(),'2008-8-8')--【4】DATENAME与DATEPART--DATENAME返回的是日期指定部分的一个字符形式,“+”起的是连接作用,因为“+”号左右都是字符形式SELECT DATENAME(YY,GETDATE())+DATENAME(DD,GETDATE())--DATEPART返回的是日期指定部分的一个数值形式,“+”起的作用是相加运算,是算术运算符SELECT DATEPART(YY,GETDATE())+DATEPART(DD,GETDATE())--数学函数--【1】随机数RAND,如果指定了随机种子,那么返回的随机数都相同,--如果没有指定随机种子,那么系统自动分配,所以每次的返回值都不相同SELECT RAND(100)SELECT RAND(100)SELECT RAND()SELECT RAND()--【2】CEILING:英文意思是天花板,正数进位取大值,负数舍小数取大值SELECT CEILING(9.000001)SELECT CEILING(-9.000001)--【3】FLOOR:英文意思是地板,正数舍小数取小值,负数进位取小值SELECT FLOOR(9.999999)SELECT FLOOR(-9.000001)--【4】ROUND:对数值进行四舍五入SELECT ROUND(123.565,2)SELECT ROUND(-123.434,2)--【5】ABS取绝对值,正数的绝对值是本身,负数的绝对值是相反数,的绝对值是SELECT ABS(434)SELECT ABS(-987)SELECT ABS(0)--【6】系统函数CONVERT用于数据类型转换--将字符型转为数值型SELECT CONVERT(int,'12')+CONVERT(int,'10')--+号起的是算术运算,相加运算--将数值型转为字符型SELECT CONVERT(varchar(2),12)+CONVERT(varchar(2),10)--+号是连接运算符,起连接作用--将日期型转为字符型SELECT CONVERT(varchar(10),GETDATE(),102)SELECT CONVERT(varchar(10),GETDATE(),112)--修改--update表明set修改数据(多数据的用逗号隔开)where按什么条件--如果条件是空则必须是where us nullupdate gsyg set nianling=23where bianhao=2--主键--primary Key表示主键,其特性是(不能重复,不能为空) create database shuihucreate table bumen(bianhao int primary Key,mingcheng nvarchar(10),didian nvarchar(20))create table renyuan(paihang int primary Key,xingming nvarchar(20),zhiwu nvarchar(20),shangji int,ruzhishijian datetime,gongzi numeric(6,1),buzhu numeric(5,1),--foreign Key references表示外键bianhao int foreign Key references bumen(bianhao))--多表查询--笛卡尔集现象--语法:select*from表名,表名select*from renwu,bumen--主、外键不相符的查询select*from renwu,bumen where bumen.mingcheng=条件--主、外键一致的查询select*from renwu,bumen where bumen.mingcheng=条件and renwu.bianhao=bumen.bianhao--显示编号相同的数据select*from renwu,bumen where renwu.bianhao=bumen.bianhao--显示姓名和所在部门以及部门编号select xingming,mingcheng,renwu.bianhao from renwu,bumen where renwu.bianhao=bumen.bianhao--复杂查询--如显示李逵的上级select shangji from renwu where xingming='李逵'--显示编号select xingming from renwu paihang=(select shangji from renwu where xingming='李逵')--显示姓名--子查询--1、单行子查询select ename,deptno,sal from emp where deptno=(select deptno from dept where loc='NEW YORK');--2、多行子查询SELECT ename,job,sal FROM EMP WHERE deptno in(SELECT deptno FROM dept WHERE dname LIKE'A%');--3、多列子查询SELECT deptno,ename,job,sal FROM EMP WHERE(deptno,sal)IN(SELECT deptno,MAX(sal)FROM EMP GROUP BY deptno);--4、内联视图子查询(1)SELECT ename,job,sal,rownum FROM(SELECT ename,job,sal FROM EMP ORDER BY sal);(2)SELECT ename,job,sal,rownum FROM(SELECT ename,job,sal FROM EMP ORDER BY sal)WHERE rownum<=5;--5、在HAVING子句中使用子查询SELECT deptno,job,AVG(sal)FROM EMP GROUP BY deptno,job HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename='MARTIN');--显示所有员工及上级的姓名,这里a和b是自定义的别名select a.xingming'姓名',b.xingming'上级'from renwu a,renwu b where a.shangji=b.paihang --分页查询--显示个到个入职的员工select top5xingming,zhiwu,gongzi from renwu order by gongzi--显示到个入职的员工,not in(不包含)select top3xingming,gongzi from renwu where bianhao not in(select top3bianhao from renwu order by gongzi)order by gongzi--删除重复记录--创建表create table xiaobiao(xbbh int,xbxm varchar(10))insert into xiaobiao values(1,'xb1')insert into xiaobiao values(2,'xb2')select*from xiaobiao--执行删除--这里的sb是临时表select distinct*into lsb from xiaobiaodelete from xiaobiaoinsert into xiaobiao select*from lsbdrop table lsb--内连接与外连接select a.xingming'姓名',b.xingming'上级'from renwu a,renwu b where a.shangji=b.paihang--左外连接和右外连接,left join左边的全部显示出来,右边跟着左边来有的显示,没有显示null select a.xingming'姓名',b.xingming'上级'from renwu a left join renwu b on a.shangji=b.paihang --约束--约束分为not null unique(唯一)primary Key(主键)foreign Key(外键)checkcreate table biao(dbbh int primary Key,dbxm varchar(20)unique,dbmm varchar(20)not null,nianling int)select*from biaoinsert into biao(dbxm,dbmm)values('贾宝玉','jiabaoyu')insert into biao(dbxm,nianling)values('贾宝玉',20)create table dabiao(dbbh int,dbxm varchar(20)unique,nianling int check(nianling>=20and nianling<=30))select*from dabiaoinsert into dabiao values(1,'贾宝玉',20)--默认defaultcreate table zhongbiao(dbbh int primary Key,nianling int check(nianling>=20and nianling<=30)default25) select*from zhongbiaoinsert into zhongbiao(dbbh)values(1001)insert into zhongbiao values(1002,25)insert into zhongbiao values(1003,20)--备份数据库backup database数据库名to disk='e:/数据库名.bak'--还原数据库restore database数据库名from disk='e:/数据库名.bak'--附加和分离数据库--分离数据库exec sp_detach_db'MySchool'--附加数据库exec sp_attach_db@dbname='MySchool',@filename1='e:\MyApp\MySchool.mdf',@filename2='e:\MyApp\MySchool_log.ldf'Binary类型:。
系统视图,系统表,系统存储过程的使用获取数据库中用户表信息1获取特定库中所有用户表信息 select * from sys . tables select* from sys . objects 第二条语句中当type='S'时是系统表2、 获取表的字段信息select * from sys . columns select* fromsyscolumnsobject_id = object_id ('表名') id=OBJECT_ID ('表名')获取索引或主键信息1、获取对象及对应的索引的信息 select '对象名'=A. name ,'对象类型’=a. type ,WHERE A. type ='U' AND B. name IS NOT NULL order by a. name2、获取表的主键及对应的字段(1) select'表名' =,‘主键名' =a. name ,'字段名'=c. namefrom sys . .in dexes a joinsys . index_ .columnsbon a .object_id =b. .object_idand a .in dex_id =b. in dex_id joi nsys . .columns c on a. object_id=c. object_idandc. column_ id =b. column 」djoinsys . .objectsd on d.object_id=c. object_idwhere a. is_primary_key =1(2) SELECT '表名’=OBJECT_NAME( b. parent_obj ),'主键名'=c. name , '字段名'=a. name3、 获取当前库中表的字段及类型信息 (1) select from on a. '字段名'=a. name , '类型名'=b. name ,'字段长度' '参数顺序’ sys . columnsuser_type_id object_id where syscolumns 与 sys.columns =a. max_length =a. column 」d a left j oin=b. user_type_id = object_id ('表名') 表用法类似。
系统视图,系统表,系统存储过程的使用获取数据库中用户表信息1、获取特定库中所有用户表信息select*from sys.tablesselect*from sys.objects where type='U' --用户表第二条语句中当type='S'时是系统表2、获取表的字段信息select*from sys.columns where object_id=object_id('表名') select*from syscolumns where id=OBJECT_ID('表名' )3、获取当前库中表的字段及类型信息(1)select'字段名'=,'类型名'=,'字段长度'=a.max_length,'参数顺序'=a.column_idfrom sys.columns a left join sys.types bon er_type_id=er_type_idwhere object_id=object_id('表名')syscolumns与sys.columns表用法类似。
获取索引或主键信息1、获取对象及对应的索引的信息select'对象名'=,'对象类型'=a.type,'索引名'=,'索引类型'=case b.type when 1 then'聚集索引'when 2 then'非聚集索引'when 3 then'xml索引'else'空间索引'end,'主键否'=case when b.is_primary_key=1 then'主键'else''endFROM sys.objects A JOIN sys.indexes B ON A.object_id=B.object_id WHERE A.type='U'AND IS NOT NULL order by 2、获取表的主键及对应的字段(1)select'表名'=,'主键名'=,'字段名'=from sys.indexes a join sys.index_columns bon a.object_id=b.object_id and a.index_id=b.index_idjoin sys.columns c on a.object_id=c.object_id andc.column_id=b.column_idjoin sys.objects d on d.object_id=c.object_idwhere a.is_primary_key=1(2)SELECT'表名'=OBJECT_NAME(b.parent_obj),'主键名'=,'字段名'=FROM syscolumns a,sysobjects b,sysindexes c,sysindexkeys d WHERE b.xtype='PK'AND b.parent_obj=a.id AND c.id=a.id AND = AND d.id=a.idAND d.indid=c.indid AND a.colid=d.colid(3)select'所属架构'=,'表名'=,'主键名'=,'列名'=,'键列序数'=ic.key_ordinalfrom sys.key_constraints as kjoin sys.tables as ton t.object_id=k.parent_object_idjoin sys.schemas as son s.schema_id=t.schema_idjoin sys.index_columns as icon ic.object_id=t.object_idand ic.index_id=k.unique_index_idjoin sys.columns as con c.object_id=t.object_idand c.column_id=ic.column_id where k.type='pk';(4)使用系统存储过程获取指定表的主键信息EXEC sp_pkeys'表名'--表名只能是当前数据库下的单独表名不能带上架构名3、查询哪些表创建了主键select'表名'= from(select name,object_id from sys.objects where type='u')aleft joinsys.indexes bon a.object_id=b.object_id and b.is_primary_key=1where is not null注:查询哪些表没有创建主键,将where条件改成is null 即可。
查找视图信息1、查看视图属性信息exec sp_help '视图名'2、查看创建视图脚本exec sp_helptext'视图名'3、查看当前数据库所有视图基本信息select*from sys.viewsselect*from sys.objects where type='V'select*from INFORMATION_SCHEMA.VIEWS4、查看视图对应的字段及字段属性select'视图名'=,'列名'=,'字段类型'=TYPE_NAME(b.system_type_id),'字段长度'=b.max_lengthfrom sys.views a join sys.columns bon a.object_id=b.object_id order by 5、获取视图中的对象信息exec sp_depends'视图名'查看存储过程信息1、基本信息select*from sys.proceduresselect*from sys.objects where type='P'2、查看存储过程创建文本sp_helptext 存储过程名称select text from syscomments where id=object_id (存储过程名称)3、查看存储过程的参数信息(1)select'参数名称'=name,'类型'=type_name(xusertype),'长度'=length,'参数顺序'=colidfrom syscolumnswhere id=object_id(存储过程名称)(2)select'参数名称'=name,'类型'=type_name(system_type_id),'长度'=max_length,'参数顺序'=parameter_idfrom sys.parameterswhere object_id=object_id(存储过程名称)返回当前环境中可查询的指定表或视图的列信息。
exec sp_columns表名select*from sys.columns where object_id=OBJECT_id(表名)select*from sys.syscolumns where id=OBJECT_ID(表名)select*from information_schema.columns where TABLE_NAME=表名查询存储过程或函数的参数的详细信息select*from sys.parameters where object_id=object_id(函数或存储过程名称)获取所有数据库信息1、获取数据库的基本信息select name from sysdatabases order by name2、获取某个数据库的文件信息select*from[数据库名].[架构名].sysfiles3、获取数据库磁盘使用情况exec sp_spaceused4、获取数据库中表的空间使用情况IF OBJECT_ID('tempdb..#TB_TEMP_SPACE')IS NOT NULL DROP TABLE#TB_TEMP_SPACEGOCREATE TABLE#TB_TEMP_SPACE(NAME VARCHAR(500),ROWS INT,RESERVED VARCHAR(50),DATA VARCHAR(50),INDEX_SIZE VARCHAR(50),UNUSED VARCHAR(50))GOSP_MSFOREACHTABLE'INSERT INTO #TB_TEMP_SPACE exec sp_spaceused ''?''' GOSELECT*FROM#TB_TEMP_SPACEORDER BY REPLACE(DATA,'KB','')+0 DESC获取触发器的相关信息1、查看触发器定义及相关属性信息(1)exec sp_help'触发器名'(2)查看表中指定类型的触发器的属性信息exec sp_helptrigger ['表名'][,['触发器类型']]--参数2可选,省略参数2时返回该表中所有类型的触发器属性2、获取触发器的创建脚本exec sp_helptext '触发器名'3、查看表中禁用的触发器select name from sys.triggers where parent_id=object_id('表名')and is_disabled=1注:is_disabled=0时为启用的触发器。
4、获取触发器的父类名,触发器名,触发器状态和触发器类型信息select'父类名'=,'对象类型'=a.type,'触发器名'=,'触发器状态'=case when b.is_disabled=1 then'禁用'else'启用'end,'触发器类型'=case when b.is_instead_of_trigger=1 then'instead of' else'after'endfrom sys.objects a join sys.triggers b on a.object_id=b.parent_id注:查询单个表或视图的触发器信息加上a.object_id=object_id(表名)条件。