sql语句(2019.10.19)

首先我们创建两张表测试sql语句的正确性

用户表

角色表

1:写一个包含连接和分组的sql
SELECT dbo.Role.RoleId FROM dbo.Admin
INNER JOIN dbo.Role ON Role.RoleId = Admin.RoleId
GROUP BY dbo.Role.RoleId

2:写一个包含连接和case when的sql
SELECT dbo.Role.RoleId,
(CASE Admin.RoleId WHEN 1 THEN '管理员' ELSE '无' END)角色名
FROM dbo.Admin
INNER JOIN dbo.Role ON Role.RoleId = Admin.RoleId
3:写一个包含连接和Cast()函数的sql
SELECT CAST(dbo.Admin.RoleId AS DECIMAL(9,2))
FROM dbo.Admin
INNER JOIN dbo.Role ON Role.RoleId = Admin.RoleId

4:写一个包含连接和Convert()函数的sql
SELECT CONVERT(DECIMAL(9,2),Admin.RoleId)
FROM dbo.Admin
INNER JOIN dbo.Role ON Role.RoleId = Admin.RoleId

5:写一个包含子查询的sql
SELECT * FROM dbo.Admin 
WHERE RoleId IN(SELECT RoleId FROM dbo.Role)    
6:写一个视图的sql
CREATE VIEW view_1
AS 
SELECT * FROM dbo.Admin 
WHERE RoleId IN(SELECT RoleId FROM dbo.Role)

7:创建索引的sql
create unique nonclustered        --表示创建唯一非聚集索引
index UQ_NonClu_MId        --索引名称
on dbo.Admin(MId)        --数据表名称(建立索引的列名)
with 
(
    pad_index=on,    --表示使用填充
    fillfactor=50,    --表示填充因子为50%
    ignore_dup_key=on,    --表示向唯一索引插入重复值会忽略重复值
    statistics_norecompute=off    --表示启用统计信息自动更新功能
)

8:分页存储过程sql
CREATE PROCEDURE [dbo].[prco_PageResult]
-- 获得某一页的数据 --
@currPage INT = 1,                                    --当前页页码 (即Top currPage)
@showColumn VARCHAR(2000) = '*',           --需要得到的字段 (即 column1,column2,......)
@tabName VARCHAR(2000),                           --需要查看的表名 (即 from table_name)
@strCondition VARCHAR(2000) = '',              --查询条件 (即 where condition......) 不用加where关键字
@ascColumn VARCHAR(100) = '',                 --排序的字段名 (即 order by column asc/desc)
@bitOrderType BIT = 0,                            --排序的类型 (0为升序,1为降序)
@pkColumn VARCHAR(50) = '',                   --主键名称
@pageSize INT = 20,                                --分页大小
@Count INT OUTPUT
 
AS
BEGIN -- 存储过程开始
-- 该存储过程需要用到的几个变量 --
DECLARE @strTemp varchar(1000)
DECLARE @strSql nvarchar(4000)                   --该存储过程最后执行的语句
DECLARE @strOrderType VARCHAR(1000)      --排序类型语句 (order by column asc或者order by column desc)
 
BEGIN
IF @bitOrderType = 1   -- bitOrderType=1即执行降序
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
    SET @strTemp = '<(SELECT min'
END
ELSE
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
    SET @strTemp = '>(SELECT max'
END
IF @currPage = 1    -- 如果是第一页
BEGIN
    IF @strCondition != ''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
            ' WHERE '+@strCondition+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType
END
 
ELSE    -- 其他页
BEGIN
    IF @strCondition !=''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
        ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
        ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
END
END
PRINT @strSql
EXEC (@strSql)
 
--得到总数
BEGIN    
    IF @strCondition = ''
        SET @strSql='select @total= count('+@showColumn+') from '+@tabName
    ELSE
        SET @strSql='select @total= count('+@showColumn+') from '+@tabName+' where '+@strCondition                        
END
PRINT @strSql
    EXEC sp_executesql @strSql,N'@total int out',@total=@Count OUTPUT
END  -- 存储过程结束

9:写一个触发器sql
create trigger trig_delete
on dbo.Admin 
after delete
as
begin
    select Deleted.MId as 已删除的用户
    from deleted
end;

10:写一个存储过程包含事务的sql 
CREATE PROCEDURE [dbo].[pro_pro16]
AS
DECLARE @truc INT
SELECT @truc=@@trancount
IF @truc=0
BEGIN TRAN p1
ELSE
SAVE TRAN pl
IF (@truc=2)
BEGIN
ROLLBACK TRAN pl
RETURN 25
END
IF(@truc=0)
COMMIT TRAN pl
RETURN 0

11:如何一次性往一张表【插入/更新】10条数据,存储过程实现。
12:分页的实现方式?至少写3种
--ROW_NUMBER() OVER()方式
select * from ( 
select *, ROW_NUMBER() OVER(Order by MId ) AS RowId from dbo.Admin 
) as b
where RowId between 1 and 2
--top not in方式
select top 3 * from dbo.Admin 
where MId not in (select top 2 MId from dbo.Admin)
--Max()方法
SELECT  * FROM dbo.Admin
WHERE MId IN (SELECT TOP 3 MId FROM dbo.Admin 
    where MId <(select MAX(MId) from dbo.Admin WHERE MId<=6)
    ORDER BY MId DESC)
ORDER BY MId

13:写一个包含连接和分组,并且根据某个字段拼接的sql
select RoleId,
(select COUNT(1) FROM dbo.Admin where dbo.Admin.RoleId=Role.RoleId) as    Count,
stuff((select ',' + MName from dbo.Admin,dbo.Role where Role.RoleId=dbo.Admin.RoleId for xml path('')),1,1,'') as UserName
 from Role
 GROUP BY RoleId

14:写一个包含having写法的sql
SELECT MId FROM dbo.Admin
GROUP BY MId
having MId<7

15:写一个包含连接和分组,排序的sql。
SELECT MId,RoleName FROM dbo.Admin
INNER JOIN dbo.Role ON Role.RoleId = Admin.RoleId
GROUP BY MId,RoleName
ORDER BY MId
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 (01) SELECT .................................. ............... .......................................2 查找 SELECT "栏位名" FROM "表格名" (02) DISTINCT................................. ............... .....................................2 不同值 SELECT DISTINCT "栏位名" FROM "表格名" (03) WHERE...................................... ............... ....................................2 条件 SELECT "栏位名" FROM "表格名" WHERE "条件" (04) AND OR ...................................... ............... ..................................3 条件并和或 SELECT "栏位名" FROM "表格名" WHERE "简单条件" {[AND|OR] "简单条件"} (05) IN .............................................. ............... ..................................3 包含 SELECT "栏位名" FROM "表格名" WHERE "栏位名" IN ('值一', '值二 ', ...) (06) BETWEEN.............................. ............... ........................................4 范围包含 SELECT "栏位名" FROM " 表格名" WHERE "栏位名" BETWEEN '值一' AND '值二' (07) LIKE....................................... ............... .......................................4 通配符包含 SELECT "栏位名" FROM "表格名" WHERE "栏位名" LIKE {套 式} -- 支持通配符‘_’ 单个字符 '%' 任意字符 (08) ORDER BY............................... ............... ......................................5 排序 SELECT "栏位名" FROM "表格名" [WHERE "条件"] ORDER BY "栏位 名" [ASC, DESC] -- ASC 小到大 DESC 大到小 (09) 函数........................................ ............... ......................................5 函数 AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合) SELECT "函数名"("栏位名") FROM "表格名" (10) COUNT .................................... .............. ......................................6 计 数 SELECT COUNT(store_name) FROM Store_Information WHERE store_name is not NULL -- 统计非空 SELECT COUNT(DISTINCT store_name) FROM Store_Information -- 统计多 少个不同 (11) Group By .................................. .............. .....................................6 字段分组 SELECT "栏位 1", SUM("栏位 2") FROM "表格名" GROUP BY " 栏位 1" (12) HAVING...................................... .............. ....................................7 函数条件定位 SELECT "栏位 1", SUM("栏位 2") FROM "表格名" GROUP BY "栏位 1" HAVING (函数条件) (13) ALIAS........................................... .............. ..................................7 别名 SELECT "表格别名"."栏位 1" "栏位别名" FROM "表格名" "表格别名" (14) 连接................................................ ..............................................8 SELECT A1.region_name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.store_name = A2.store_name GROUP BY A1.region_name (15) 外部连接........................................... ............................................9 SELECT A1.store_name, SUM(A2.Sales) SALES FROM Georgraphy A1, Store_Information A2 WHERE A1.store_name = A2.store_name (+) GROUP BY A1.store_name (16) Subquery .............................. .............. .........................................9 嵌套 SELECT "栏位 1" FROM "表格" WHERE "栏位 2" [比较运算素] (SELECT "栏位 1" FROM "表格" WHERE (17) UNION.................................... ............... ......................................10 合并不重复结果 [SQL 语句 1] UNION [SQL 语句 2] (18) UNION ALL....................................... .............. ............................ 11 合并所有结果 [SQL 语句 1] UNION ALL [SQL 语句 2] (19) INTERSECT..................................................... ............... ............. 11 查找相同值 [SQL 语句 1] INTERSECT [SQL 语句 2] (20) MINUS............................ ............... ..............................................12 显示第一个语句中不在第二个语句中的项 [SQL 语句 1] MINUS [SQL 语句 2] (21) Concatenate................................... ............... ...............................12 结果相加(串联) MySQL/Oracle: SELECT CONCAT(region_name,store_name) FROM Geography WHERE store_name = 'Boston'; SQL Server: SELECT region_name + ' ' + store_name FROM Geography WHERE store_name = 'Boston'; (22) Substring ...................................................... ............... ...............13 取字符 SUBSTR(str,pos) SUBSTR(str,pos,len) (23) TRIM ...... .............. .....................................................................14 去空 SELECT TRIM(' Sample '); TRIM()首尾, RTRIM()首, LTRIM()尾 (24) Create Table ........... .............. .....................................................14 建立表格 CREATE TABLE "表格名"("栏位 1" "栏位 1 资料种类","栏位 2" "栏位 2 资料种类",... ) (25) Create View............................. .............. ......................................15 建立表格视观表 CREATE VIEW "VIEW_NAME" AS "SQL 语句" (26) Create Index........................................... ............... ......................16 建立索引 CREATE INDEX "INDEX_NAME" ON "TABLE_NAME" (COLUMN_NAME) (27) Alter Table.. .............. ..................................................................16 修改表 ALTER TABLE "table_name"[改变方式] -- ADD 增加;DROP 删 除;CHANGE 更名;MODIFY 更改类型 (28) 主键.......................... ..................................................................18 ALTER TABLE Customer ADD PRIMARY KEY (SID) (29) 外来主键....................................... ............ ..................................18 CREATE TABLE ORDERS(Order_ID integer,Order_Date date,Customer_SID integer,Amount double,Primary Key (Order_ID),Foreign Key (Customer_SID) references CUSTOMER(SID)); (30) Drop Table................................................. ............... ...................19 删除表 DROP TABLE "表格名" (31) Truncate Table ................. ............... ............................................20 清除表内容 TRUNCATE TABLE "表格名" (32) Insert Into....................................... ............... .............................20 插入内容 INSERT INTO "表格名" ("栏位 1", "栏位 2", ...) VALUES ("值 1", "值 2", ...) (33) Update ........................ ................ ................................................20 修改内容 UPDATE "表格名" SET "栏位 1" = [新值] WHERE {条件} (34) Delete ......................................... .............. .................................21 DELETE FROM "表格名" WHERE {条件}

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值