类与对象,SQL语句,RDLC报表(整理)

一、类与对象

单词:

1.子类与父类,先调用子类构造函数还是父类构造函数?

答:先调用父类构造函数,再调用子类构造函数。

2.子类与父类中,变量的调用。

(1)函数中调用的是参数变量

(2)子类与父类有同名变量name,这样写name先调用子类中的变量

(3)子类与父类有同名变量name,这样写this.name调用子类中的变量

(4)子类与父类有同名变量name,这样写base.name调用父类中的变量

(5)父类有有变量name,这样写name调用父类中的变量

二、SQL语句

单词:Runcate 缩短、Distinct 确切的、Union 联合、Ceiling 天花板、Floor 地板、Round 半径、Convert 转变、CAST 计算、expression语句、CASE 案例、Foreign 外来的references

参照、

1.更新- update Table set col=value,col2=value2 where...

(1)更新一列:update book set b_money = 30

(2)更新多列:update book set b_money = 50,b_isdel = 0

(3)更新一部分数据:update book set b_money = 50 where b_id = 1

(4)*注意:SQL中等于判断用单个=,而不是==

(5)where还可以使用复杂的逻辑判断。

例如:update book set b_money=30 where b_titile = ‘java’ or b_money < 25

or相当于C# 中的||(或者)。

(6)update book set b_title = N’哈哈哈哈’,使用了Unicode编码。

(7)where 中科院使用的其他逻辑运算符:orandnot(逻辑结果取反值)、<>>=<=!=(或<>)等。

2.删除-delete [from] Table where col = data

(1)删除表中全部数据:delete from book

(2)Delete只是删除数据,表还在,和Drop Table不同。

(3)Delete也可以带where子句来删除一部分数据:

Delete from T_Person Where FAge > 20

(4)Truncate 删除表数据/还原标识

(5)删除/更新规则,想要从表外键根据主表对应的主键进行删除更新,删除/更新规则可以设置为级联。但一般不设置,消耗资源,不安全。

3.检索-select col,col2[,*] from Table where ...

(1)简单的数据检索:select * form T_Employee

(2)只检索需要的列:select FNumber from T_Employeeselect FName,FAge from T_Employee

(3)列别名:select FNumber AS 编号,FName AS 姓名,FAge AS Age111 from T_Employee

(4)使用where检索符合条件的数据:select FName from T_Employee where FSalary < 5000

(5)还可以检索不与任何表关联的数据:select 1+1;select newid();select getdate();

(6)Select *,’fff’ as ‘添加的列名’ from T_Employee,显示的是结果集,不会影响表。

(7)表可以取别名 例如:select t.FNumber from T_Employee as t

4.数据汇总(聚合函数)

(1)SQL聚合函数:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM (和)、COUNT(数量)

(2)大于25岁的员工的最高工资:

Select Max(FSalary) from T_Employee where FAge>25

(3)最低工资和最高工资:

Select MIN(FSalary)MAX(FSalary) from T_Employee

5.数据排序

(1)order by子句位于select语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排序,ASC)还是降序(从大到小排序,DESC)。

(2)按照年龄升序排序所有员工信息的列表:

Select * from T_Employee order by FAge ASC

(3)按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序:select * from T_Employee order by Fage DESC,FSalary DESC

(4)Order by子句要放到where子句之后:select * from T_Employee where FAge > 23 order by FAge DESC, FSalary DESC

6.通配符(模糊查询)

(1)通配符过滤关键词like

(2)单字符匹配的通配符为半角下划线“_”,它匹配单个出现的自负。

例子:以任意字符开头,剩余部分为“erry

Select * from T_Employee where FName like ‘_erry’

(3)多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的任意字符。“”匹配以“k”开头、任意长度的字符串

例子:检索员工姓名中包含字母“n”的员工信息

Select * from T_Employee where FName like ‘%n%’

(3)[ ]”表示括号中所指定范围内的一个字符。

例子:检索包含“AB”开头的员工信息

Select * from T_Employee where FName like ‘[AB]%’

也可以这样写:

Select * from T_Employee where FName like ‘[A-B]%’

(4)”-”代表字符或数字之间所有的值。

(5)[^]代表不在括号中所指定范围内的一个字符。 

(6)通常与LIKE关键字一起使用

(7)可以用在检查约束中使用LIKE

(8)在后面的查询语句中还会经常使用到

7.空值处理

(1)数据库中,一个列如果没有指定值,那么值就为null,这个nullC#中的null,数据库中的null表示“不知道”,而不是表示没有。

(2)因此select null + 1结果是null,因为“不知道”加1的结果还是“不知道”。

(3)Select * from T_Emplyee where FName=null; select * From T_employee where Fname!=null;

都是没有任何结果,因为数据库也“不知道”。

(4)SQL中使用is nullis not null来进行空值判断。

例如:select a.FAge from T_Employee as a where FAge is null;

select a.FAge from T_Employee as a where is not null;

8.多值匹配

(1)要删除多条记录怎么办?

Delete T_Employee where Fid in(21,22);

Delete T_Employee where Fid=21 or Fid=22;

为什么or可以实现,还会用到in,因为html页面在提交删除name组时,传过来的id值组是21,22,23,24这样的形式,可以不加修饰的直接使用在In中。

(2)范围值

Select * from T_Employee where FAge>=23 AND FAge<=27;

Select * from T_Employee where FAge Between 23 AND 27;

Select * form T_Employee where FAge Ftest>’A’ AND Ftest<’C’;

9.数值型变量使用,存值从大到小?

smallInt < int < bigInt < float < numeric

10.数据分组

(1)按照年龄进行分组统计各个年龄段的人数:

SELECT FAge,Count(*) From T_Employee Group by Fage

 

(2)Group by子句必须放到where语句的之后

(3)没有出现在Group by子句中的列是不能放到select语句之后的列名列表的(聚合函数除外)

错误示范:

Select FAge,FSalary From T_Employee Group by FAge

正确示范:

Select FAge,AVG(FSalary) From T_Employee Group by FAge

(4)多个条件分组时是以什么为分组条件的?

答:是以Group by后的所有列名作为条件,全部都相同的为一组。

实例:select FName,FAge,count(*) From T_Employee group by FAge,FName

 

11.分组之后的结果集条件用Having

Select FName,ftest,Count(*) as 数量 from T_Employee having Count(*) > 1

12.限制结果集行数

(1)Select top 5 * from T_Employee order by FSalary Desc

(2)(*) 检索按照工资从高到低排序检索从第六名开始一共三个人的信息分页:

Select top 3 * from T_Employee where FSalary not in(select top 5 FSalary from T_Employee order by FSalary DESC) order by FSalary DESC

先获得排序后的前五个然后,然后从主表中排出这5个,然后获取排序后的前三个(这种因为需要使用ID号比较,所以效率比较差)

(3)另一分页方式:

select * from( select top 3 * from (select top 8 * from T_Employee order by FSalary DESC)as tab order by tab.FSalary ASC ) as t order by t.FSalary DESC

先获取排序的前8个,然后逆向排序获得前3个,然后再逆向排序

(4)SQLServer2005后增加了Row_Number函数简化实现

实例:select ROW_NUMBER() OVER (order by FAge ASC) as ROWID,* from T_Employee

 

13.去除数据重复

(1)DISTINCT关键字

Select FDepartment from T_Employee

Select DISTINCT FDepartment from T_Employee

(2)Distinct是对整个结果集进行数据重复处理的,而不是针对每一个列,因此下面语句不会只保留FDepartment进行重复值处理:

Select Distinct FDepartment,FSubCompany from T_Employee

Distinct类似于Group by分组,按照多个列的组合值判断是否重复

14.T_Employee表添加、修改、删除列SQL语句怎么实现?

答:

--添加列

Alter table T_employee add FDepartment varchar(20),FSubCompany varchar(20)

--修改列

Alter table T_employee alter column FDepartment int

--删除

Alter table T_employee drop column FSubCompany

15.联合结果集

(1)简单的结果集联合:

select FNumber,FName,FAge from T_Employee UNION select FIdCardNumber,FName,FAge from T_TempEmployee

基本原则:每个结果集必须有相同的烈数;每个结果集的列必须类型相容。

 

(2)添加常量列:

select FNumber,FName,FAge,FDepartment from T_Employee UNION select FIdCardNumber,FName,FAge,'临时工,无部门' from T_TempEmployee

(3)Union all

Select FName from T_Employee Union select FName from T_TempEmployee

*Union合并两个查询结果集,并且将其中完全重复的数据行合并为一条

Select FName from T_Employee Union all select FName from T_TempEmployee

*Union all 合并两个结果集,完全展示所有数据

(4)Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并并重复行,那么就用Union all

(5)去除重复项必须几个列和另外几个列都相同才会合并。

(6)案例:要求查询员工的最低年龄和最高年龄,临时工和正式员工要分别查询

select '正式员工最高工资' as 员工介绍,Max(FAge) as 年龄 from T_Employee

Union all

select '正式员工最低工资',Min(FAge) from T_Employee

Union all

select '非正式员工最高工资',Max(FAge) from T_TempEmployee

Union all

select '非正式员工最高工资',Min(FAge) from T_TempEmployee

(7)案例:查询每位员工的信息,包括工号、工资,并且在最后一行加上所有员工工资合计。

select FNumber '工号',FSalary '工资' from T_Employee UNION all select '工资总额',SUM(FSalary) from T_Employee

16.数字函数(*

(1)ABS():求绝对值

(2)CEILING:舍入到最大整数。3.33将被舍入为42.89将被舍入为3-3.61将被舍入-3Ceiling-天花板。

(3)FLOOR():舍入最小整数。3.33将舍入为32.89将被舍入为2-3.61将被舍入为-4Floor-地板。

(4)Round():四舍五入。舍入到“里半径最近的数”。Round-半径。Round(3.1425,2)

ROUND(number, num_digits)

number 必需。要四舍五入的数字。

num_digits 必需。位数,按此位数对 number 参数进行四舍五入。

例子:Round(3.1425,2) 显示为 3.1400

17.字符串函数(*) 

(1)LEN():计算字符串长度

(2)LOWER()UPPER():转小写、大写

(3)LTRIM():字符串左侧的空格去掉

(4)RTRIM():字符串右侧的空格去掉

LTRIM(RTRIM(‘     bb     ’))

(5)SUBSTRING(string,start_position,length)

参数string为主字符串,start_position为子字符串在主字符串中的起始位置,length为 

Select SUBSTRING(‘abcdef111’,2,3)

(6)DATALENGTH():计算字节长度

18.LEN()DATALENGTH()那一种不能计算text类型的数据长度?

答:LEN()不能计算text的长度,因为text保存的是指针,text保存的是字节数据,所以不能用LEN

19.日期函数

(1)GETDATE():取得当前日期时间。

(2)DATEADD(datepart, number, date),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY,3,date)为计算日期date3天后的日期,而DATEADD(MONTH,-8,date)为计算日期date8个月前的日期。

(3)DATEDIFF(datepart, startdate, enddate):计算两个日期之间的差额。datepart为计量单位,可取值参考DateAdd

(4)DATEPART(datepart, date):返回一个日期的特定部分

(5)如何统计不同年龄的员工个数?

答:select DateDiff(year,FInDate,getdate()), count(*) from T_Employee group by DateDiff(year,FInDate,getdate())

(6)如何统计员工入职年份个数:

答:select DatePart(year,FInDate),count(*) from T_Employee group by DatePart(year,FInDate)

(7)数据类型为datetime时,如果有默认值,不允许为空就自动添加默认值,允许为空则为NULL

20.类型转换函数

(1)CAST( expression as data_type)

expression为要转换的变量

data_type 为要转换的数据类型

(2)CONVERT(data_type, expression)

expression为要转换的变量

data_type 为要转换的数据类型

(3)Right(string, length)

string为要转换的变量,为string类型

length为从右边截取字符串的个数

(4)Left(string,length)

string为要转换的变量,为string类型

length为从左边截取字符串的个数

(5)select FIdCardNumber,RIGHT(FIdCardNumber,3) as 后三位,CAST(RIGHT(FIdCardNumber,3) as Integer) as 后三位整数形式,CAST(RIGHT(FIdCardNumber,3) as Integer)+as 后三位整数形式加,CAST(RIGHT(FIdCardNumber,3) as Integer)/as 后三位整数形式除 from T_TempEmployee

21.空值处理

(1)ISNULL(expression,value);

如果expression不为空则返回expression,否则返回value

select ISNULL(Fname,'我是空') from T_Employee

22.CASE函数用法1

(1)单值判断,相当于switch case

(2)CASE expression

        WHEN value1 THEN returnvalue1

        WHEN value2 THEN returnvalue2

        WHEN value3 THEN returnvalue3

       ELSE defaluetreturnvalue

END

(3)例子

select FName,(case FName when 'TDS' then '部门经理'

when 'CCC' then 'CEO' 

when 'TOM' then '销售经理' 

else '普通员工' end) as '职位'

from T_Employee

23.CASE函数用法2

(1)相当于if...else...else...

(2)

CASE

     WHEN condition1 THEN returnvalue1

     WHEN vondition2 THEN reutrnvalue2

     WHEN condition3 THEN returnvalue3

     ELSE defaultreturnvalue

END

(3)例子

Select FName,FAge,

(

CASE

  when FAge>28 then '老人'

  when FAge=28 then '年轻人'

  when FAge<28 then '小孩'

END

) as '年龄段' from T_Employee

(4)案例

--查询员工表,显示员工姓名/年龄/工资级别(-5k:初级;-8k:小初级;-10k:中级;k以上:高级)

Select FName,FSalary,

(

CASE

  when FSalary>=1000 AND FSalary <5000 then '初级'

  when FSalary>=5000 AND FSalary <8000 then '小初级'

  when FSalary>=8000 AND FSalary <10000 then '中级'

  when FSalary>=10000 then '高级'

END

) as '工资段' from T_Employee

(5)练习1

--表中ABC三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列。

select 

(

  case 

    when A>B then A

    else B

  end

),

(

  case 

    when B>C then B

    else C

  end

) from Abc

(6)练习2

单号 金额

Rk1  10

Rk2  20

Rk3  -30

Rk4  -10

将上面的表输出为如下的格式

单号 收入 支出

Rk1  10    0

Rk2  20    0

Rk3  0    30

Rk4  0    10

select Tid,(case when Tmoney >= 0 then Tmoney else 0 end),

(case when Tmoney <= 0 then ABS(Tmoney) else 0 end) from T_lianxi2

24.索引Index

(1)全表扫描:对数据进行检索(select)效率最差的全表扫描,就是一条条的找。

(2)如果没有目录,查汉字字典就要一页页的翻,而有了目录至要查询目录即可。为了提高检索的速度,可以为经常进行检索的列添加索引,相当于创建目录。

(3)创建索引的方式,在表设计器中点击右键,选择“索引/键”——添加——在列中选择索引包含的列。

(4)使用索引能提高查询效率,但是索引也是占据空间的,而且添加、更新、删除数据的时候也需要同步更新索引,因此会降低InsertUpdateDelete的速度。只在经常检索的字段上(where)创建索引。

(5)(*)即使创建了索引,然后有可能全表扫描,比如like、函数、类型转换等。

25.表连接Join

(1)客户表(T_Cusomers)和订单表(T_Orders)两个表,客户表字段为:IdNameAge,订单表字段为IdBillNoCustomerId,订单表通过CustomerId关联客户表。

(2)select o.BillNo,c.Name,c.Age from T_Orders as o JOIN T_Cusomers as c on o.CustomerId = c.Id

(3)Join是和哪个表连接,on后是连接的关系是什么(多表)

答:Join是前表和后表连接,on后关系是符合关系的行连接在一起。

(4)要求显示所有年龄大于15岁的顾客购买的订单号、客户姓名、客户年龄?

答:select o.BillNo,c.Name,c.Age from T_Orders as o JOIN T_Cusomers as c on o.CustomerId = c.Id where c.Age > 15

(5)要求显示年龄大于平均年龄的顾客购买的订单?

答:select o.BillNo,c.Name,c.Age from T_Orders as o JOIN T_Cusomers as c on o.CustomerId = c.Id AND c.Age > (select AVG(Age) from T_Cusomers)

(6)(*Inner JoinLeft JoinRight JoinCross Join 详细用法见《SQL联合查询中的关键语法.doc》

(7)Inner Join on简写为Join onLeft Outer Join on简写为Left Join onRight Outer Join on简写为Right Outer Join on

三、RDLC报表

1.介绍

(1)全称Report Definition Language 报表定义语言,C达代表Client-side processing客户端边处理

(2)RDLC文件其实就是一个XML文件,有很多结点和元素

(3)ReportViewerRDLC的浏览器,需要注意的是它的数据必须是数据库、或对象。

2.原理

 

3.为什么会提示没有获取数据源?

答:因为RDLC报表的数据输入区没有绑定数据,只设置了页眉页脚,ReportViewer没有生成下面的三个数据源控件,所以没法获取数据源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值