Smile

人生只有一次,想做就去做,否则一次次的放弃,等想去做时,时间已经不允许了,不要碌碌无为一辈子!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

常用SQL总结,修改添加中

Posted on 2010-12-20 17:18  疯狂的猫咪  阅读(366)  评论(1)    收藏  举报

行转列

建表

Create table StudentSubject(SId int identity(1,1)not null PRIMARY KEY,

                          SName varchar(50) null,

                          Subject varchar(50) null,

                          Score numeric(18,2)null)

插入数据

INSERT INTO StudentSubject

select '张三','语文',90

union all select '李四','语文',87

union all select '王五','语文',78

union all select '张三','数学',88

union all select '李四','数学',77

union all select '王五','数学',86

union all select '张三','英语',88

union all select '李四','英语',87

union all select '王五','英语',98

 

表效果

select * from StudentSubject order by SName

 

行转列

方法一:

with ss as (

    select SName,(Case When Subject='语文' then Score else 0 end) as '语文',

    case when Subject='数学' then Score else 0 end as '数学',

    case when Subject='英语' then Score else 0 end as '英语'

    from StudentSubject

      )

SELECT SName ,MAX(语文)as 语文,max (数学)as 数学,max(英语)as 英语from ss group by SName

方法二:

select SName,max(Case When Subject='语文' then Score else 0 end) as '语文',

    max(case when Subject='数学' then Score else 0 end) as '数学',

    max(case when Subject='英语' then Score else 0 end) as '英语'

       from StudentSubject group by SName

效果图:

横向汇总和竖向汇总:

Sql: select SName,max(Case When Subject='语文' then Score else 0 end) as '语文',

    max(case when Subject='数学' then Score else 0 end) as '数学',

    max(case when Subject='英语' then Score else 0 end) as '英语',

    sum(Score)as '总分',

    cast(avg(Score)as numeric(18,2))as '平均分'

    from StudentSubject group by SName

    union all select '总分',sum(case when subject='语文' then score else 0 end),

    sum(case when subject='数学' then score else 0 end ),

    sum(case when subject='英语'then score else 0 end ),

    sum(score),avg(score)from StudentSubject

----------------------------------------------以下是常用sql-------------------------------------------------------------

 

一、          新建数据库

语法如下:

CREATE DATABASE [DATATEST] ON PRIMARY(NAME=N'DBTEST',FILENAME=N'E:\DBTEST.MDF',SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB) LOG ON (NAME=N'DBTEST_LOG',FILENAME=N'E:\DBTEST_LOG.LDF',MAXSIZE=1024GB,FILEGROWTH=10%)

COLLATE Chinese_PRC_CI_AS

其中COLLATE Chinese_PRC_CI_AS 是用来设置数据库排序用,具体详见文档理解collate_Chinese_PRC_CI_AS.docx

 select * from ::fn_helpcollations();可以查出所有排序规则

二、数据表的相关修改

1、新建表

方法一: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 ,

)

方法二:

CREATE TABLE [dbo].[Students] (

[Guid]uniqueidentifier not null,

[Code] varchar(50)COLLATE CHINESE_PRC_CI_AS null,

[ID] INT NULL,

[Adress]varchar(50)COLLATE CHINESE_PRC_CI_AS NULL,

[Age] INT NULL,

[Tel] VARCHAR(50) COLLATE CHINESe_PRC_CI_AS NULL,

[Chinese]numeric (18,2)default 0 NULL,

[Mathematical]numeric(18,2) default 0 null,

[English]numeric(18,2) default 0 null

 

CONSTRAINT [PK_Students] primary key nonclustered

(Guid asc)

) ON [PRIMARY]

删除表

Drop table [表名]

删除表的一列: ALTER TABLE [表名] DROP COLUMN [字段名]

添加表的一列:ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL

修改表的一列: ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL

为表创建约束: ALTER TABLE [表名] ADD CONSTRAINT 约束名 CHECK ([约束字段] <= ‘2000-1-1′)

删除表约束:ALTER TABLE [表名] DROP CONSTRAINT 约束名

新建默认值

ALTER TABLE [表名] ADD CONSTRAINT 默认值名 DEFAULT ‘51WINDOWS.NET’ FOR [字段名]

删除默认值

ALTER TABLE [表名] DROP CONSTRAINT 默认值名

插入数据

INSERT INTO [表名] (字段1,字段2) VALUES (100,’51WINDOWS.NET’)

INSERT INTO [表名](字段1,字段2,……)SELECT newid(),字段二,……FROM 表二

删除数据:

DELETE FROM [表名] WHERE [字段名]>100

Truncate table [表名]删除表中所以数据同时不删除表结构,比delete from [表名]效率要高的多

更新数据

UPDATE [表名] SET [字段1] = 200,[字段2] = ‘51WINDOWS.NET’ WHERE [字段三] = ‘HAIWA’

连接查询

SELECT A.* ,B.Type,C.Count FROM 表A inner join 表B on a.字段1=B.字段一 left outer join 表C on B.字段二=C.字段二

嵌套查询

 

order by

group by

case when then else end

left outer join; right outer join ; inner join ,full outer join

excit

游标

存储过程

数据库写事务

分页查询如何做

创建数据库函数

熟记数据库内置函数

 

 

数据库里写递归cte

数据库作业

视图

Create View as (select * from 表一 inner join 表二on 表一.id=表二.Fid)

行变列,列变行,横向汇总,竖向汇总

优化,并发如何处理