--SQL 速查手册

--SQL 速查手册
/*******************************************/
SELECT
--用途:从指定表中取出指定列的数据
--语法:
SELECT column_name(s) FROM table_name
--主要字句可摘要为:
SELECT select_list [INTO new_table]
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression[ASC|DESC]]
-- AND & OR
用途:在WHERE 子句中 AND 和 OR 被用来连接两个或者更多的条件
--Between…AND
用途:指定需返回数据的范围
语法:
SELECT column_name FROM table_name
WHERE column_name
Between value1 AND value2
--Distinct
用途:DISTINCT 关键字被用作返回唯一的值
语法:
SELECT DISINCT column-name(s) FROM table-name
--Order by
用途:指定结果集的排序
语法:
SELECT column-name(s) FROM table-name ORDER BY {order_by_expression [ASC|DESC]}
--Group by
用途:对结果集进行分组,常与汇总函数一起使用。
语法:
SELECT column,SUM(column) FROM table GROUP BY column
例:
SELECT Company,SUM(Amount) FROM Sales Group By Company
--Having
用途:指定群组或汇总的搜寻条件
语法:
SELECT column,SUM(column) FROM table GROUP BY column
HAVING SUM(column) condition value
解释:HAVING 通常 GROUP BY 子句同时使用。
--Join
用途:当你要从两个或者已上的表中选区结果集时,你就会用到JOIN.
INNER JOIN 语法:
SELECT field1,field2,field3 From first_table
INNER JOIN second_table ON first_table.keyfield=second_table.foreign_keyfield
解释:INNER JOIN 返回的结果集是两个表中相匹配的数据。
LEFT JOIN 语法:
SELECT field1,field2,field3 From first_table
LEFT JOIN second_table
ON first_table.keyfield=second_table.foreign_keyfield
解释:LEFT JOIN 返回“first_table”中所有的行尽管在“second_table”中没有相匹配的数据。
RIGHT JOIN 语法:
SELECT field1,field2,field3 From first_table
RIGHT JOIN second_table
ON first
解释:RIGHT JOIN 返回“second_table”中所有的行尽管在"first_table"中没有相匹配的数据。
--Alias
用途:可用在表,结果集或者列上,为他们取一个逻辑名称。
语法:
1、给列取别名:SELECT column AS column_alias FROM table
2、给表取别名:SELECT column FROM table AS table_alias
/*******************************************/

Insert Into
用途:在表中插入新行。
语法:
1、插入一行数据:
INSERT INTO table_name
VALUES(value1,value2,......)
2、插入一行数据在指定字段上
INSERT INTO table_name (column1,column2,.....)
VALUES(value1,value2,.....)
/*******************************************/
Update
用途:更新表中原有的数据
语法:
UPDATE table_name SET column_name=new_value,...
WHERE column_name=some_value
/*******************************************/
Delete
用途:删除表中的数据
语法:
DELETE FROM table_name WHERE column_name=some_value
/*******************************************/
Create Table
用途:建立新的资料表。
语法:
CREATE TABLE table_name
(column_name1 data_type,
column_name2 data_type,.....)
例:
CREATE TABLE Person
(
LastName varchar(30),
FirstName varchar(30),
Address varchar(120),
Age int
)
/*******************************************/
Alter Table
用途:在已经存在的表中修改、增加、删除字段。
语法:
ALTER TABLE table_name
ADD column_name datatype
-----------------------------------------
ALTER TABLE table_name
DROP COLUMN column_name
/*******************************************/
Drop Table
用途:在数据库中移出一个数据表定义及该数据表中所有资料,索引,触发程序,条件约束及权限指定。
语法:
DROP TABLE table_name
/*******************************************/
--聚集函数--
-count
用途:传回选区的结果集中的行数目。
语法:SELECT COUNT(column_name) FROM table_name
-sum
用途:已表达式传回所有值的总和,或仅DISTINCT值。SUM仅可用于数值资料行。已忽略Null值。
语法:SELECT SUM(column_name) FROM table_name
-avg
用途:传回选取的结果集中值的平均值。已忽略Null值。
语法:SELECT AVG(column_name) FROM table_name
-max
用途:选取结果集中值的最大值。已忽略NULL值。
语法:SELECT MAX(column_name) FROM table_name
-min
用途:选取的结果集中值的最小值,已忽略NULL值。
语法:SELECT MIN(column_name) FROM table_name
--算术函数--
ABS() 绝对正值
CEILING() 传回大于等于给定表达式的最小整数
FLOOR()   传回小于等于给定表达式的最小整数

COS()余弦 ACOS()反余弦 SIN() ASIN() TAN() ATAN() EXP()传回给定Float表达式的指数值。
LOG()对数
POWER()传回给定表达式的乘幂值
语法:POWER(NUMERIC_EXPRESSION,V)
例:POWER(2,6)=64
SIGN()传回给定表达式的正(+1),零(0)或负(-1)号。
/*****************************************/
--分离数据库
语法:
sp_detach_db [ @dbname = ] 'dbname'
    [ , [ @skipchecks = ] 'skipchecks' ]
参数:
[@skipchecks =] 'skipchecks'
skipchecks 的数据类型为 nvarchar(10),默认值为 NULL。如果为 true,则跳过 UPDATE STATISTICS。
示例:
下面的示例分离 pubs 数据库,并将 skipchecks 设为 true。
EXEC sp_detach_db 'pubs', 'true'

--附加数据库
语法:
sp_attach_db [ @dbname = ] 'dbname'
    , [ @filename1 = ] 'filename_n' [ ,...16 ]
参数:
[@dbname =] 'dbname'
要附加到服务器的数据库的名称。该名称必须是唯一的。
[@filename1 =] 'filename_n'
数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。该列表还必须包括数据库分离后所有被移动的文件。
示例:
下面的示例将 pubs 中的两个文件附加到当前服务器。
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'

--删除数据库
语法
DROP DATABASE database_name [ ,...n ]
示例
A. 除去单个数据库
下例从系统表中删除 publishing 数据库的所有引用。
DROP DATABASE publishing

/*******************************************/
--备份和和恢复数据库
使用 BACKUP 和 RESTORE 创建数据库的复本
下例显示使用 BACKUP 和 RESTORE 语句创建 Northwind 数据库的复本。MOVE 语句使数据和日志文件还原到指定的位置。RESTORE FILELISTONLY 语句用于确定待还原数据库内的文件数及名称。该数据库的新复本称为 TestDB。有关更多信息,请参见 RESTORE FILELISTONLY。

BACKUP DATABASE Northwind
   TO DISK = 'c:/Northwind.bak'
RESTORE FILELISTONLY
   FROM DISK = 'c:/Northwind.bak'
RESTORE DATABASE TestDB
   FROM DISK = 'c:/Northwind.bak'
   WITH MOVE 'Northwind' TO 'c:/test/testdb.mdf',
   MOVE 'Northwind_log' TO 'c:/test/testdb.ldf'
GO

--复制表
语法:
select [列名1,列名2] into [新表名] from tablename

从另一个数据库复制表到当前数据库
select *  into BuilID from database2.dbo.BuildID

---重命名数据库对象
示例
A. 重命名表
下例将表 customers 重命名为 custs。
EXEC sp_rename 'customers', 'custs'
B. 重命名列
下例将表 customers 中的列 contact title 重命名为 title。
EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'

/*******************************************/
--有用的例句
1、取年龄最大的学生的分数
select 分数 from 成绩表 where name=(select name from 学生标 where 年龄=(select max(年龄) from 学生情况表))
2、取员工1—3月的平均工资
Select 姓名,avg(工资) from 表二 where 月份 between '1' and '3' group by 姓名
3、取3月份男员工的工资总数
Select sum(表二.工资) from 表二 left join 表一 on 表二.姓名=表一.姓名 where 表一.性别='男' and 表二.月份='3'

4、查询某一字段的重复记录
select * from product A where (select   count(*)   from   product   where   u_Code=a.u_Code)>1

5、删除记录重复的数据
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
/*******************************************/
6、通过另一个表更新本表
update table1 set table1.clage=table2.tb_age from table1,table2 where table1.clname=table2.tb_name
通过查询更新:      update tb_tmp01 set tb_tmp01.clage=A.tb_age from tb_tmp01,(select * from tb_tmp2) A where tb_tmp01.clname=A.tb_name

7、两个字段完全一样的表,合并为一个表查询.
1.用视图  
  create   view   V_tableAB  
  as    
  select   *   from   tableA  
  union    
  select   *   from   tableB  
   
  select   *   from   V_tableAB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值