基础SQL总结篇

   作者:http://mrrobot.iteye.com/  

/*
* SQL SERVER 
*/
use master
--go:应用于批处理  分块处理语句  执行完一块SQL再执行另一块SQL
go
--判断数据库(user_db)是否存在,如果存在则删除(user_db)
/*
 *语法:
 *    
 *if exists (select * from sysdatabases where name = '数据库名')
 *drop database 数据库名
 *
 * 注释:sysdatabases 系统视图
 */
if exists (select * from sysdatabases where name = 'user_db')
drop database user_db
go
--数据库
/*
 * 创建语法:
 *     create database  数据库名
 * 删除语法:
 *     drop database  数据库名
 */
create database user_db
go
--切换数据库
/*
* 语法:use 数据库名
*/
use user_db
go
--表
/*
 * 创建语法:
 *         CREATE TABLE 表名称
 *        (
 *
 *          列名称1 数据类型,
 *
 *          列名称2 数据类型,
 *
 *          列名称3 数据类型,
 *
 *           ....
 *         )
 *
 *  删除语法:
 *        删除表和数据: drop table 表名称   
 *        删除表中数据不删除表结构:truncate  table 表名称
 */
 --用户表
create table sys_User(
      u_Id  int PRIMARY KEY IDENTITY, -- PK
      FK_sys_User_Status int,         -- FK > sys_User_Status
      FK_sys_User_Role int,           -- FK > sys_User_Role
      u_Account nvarchar(20) not null UNIQUE,-- 账号
      u_Name  nvarchar(20),           -- 昵称
      u_CreateDate  datetime,         -- 创建时间
      u_Asssets money,                -- 资产
      u_Desc  ntext default '暂时没有描述' -- 描述
)
go
--用户权限表
create table sys_User_Role(
      r_Id  int PRIMARY KEY IDENTITY, -- PK
      r_Name  nvarchar(20),           -- 权限名
      r_Desc  ntext   default '暂时没有描述' -- 描述
)
go
--用户状态表
create table sys_User_Status(
      s_Id  int PRIMARY KEY IDENTITY, -- PK
      s_Name  nvarchar(20),           -- 状态名
      s_Desc  ntext  default '暂时没有描述'  -- 描述
)
go
--添加约束
/*
 *  PK:
 *         创建:主键生成策略采用SQL SERVER自身的 NOT NULL AUTO_INCREMENT(1,1)
 *         删除:ALTER TABLE 表名 DROP CONSTRAINT 键名
 *  NOT NULL:非空约束
 *         创建:列名称3 数据类型  NOT NULL
 *  UNIQUE:唯一约束
 *         创建:列名称3 数据类型  UNIQUE
 *  CHECK:条件约束
 *         添加:ALTER TABLE 表名 ADD CHECK (条件)  条件:各种运算符的搭配条件
 *         删除:ALTER TABLE 表名 DROP CONSTRAINT 约束名称
 *  DEFAULT:默认值
 *         创建:列名称3 数据类型  DEFAULT '默认值'
 *         删除:ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT
 *  FOREIGN KEY:外键约束
 *         创建:alter table 外键表 
 *               add constraint 约束名称 
 *               foreign key (外键表外键列) 
 *               references 主键表(主键列);
 *         删除:DROP CONSTRAINT 约束名
 */
--条件约束
ALTER TABLE sys_User
ADD CONSTRAINT chk_Person_u_Asssets  
CHECK (u_Asssets<=1000000000)
go
--ALTER TABLE sys_User DROP CHECK chk_Person_u_Asssets
--外键约束
--用户表(sys_user)&权限表(sys_User_Role )
alter table  sys_user 
add constraint fk_sys_user_sys_User_Role 
foreign key (FK_sys_User_Role)
references sys_User_Role(r_Id)
--DROP CONSTRAINT fk_sys_user_sys_User_Role
go
--用户表(sys_user)&状态表(sys_User_Status )
alter table  sys_user 
add constraint fk_sys_user_sys_User_Status
foreign key (FK_sys_User_Status)
references sys_User_Status(s_Id)
--DROP CONSTRAINT fk_sys_user_sys_User_Status
go
--创建索引
/*
 *CREATE UNIQUE INDEX 索引名称 ON 表名 (列名)
 */
CREATE UNIQUE INDEX index_u_Account
ON sys_User (u_Account)
--DROP INDEX sys_User.index_u_Account
go
--列模式
/*
 *  添加列:ALTER TABLE 表名 ADD 列名 类型
 *  删除列:ALTER TABLE 表名 DROP COLUMN 列名
 *  改变表中列的数据类型:
 *  ALTER TABLE 表名
 *  ALTER COLUMN 列名 类型
 */
ALTER TABLE sys_User ADD u_images image
go
ALTER TABLE sys_User DROP COLUMN u_images
go
--视图
/*
 *CREATE VIEW 视图名称 AS(查询的结果集)
 */
CREATE VIEW view_sys_User_info AS(select * from sys_User as u,sys_User_Role as r,sys_User_Status as s )
--DROP VIEW view_sys_User_info
go
USE user_db
GO
INSERT INTO [user_db].[dbo].[sys_User_Status]
           ([s_Name]
           ,[s_Desc])
     VALUES
           ('冻结状态'
           ,'不能登陆')
GO
INSERT INTO [user_db].[dbo].[sys_User_Status]
           ([s_Name]
           ,[s_Desc])
     VALUES
           ('冻结状态'
           ,'不能登陆')
GO
INSERT INTO [user_db].[dbo].[sys_User_Status]
           ([s_Name]
           ,[s_Desc])
     VALUES
           ('正常状态'
           ,'正常进行操作')
GO
INSERT INTO [user_db].[dbo].[sys_User_Status]
           ([s_Name]
           ,[s_Desc])
     VALUES
           ('黑名单状态'
           ,'拒绝任何操作')
GO
INSERT INTO [user_db].[dbo].[sys_User_Role]
           ([r_Name]
           ,[r_Desc])
     VALUES
           ('管理员'
           ,'可以管理本系统')
GO

INSERT INTO [user_db].[dbo].[sys_User_Role]
           ([r_Name]
           ,[r_Desc])
     VALUES
           ('普通用户'
           ,'可以访问本系统')
GO


INSERT INTO [user_db].[dbo].[sys_User_Role]
           ([r_Name]
           ,[r_Desc])
     VALUES
           ('超级管理员'
           ,'超级权限')
GO
INSERT INTO [user_db].[dbo].[sys_User_Role]
           ([r_Name]
           ,[r_Desc])
     VALUES
           ('访客'
           ,'可阅读相关信息')
GO

INSERT INTO [user_db].[dbo].[sys_User]
           ([FK_sys_User_Status]
           ,[FK_sys_User_Role]
           ,[u_Account]
           ,[u_Name]
           ,[u_CreateDate]
           ,[u_Asssets]
           ,[u_Desc])
     VALUES
           (3
           ,1
           ,'[email protected]'
           ,'chenxuan'
           ,'2015-03-20 13:55:50.000'
           ,1000.00
           ,'这就是描述')
GO

INSERT INTO [user_db].[dbo].[sys_User]
           ([FK_sys_User_Status]
           ,[FK_sys_User_Role]
           ,[u_Account]
           ,[u_Name]
           ,[u_CreateDate]
           ,[u_Asssets]
           ,[u_Desc])
     VALUES
           (2
           ,1
           ,'[email protected]'
           ,'chenxuan1'
           ,'2015-03-20 13:55:50.000'
           ,2000.00
           ,'这就是描述')
GO
INSERT INTO [user_db].[dbo].[sys_User]
           ([FK_sys_User_Status]
           ,[FK_sys_User_Role]
           ,[u_Account]
           ,[u_Name]
           ,[u_CreateDate]
           ,[u_Asssets]
           ,[u_Desc])
     VALUES
           (1
           ,1
           ,'[email protected]'
           ,'chenxuan2'
           ,'2015-03-20 13:55:50.000'
           ,3000.00
           ,'这就是描述')
GO




 
 
USE user_db
GO
/*
 * SQL select
 */
--查询所有
select * from sys_user
go
--查询单列
select u_account from sys_user
go
--查询多列
select u_account,u_name from sys_user
/*
 *SQL distinct 
 *注意:ntext 数据类型不能选为 DISTINCT,因为它不可比。
 */
select s_name from sys_user_status
select distinct s_name from sys_user_status
/*
 * SQL where
 * 
 */
select * from  sys_user as u where  u.u_asssets = 1000
select * from  sys_user as u where  u.u_asssets > 1000
select * from  sys_user as u where  u.u_asssets < 1000
select * from  sys_user as u where  u.u_asssets <= 1000
select * from  sys_user as u where  u.u_asssets >= 1000
select * from  sys_user as u where  u.u_asssets != 1000
 /*
  * SQL AND & OR
  *
  */
 select * from  sys_user as u where  u.u_asssets != 1000 and u.u_asssets = 2000
 select * from  sys_user as u where  u.u_asssets = 1000 or u.u_asssets = 2000
 /*
 * SQL Order By
 *
 */
 select * from  sys_user as u where  u.u_asssets < 10000 order by u.u_id asc
 select * from  sys_user as u where  u.u_asssets < 10000 order by u.u_id desc
 /*
 * SQL insert
 *
 */
 INSERT INTO [user_db].[dbo].[sys_User_Status]
           ([s_Name]
           ,[s_Desc])
     VALUES
           ('冻结状态'
           ,'不能登陆')
GO
 /*
 * SQL update
 *
 */
 select * from sys_user
 update sys_user  set  sys_user.u_name='rrr' where sys_user.u_name ='xxx'
 update sys_user  set  sys_user.u_name='xxx' 
 select * from sys_user
 go
 /*
 * SQL delete
 */
 select * from sys_user
 --TRUNCATE TABLE sys_user
 --DROP TABLE sys_user 
 /*
 * SQL Top
 */
select * from sys_user
select top 2 * from sys_user 
 /*
 * SQL Like
 *
 */
select * from sys_user where u_Account like 'chen%'
select * from sys_user where u_Account like '%com'
select * from sys_user where u_Account like '_hen'
select * from sys_user where u_Account like '[c]%'
select * from sys_user where u_Account like '[^c]%'

 /*
 * SQL In
 *
 */
select * from sys_user
select * from sys_user  where FK_sys_User_Status in (1,2)
/*
 *  SQL Between
 */
select * from sys_user 
select * from sys_user  where u_asssets between 0 and 2100
  /*
 *SQL Aliases
 *
 */
 select * from sys_User  As u
  /*
  * SQL Join
  *
  */
  --笛卡尔积
  select *from sys_User,sys_User_Role,sys_User_Status 
  --普通方式两表联查
  select *from sys_User,sys_User_Role where sys_User.FK_sys_User_Role = sys_User_Role.r_Id
  --普通方式三表联查
  select *from sys_User,sys_User_Role,sys_User_Status 
  where sys_User.FK_sys_User_Role = sys_User_Role.r_Id and sys_User.FK_sys_User_Status = sys_User_Status.s_Id
  --SQL Inner Join
  --两表联查
  select * from sys_User as u 
  inner join sys_User_Role r  
  on  u.FK_sys_User_Role=r.r_Id 
  --三表联查
  select * from sys_User as u 
  inner join sys_User_Role r  
  on  u.FK_sys_User_Role=r.r_Id 
  inner join sys_User_Status s 
  on u.FK_sys_User_Status =s.s_Id
  --SQL Left Join
    --两表联查
  select * from sys_User as u 
  left join sys_User_Role r  
  on  u.FK_sys_User_Role=r.r_Id 
  --SQL Right Join
  --两表联查
  select * from sys_User as u 
  Right join sys_User_Role r  
  on  u.FK_sys_User_Role=r.r_Id 
  --SQL Full Join
  --两表联查
  select * from sys_User as u 
  full join sys_User_Role r  
  on  u.FK_sys_User_Role=r.r_Id 
  /*
  * SQL Union
  * 注意:使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式。
  */
  --select * from sys_User
  --union
  --select *from sys_User_Role
  select COUNT(*) from sys_User
  union
  select count(*) from sys_User_Role
  /*
 * SQL Select Into
 *
 */
select  * into mycopeTable from sys_User
select  sys_User.u_Name,sys_User.u_Account into mycopeTable2 from sys_User
  /*
  * SQL  Nulls
  *
  */
 select  * from sys_User where sys_User.u_Account = null
 select  * from sys_User where sys_User.u_Account  is not null
 select  * from sys_User where sys_User.u_Account is null
 
 -------------------------------------函数应用---------------------------------------------------------------
 -- 语法:SELECT function(列) FROM 表
  /*
  * SQL isnull()
  * 如果值为null 返回指定的参数
  */
 select sys_User.*, ISNULL(sys_User.u_Desc,'') from sys_User 
   /*
  * SQL AVG(column)
  * 平均数
  */
  select AVG(sys_User.u_Asssets) from sys_User
    /*
  * COUNT(column)	返回某列的行数(不包括NULL值)
  */
  select COUNT(sys_User.u_Asssets) from sys_User
    /*
  * COUNT(*)	返回被选行数
  */
    select COUNT(*) from sys_User
    /*
  * MAX(column)	返回某列的最高值
  */
      select MAX(sys_User.u_Asssets) from sys_User
    /*
  * MIN(column)	返回某列的最低值
  */
     select MIN(sys_User.u_Asssets) from sys_User
     /*
  * SUM(column)	返回某列的总和
  */
       select sum(sys_User.u_Asssets) from sys_User
     /*
  * COUNT(DISTINCT column)	返回相异结果的数目
  */
  select COUNT(distinct sys_User.u_Asssets ) from sys_User

猜你喜欢

转载自mrrobot.iteye.com/blog/2282879
今日推荐