sql知识点汇总

函数

日期函数

SQL Server

  • Getdate():返回当前日期时间,无参数
  • Dateadd():返回加上某个数值后的日期时间,参数依次为:单位(day,month等);数值;日期列

    例子:

    SELECT sname,dateadd(day,1000,sbdate) FROM ustudent
    
  • Datediff():返回第二个日期与第一个日期的差值,参数依次为:单位(day,month等);日期1;日期2
  • Year():返回日期的年份,参数为日期
  • Month():返回日期的月份,参数为日期
  • Day():返回日期的天,参数为日期

MySQL

  • Now():返回当前日期时间,无参数
  • Date_add():

    例子:

    SELECT sname,date_add(now(),interval 1000 day) FROM ustudent
    
  • Datediff(date1,date2):两个日期相减 date1 - date2,返回天数

字符函数

  • Left()/ Right() :对指定值从左/右边开始截取指定个数的字符
  • Substring():对指定值从指定位置开始截取指定个数的字符,注意开始位置是1
  • Len():指定列中除去尾部的空格后的字符数 SQL Server
  • Length() MySQL
  • Lower()/Upper():大小字母转换
  • Rtrim()/Ltrim():删除指定列中尾部/首部的空格
  • Str():把数值转换成字串。如果不指定转换后的长度,默认为10。
  • Concat():把多个字串连成一个

数据转换函数

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值

  • Convert

    MySQL    

    SELECT sid,cid,convert(score1*0.33+score2*0.67,decimal(6,2)) FROM uSC
    
  • CAST

    MySQL    

    SELECT sid,cid,CAST(score1*0.33+score2*0.67 AS decimal(6,2)) FROM uSC
    

运算函数

  • 统计计行数
    • COUNT([DISTINCT] *):计算行数
    • COUNT([DISTINCT] <列名>):计算指定列上不为NULL的行数
  • 在指定列上计算总和 SUM([DISTINCT] <列名>)
  • 在指定列上计算平均值 AVG([DISTINCT] <列名>
  • 求最大值 MAX([DISTINCT] <列名>)
  • 求最小值 MIN([DISTINCT] <列名>)

    统计01班级一周的总课时    SQL Server为Len()

    SELECT SUM(length(timeseg)) FROM ujobtable WHERE gid='1'
    

    单表查询

  • 消除重复的行

    SELECT DISTINCT room,gid FROM uJobTable
    
  • 普通条件表达式
    • 关系运算符:=, >, <, >=, <=, != 或 <>
    • 逻辑运算符:
      • NOT 关系表达式结果取反
      • AND 连接两个关系表达式,表示并列条件
      • OR 连接两个关系表达式,表示或者条件
  • 范围运算表达式
    • 表达式 BETWEEN … AND …
    • 表达式 NOT BETWEEN … AND …
  • 集合条件表达式

    • 表达式 IN (<值表>),表达式 NOT IN (<值表>) 下面两个语句相同

      • 表达式可以单个列,也可以是由列组成的表达式;<值表>可以是一组由逗号分隔的常量或者是单列的SELECT语句

        查询不及格同学的学号、姓名

        select sid,sname from ustudent where sid in (select sid from usc where score1<60)

      • 如果表达式的值包含在<值表>中,则表达式中列值所在的行符合选择条件。

      • IN关系表达式等价于多个OR连接形成的条件表达式

        查询01、02和05班学生的姓名和性别

        SELECT Sname,Ssexy FROM uStudent WHERE gid= ‘01’ or gid= ‘02’ or gid= ‘05’

        SELECT Sname,Ssexy FROM uStudent WHERE gid IN (‘01’,’02’,’05’)

        查询计算机科学与技术系同学的学号与姓名

        select sid,sname from ustudent where gid in (select gid from ugrade where did in (select did from udept where dname=’计算机科学与技术系’))

  • 字符串匹配

    • 模糊查找

      表达式 LIKE ‘<匹配串>’ 或者 表达式 NOT LIKE ‘<匹配串>’

    • 通配符

      • % :代表任意多个(可以为0)字符

        例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串.

      • _ :代表任意单个字符

        例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串

        查询所有姓刘学生的姓名、学号和性别

        SELECT Sname,sid,Ssex FROM uStudent WHERE Sname LIKE ‘刘%’

        查询姓”欧阳”且全名为三个汉字的学生的姓名

        SELECT Sname FROM uStudent WHERE Sname LIKE ‘欧阳_’

  • 涉及空值的查询

    • 使用谓词 IS NULL 或 IS NOT NULL

      查所有有成绩的学生学号和课程号

      SELECT Sid,Cid FROM  uSC WHERE score IS NOT NULL
      
  • 对查询结果排序

    • 使用ORDER BY子句 可以按一个或多个属性列排序
      升序:ASC,降序:DESC缺省值为升序
  • 使用GROUP BY子句对查询结果分组

    • 分组的目的
      • 未对查询结果分组,集函数将作用于整个查询结果
        • 对查询结果分组后,集函数将分别作用于每个组
    • 分组方法 按指定的一列或多列值分组,值相等的为一组

      求每个人平均分

      SELECT sid,AVG(score1) FROM uSC GROUP BY sid
      

      求每个班级的人数 将每一个gid相同的分为一组,计算各自数量

      SELECT gid,COUNT(*) FROM uStudent GROUP BY gid
      

      求’CS‘系每个班的学生的平均年龄

      分析:判断学生平均年龄和CS系关系到了2张表,因此需要uStudent和uGrade表,这两张表的联系在于uStudent.gid= uGrade.gid

      SELECT gid, AVG(YEAR(now())-YEAR(sbdate)) FROM uStudent WHERE gid IN (SELECT gid FROM uGrade WHERE did='CS') GROUP BY gid
      
  • HAVING

赏个🍗吧
0%