• 第九章 数据查询基础


    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), '') )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • 相关阅读:
    Python学习之旅—生成器对象的send方法详解
    对集合多列进行求和方法的选择
    23种设计模式
    这一天,我真正的体会到。。。
    火狐浏览器导出EXCEL 表格,文件名乱码问题
    K-fold Train Version3
    K-fold Train Version2
    K-fold Train
    Confusion matrix
    Kaggle Solutions
  • 原文地址:https://www.cnblogs.com/unique1/p/12707236.html
Copyright © 2020-2023  润新知