sql语句中的case、while等使用

本文介绍了SQL的基础用法,包括创建表、CASE函数的应用、WHILE循环的使用、游标的操作及日期函数等,适合初学者快速上手。
CREATE TABLE [dbo].[event] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(50) NULL ,
[age] int NULL ,
[createDate] datetime NULL DEFAULT (getdate()) 

)


语法

简单case函数

case input_expression 

  when when_expression  then result_expressin 

                    [...n]

                 else    else_result_expression 

                  end

example:

       select  (case age  when 11 then 'student' when 23 then 'teacher' else 'other' end) as category from event

case搜索函数:

case   whenboolean_expression  then result_expressin [...n]else else_result_expression end

example:

        SELECT (case WHEN age=11 THEN 'stu' WHEN age=22 THEN 'tea' ELSE 'other' END) AS agenum,id,age from event

在orderby中使用case          

            当查询的id值为2103695684不为空时,按照id字段排序,else按照age字段排序                  

             SELECT (case WHEN age=11 THEN 'stu' WHEN age=22 THEN 'tea' ELSE 'other' END) AS agenum,id,age   FROM event

             ORDER BY (CASE when (SELECT id from event WHERE id=2103695684) is NOT NULL THEN id ELSE age END) DESC

while的使用 while的语法while .......end

       declare @num int

       while((select count(*) from event)>1)

       begin

           set @num=(select count(*) from event)

           if(@num>12) break

           else print 'ok'

      end

    select @num


MSSQL的游标的简单使用,先看如下代码:

declare mycursor cursor for                            声明游标

select id,name from table                               游标所要索引的记录集                               

open mycursor                                                打开游标

declare @id int                                               声明一些变量用来存储当前游标索引到的记录的字段值

declare @name varchar(10)

fetch next from mycursor into @id,@name     开始移动游标到第一条记录,并且读取该记录的字段值到相应变量中

while (@@fetch_status=0)                            @@fetch_status 0表示读取记录成功,100表示读到了最后一条记录 

begin                                                              begin相当于{    所以不能省

print @id                                                         可以针对当前记录的某些字段值进行一系列SQL语句的处理

fetch next from mycursor into @id,@name     一定要在SQL语句处理后移动到下一条记录

end                                                                end相当于}  所以不能省

close mycursor                                                关闭游标

deallocate mycursor                                        释放游标



附加:


------判断两个值是否相等,相等返回空值,不等则返回第一个表达式的值----------
SELECT NULLIF(1,1)


---类型转换----
SELECT CAST(23/2 AS INTEGER)


---对时间进行增加或减少 DATEADD--
SELECT  DATEADD(MONTH, -1, GETDATE())


---用于计算两个日期之间的差额 DATEDIFF---
SELECT DATEDIFF(YEAR,GETDATE(), DATEADD(MONTH, 1, GETDATE()))




SELECT  DATENAME(YEAR, GETDATE())


----通配符的使用[str]含有str表达式中的任何一个字符[^str]不含有表达式中的任何一个字符------
SELECT  *  FROM  event  WHERE  name  LIKE '[^l]%'


还在学习中。。。。。。。。


一篇关于数据库优化的文章,大家可以参考参考http://www.cnblogs.com/hnlshzx/p/3500365.html


在C#中使用包含 `case when then end` 的 SQL 语句,通常会借助 ADO.NET 来实现。以下是详细的方法和注意事项: ### 方法 #### 1. 连接数据库 要使用 `case when then end` 语句,首先要建立与数据库的连接。不同的数据库系统,连接字符串会有所不同。以 SQL Server 为例: ```csharp using System; using System.Data.SqlClient; class Program { static void Main() { string connectionString = "Data Source=YOUR_SERVER;Initial Catalog=YOUR_DATABASE;User ID=YOUR_USER;Password=YOUR_PASSWORD"; using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); // 执行 SQL 语句 } catch (Exception ex) { Console.WriteLine("连接数据库时出错: " + ex.Message); } } } } ``` #### 2. 执行包含 `case when then end` 的 SQL 语句 在建立数据库连接之后,就可以执行包含 `case when then end` 的 SQL 语句了。以下是一个具体的示例: ```csharp using System; using System.Data.SqlClient; class Program { static void Main() { string connectionString = "Data Source=YOUR_SERVER;Initial Catalog=YOUR_DATABASE;User ID=YOUR_USER;Password=YOUR_PASSWORD"; using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); string sql = "SELECT column1, " + "CASE " + "WHEN column2 > 10 THEN 'Greater than 10' " + "ELSE 'Less than or equal to 10' " + "END as result " + "FROM your_table"; using (SqlCommand command = new SqlCommand(sql, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine($"Column1: {reader["column1"]}, Result: {reader["result"]}"); } } } } catch (Exception ex) { Console.WriteLine("执行 SQL 语句时出错: " + ex.Message); } } } } ``` ### 注意事项 - **SQL 注入问题**:在构建 SQL 语句时,要避免直接拼接用户输入的数据,以防 SQL 注入攻击。建议使用参数化查询。例如: ```csharp string sql = "SELECT column1, " + "CASE " + "WHEN column2 > @value THEN 'Greater than value' " + "ELSE 'Less than or equal to value' " + "END as result " + "FROM your_table"; using (SqlCommand command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@value", 10); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine($"Column1: {reader["column1"]}, Result: {reader["result"]}"); } } } ``` - **语法正确性**:`case when then end` 语句的语法必须正确,要保证每个 `WHEN` 子句都有对应的条件表达式,`THEN` 后面跟着合法的返回值,并且 `END` 语句不能遗漏[^1][^2][^3][^4][^5]。 - **数据类型一致性**:`THEN` 子句返回值的数据类型要保持一致,不然可能会引发数据类型转换错误。 - **数据库兼容性**:不同的数据库系统对 `case when then end` 语句的支持可能存在差异,在编写 SQL 语句时要考虑目标数据库的特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值