zoukankan      html  css  js  c++  java
  • SQL 操作集合

    一、几种 join 的用法

      1、inner join 和 join 一样的

    中间交集

     

      2、left join

     以左边为主,右侧匹配不到全赋为 null

     

      3、right join

    以右边为主,左侧匹配不到全赋为 null

     

       4、full  outer join

    两侧全匹配,任一元组中匹配不到的值全赋为 null

     

    可用灵活使用 null 作为条件查询(需注意不是 ‘=’,是 is 判断)

    SELECT DISTINCT course.*
    FROM course full join score on course.courseno = score.courseno
    WHERE score.courseno is null

       参考:https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html

    二、排序

      默认升序,上面最小。使用 desc 降序

    select top 1 score.*
    from score INNER JOIN course on score.courseno = course.courseno
    where course.cname = '电子技术'
    ORDER BY final desc

    对不同的属性可相应设置值
    ORDER BY studentno DESC , final DESC

      参考:https://www.w3school.com.cn/sql/sql_orderby.asp

    三、like 匹配模式

      where 语句中的一种匹配模式,和 % 通配符搭配使用查询

    SELECT COUNT(DISTINCT score.studentno)
    FROM score join course on score.courseno = course.courseno
    WHERE course.cname like '%软件%'

    四、as 别名使用

      select score.studentno, score.usually*0.4+score.final*0.6 as sco

      要注意 sco 只能在子 select 中使用

    五、substring(str, start, length)字段截取

      搜索某属性的某字段具有某种意义,要单独拿出来作为条件使用(left/right (str, length) 扩展函数)

    select *
    from dbo.student a join dbo.score b on  a.studentno=b.studentno
                       join dbo.course c on b.courseno=c.courseno
    where substring(a.studentno,1,2)='17'   and  c.cname='电子技术'
    order by final

      参考:https://blog.csdn.net/album_gyd/article/details/81365573

    六、聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

      聚合函数优先级比 where 低,比 having 高,所以 where 不能使用而 having 可以使用

    SELECT *
    FROM student
    WHERE student.point > (
        SELECT avg(student.point)
        FROM student
    )
    ORDER BY student.birthday

    七、group by 语句报错

    [Err] 42000 - [SQL Server]选择列表中的列 'score.studentno' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
    SELECT score.*
    FROM score
    GROUP BY score.courseno
    HAVING avg(score.final) < (
        SELECT MIN(score.final)
        FROM score, course
        WHERE score.courseno = course.courseno and course.cname = '机械制图'
    )

    是因为 select 中必须是 group 中的或者是聚合函数

    八、cash语句(可代替 if 语句)

    SELECT SUM(course.credit)
    FROM course join score on course.courseno = score.courseno
    WHERE (
        course.type = '必修' and
        score.final > 70
    ) or (
        course.type = '选修' and
        score.final > 80
    )
    
    SELECT SUM(
        CASE
        WHEN course.type = '必修' and score.final > 70 THEN course.credit
        WHEN course.type = '选修' and score.final > 80 THEN course.credit
        ELSE 0
        END
    )
    FROM course, score 
    WHERE course.courseno = score.courseno

    九、drop 和 truncate 清除表格

     drop table a:连 a 表也直接删除

     truncate table a:只清除数据,保留表

    十、精度 decimal(a,b)

      a:指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38

      b:指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0

    select studentno, cast(AVG(final) as decimal(10,3))
    from dbo.score
    group by studentno
    order by  2 desc

    十一、alter table 对表进行修改,增加或删除

    //增加列
    ALTER TABLE table_name
    ADD column_name datatype
    
    //更改列属性
    ALTER TABLE table_name
    ALTER COLUMN column_name datatype
    
    //删除列
    ALTER TABLE table_name 
    DROP COLUMN column_name

    十二、datediff 日期差

    DATEDIFF ( date-part, start_date, end_date )

     SELECT DISTINCT sfzh
     FROM spb
     WHERE DATEDIFF(day, sprq, qfrq) >= 30

    https://www.w3school.com.cn/sql/func_datediff.asp 

    十三、添加约束

    ALTER TABLE hbb add CHECK(sdf<>mdd)
    每天进步一点点
  • 相关阅读:
    一球从100米高度自由落下, 每次落地后反跳回原高度的一半; 再落下,求它在第10次落地时, 共经过多少米?第10次反弹多高?
    输入某年某月某日,判断这一天是这一年的第几天?
    一、spring——helloWorld
    遍历Map的四种方法
    六、IO流——文件
    五、集合
    在java项目中使用log4j的实例
    Nginx配置文件nginx.conf中文详解(总结)
    Windows7下安装搭建Ngnix教程
    第七课 文件存储
  • 原文地址:https://www.cnblogs.com/smallstars/p/13087261.html
Copyright © 2011-2022 走看看