zoukankan      html  css  js  c++  java
  • SQL相关

    一、视图

    视图:从一个或几个基本表(或视图)导出的表,是要给虚表。数据库中只存放视图的定义,不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也随之改变。

    建立视图:CREATE VIEW <视图名>(列名,列名) AS <子查询>  【子查询不允许有ORDER BY和DISTINCT】

    删除视图:DROP VIEW <视图名> [CASCADE]  【如果该视图上还导出了其他视图,则CASCADE会将该视图和由它导出的所有视图一起删除】

    视图的作用:

    1)简化用户的操作

    2)使用户能以多种角度看待同一数据

    3)对重构数据库提供了一定程度的逻辑独立性

    4)能对机密数据提供安全保护

    5)更清晰的表达查询

    二、聚集函数

    1)COUNT(*)  统计元组个数

    2)COUNT(<列名>)  统计一列中值的个数

    3)SUM(<列名>)  计算一列值的总和(数值型)

    4)AVG(<列名>)  计算一列值的平均值(数值型)

    5)MAX(<列名>)  求一列值中的最大值

    6)MIN(<列名>)  求一列值中的最小值

    注意:在聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值。WHERE子句中是不能用聚集函数作为条件表达式的

    三、GROUP BY子句

    将查询结果按某一列或多列的值分组,值相等的为一组。分组后聚集函数将作用于每一个组,即每一个组都有一个函数值。

    例1:求各个课程号及响应的选课人数

    SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno

    例2:查询选修了3门以上课程的学生学号

    SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3

    WHERE与HAVING区别:作用对象不同,WHERE作用于基本表或视图,从中选择满足条件的元组;HAVING作用于组,从中选择满足条件的组

    例3:查询三门课程成绩都大于80的学生姓名

    select S.name form Student S group by S.name having min(S.score)>=80

    或者select distinct A.name from Student A where A.name not in(select distinct S.name from Student S where S.score < 80)

    例4:一个表只有一列name,有重复的name,求出前十个name数最大的name

    select distinct name, count(name) a from user group by name order by a desc limit 10

    四、内外连接

    1.内连接(inner join):只显示符合连接条件的记录。

    2.左外连接(left join或left outer join):显示左表的全部记录,在右表找不到匹配的用null补齐。

    3.右外连接(right join或right outer join):显示右表的全部记录,在左表找不到匹配的用null补齐。

    4.全外连接(full join或full outer join):除了显示符合连接条件的记录外,在2个表中的其他记录也显示出来。

    ps:内连接效率比左外连接要好。在解析阶段,先进行内连接,再在内连接结果集的基础上加上左外连接的结果集;在编译优化阶段,如果左连接结果集和内连接一致,则左连接会转换成内连接。

    求交集:

    select * from A inner join B using(c1, c2, c3)等同于select * from A inner join B on A.c1=B.c1 and A.c2=B.c2 and A.c3=B.c3

    求差集:

    select * from A left join B using(c1, c2, c3) (如果A中有数据B中没有,比如C1中有,则应加上where B.c1 is null)

    求出在A中不在B中的数据。

    求并集:

    用union。

    DROP, TRUNCATE, DELETE的区别

  • 相关阅读:
    PHP无限极分类生成树方法
    如何用c#本地代码实现与Webbrowser中的JavaScript交互
    在sqlite中,如何删除字段? how to drop a column in sqlite
    如何在centos下配置redis开机自启动
    WinForm中的图表控件Chart
    XPath高级用法(冰山一角)
    windows下MySQL的安装(非安装包)
    WinFrom下Webbrowser加载自定义页面的技巧
    .net下使用最小堆实现TopN算法
    .net程序中http请求的超时配置
  • 原文地址:https://www.cnblogs.com/cing/p/9261838.html
Copyright © 2011-2022 走看看