第九章 数据查询基础

1.什么是查询?

      客户端程序   查询请求到  SQL Server  把查询结果集  交到临时表

       查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不正真存储,每次执行查询只是从数据表中提取数据,并按照表的形式显示出来。

2.查询语法

    select  列名

    from   表名

    where  查询条件

    order by  列名 (升序ASC(默认),DESC降序) 

  eg:select  Name  from   Student

          where  sex='女'

         order by  Score          

3.查询全部的列和行

     select * from  Student    (* 尽量少使用,减低查询效率)

4.查询部分

   select Name,sex  from  Student

5.查询部分行和列,带条件

    select sex,Email  from Student  where  StudentName='李四'

6.使用AS命令

    (1)select StudentName  as  学生姓名,sex   as  性别   from  Student

    (2)select  StudentName+'--'+sex as 姓名和性别 from  Student

7.使用等于命令

   select 姓名和性别=StudentName+'--'+sex from  Student

注意:

             (1)+连接的数据类型必须兼容

             (2)如果+连接字符数据,结果为字符串数据的连接

               (3) 如果+连接数值型数据,结果为数值的和

8.查询空行

   select name  from  Student  where  Emai   is  null

9.查询不为空

   select  SubjectName from  Subject  where  ClassHour  is  null  or  ClassHour !=''

10.使用常量列

     select  姓名=name,'张三' as  学生姓名  from  Student

11.限制行数

             限制固定函数

                    select  Top 5  StudentName,sex  from  Student

             按百分数返回

                     select Top 5 percent   StudentName,sex  from  Student   where  sex='女'(百分数只能在0—100之间)

12.查询单列排序

          升序排列

                    select StudentNo as  学生编号,(StudentResult*0.5)as 综合成绩 

                    order by  StudentResult      (默认不写就是升序) 

          降序排列

                    select StudentNo as  学生编号,(StudentResult*0.5)as 综合成绩 

                    order by  StudentResult   desc

13.查询多列排序(用逗号隔开)

          select   StudentId as  学生编号,score as 成绩

          from  Scores

          order  by  Score,StudentId(或者是desc降序)

注意:

           多行排序,先按照第一个进行升序/降序排序

14.字符串函数

        (1)charindex:寻找字符串在下一个指定字符串的起始位置(sql起始位置从1开始)找不到,返回0

                 eg:select  charindex('JBSN','My jbsn',1)

                解释:('要查询的字符串','被查询的字符串',从被查询字符串哪里开始查找)

                返回:4

        (2)len:字符串长度  

                 eg:select len('SQL  Server课程')

                 返回:12

         (3)upper:转为大写

             eg:select upper('zhangsan')

             返回:ZHANGSAN

         (4)ltrim:清除左边空格

             eg:select  ltrim('   李四')

             返回: 李四

         (5)rtrim:清除右边空格

            eg:select  rtrim('李四    ')

            返回: 李四

         (6)right:从字符串右边返回指定字符

            eg:select  right('买卖提.土尔松',3)

            解释:  3是返回字符串个数

            返回:  土尔松

   

        (7)left:从字符串左边返回指定字符

            eg:select  left('买卖提.土尔松',3)

            解释:  3是返回字符串个数

            返回: 买卖提

        (8)replace:替换字符(只适用于部分字符,而update用于整行替换)

            eg:select   replace('莫乐可切','可','兰')

            解释:('原字符','找到可','替换成兰')

            返回:莫乐兰切

        (9)stuff:在zifuchuanz,删除指定长度字符,在该位置插入新字符

            eg:select  stuff('ABCDEFG',2,3'我的音乐')

            解释:('原字符',从哪里开始删除,插入几个字符,'插入新字符') 

            返回: A我的音乐EFG 

15.日期函数

        (1)getdate:取得当前日期

                 eg:select  getdate()

                返回: 今天的日期

       (2)dateadd:将指定数值添加到指定日期部分后的日期     (mm:月,dd:天/日,yyyy:年)

                eg:select  dateadd(mm,4,'2009-01-01')

                解释:(给谁添加,添加多少,日期)

                返回: 2009-05-01

       (3)datediff:两日期之间的间隔

                eg:select   datediff(mm,'2019.8.18',getdate())

                解释(给谁添加,起始日期,截至日期)

                返回8

        (4)datename:返回星期几的字符串

                 eg:select  detername (dw,'2000-01-01')

                  解释(weekday,日期)

                  返回星期六

           (5) datepart:日期中指定日期部分整数

                 eg:select  datepart(day,‘2000-01-15’)

                  解释(要拿的值)

                  返回15

16.数学函数

           (1)rand:从0~1随机数 fioat值

                    eg:select  rand()

                    返回0.792164521345845

           (2)abs:数值绝对值

                    eg:select  abs(-43)

                    返回43

           (3)ceiling:取大于或等于指定数值  最小整数

                    eg:select  ceiling(43,5)

                    返回44

            (4)floor:取小于或等于指定表达  最大整数

                     eg:select  floor(43,5)

                     返回43

             (5)power:数值的幂

                      eg:select  power(5,2)

                      解释(从几开始,几的几次方)

                      返回25

             (6)round:对数值四舍五入

                      eg:select  round(43,543,1)

                      解释(对谁进行,小数点后几位)

                      返回43,500

              (7)sign:对正数返回+1,负数-1,对0返回0

                       eg:select  sign(-43)

                       返回-1

              (8)sqrt:平方根

                       eg:select  sqrt(9)

                       返回3

17.系统函数

              (1)convert:转换数据类型

                       eg:select  convert(varchar(5),12345)

                       解释(要转换,被转换)

                       返回字符串12345

              (2)select  cast(12345  as  varchar(5))

              (3)current-user:返回当前用户名称

              (4)datalength:返回字节数

                       eg:select  datalength(‘中国a联盟’)

                       解释(一个汉字=2字节)

                       返回9

              (5)host-name:当前用户所登录计算机名字

              (6)system-user:当前所登录的用户名称

              (7)user-name:从给定用户id返回用户名

                       eg:select  user-name(1)

                       解释(返回数据库,如没有是null值)

                       返回‘‘dbo’’         

18. 案例一:

            把卡里面的'o'改为'0','i'改为'1'     

            数据库表名为:Card 

            密码列名:PassWord

    分析:用replace方法替换就ok了

      做法1:

          update  Student   set   PassWord=replace(PassWord,'o','0')

          update  Student   set   PassWord=replace(PassWord,'i','1')

     做法2:

          update  Student  set  PassWord=replace(repalce(Password,'o','0' ),'i','1')

19.案例二:

     在数据库表中有以下字符数据,

    如 13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2

   现在希望通过T-SQL语句进行排序,并且首先要按照前半部分的数字进行排序,然后再按

   照后半部分的数字进行排序,输出要排成这样 13-1、13-2、13-3、13-10、13-11、13-15、

   13-18、13-100、13-108、14-1、14-2

   数据库表名:SellRecord

   列名:ListNumber

     分析1:

           select   ListNumber   

           from   SellRecord

           order  by 前半部分,后半部分

     前半部分:

               charindex('-',ListNumber)-1   先找到'-'前面的数字

               left(ListNumber,charindex('-',ListNumber)-1)   取到左边的数字

              convert (int,left(ListNumber,charindex('-',ListNumber)-1))  转换为int类型

 后半部分:  

                   charindex('-',ListNumber)   先找到'-'前面的数字 

                   stuff(ListNumber,1,charindex('-',ListNumber), '')                                                                                                                             convert(int, stuff(ListNumber,1,charindex('-',ListNumber), '') )     

      总体:     

           select   ListNumber   

           from   SellRecord

           order  by 

          convert (int,left(ListNumber,charindex('-',ListNumber)-1)),   

         convert(int, stuff(ListNumber,1,charindex('-',ListNumber), '') )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

posted @ 2020-04-15 18:36  拾柒moonpie  阅读(298)  评论(0编辑  收藏  举报