• SQL For MySQL


    2013-4-8

    1.如果需求字符串列值按照数字大小排列,则在语句中加上“-”或“--”。比如:

    有一张商品表,其中有一个商品编号属性,有值为:1002,2003,1003等等,如果要求按照:1002,1003,2003这样排序,则SQL语句如下:

    select * from merchandise order by '-'+merNo;

    select * from merchandise order by '--'+merNo;

    2.having语句

    having语句是为了解决where关键字和合计函数无法一起使用而生的

    select m.staffID,m.date,sum(m.times) as totalTimes
    from manhour m,work_calendar wc
    where m.date between startDate and endDate and m.date = wc.date and wc.able=1
    group by m.staffID ,m.date
    having sum(m.times) < 8 or sum(m.times)>24;

    需要注意的是:

    当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
    执行where子句查找符合条件的数据;
    使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。
    having子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle、MySQL
    having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。
    having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。

    3.join语句

    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行  

      //2013-05-15 14:49:21:此处终于明白意思了:具体比如外键连接时,如果你用普通的连接或者不用连接,则会遗漏右表中外键连接左表,而此时右表列值为null的行。

      //而关于多表连接以及表连接自身表:

      例子:  

    1 select * from temp t left join value v on t.id = v.id
    2 left join temp t2 on t.id = t2.boss where...
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行

    注:full join在MySQL中并不适用。

    题目:关系模式:User(userId, userName), Article(articleId, userId, title,   content),Vote(articleId, score),User为用户关系,Article为用户发表的文章关系,Vote为文章得票关系,title为文章标题、score为得票数。
    (1)用SQL语言查询所有没发表过文章的用户名;
    (2)用SQL语言查询得票数大于100的所有文章标题,按得票数倒序排列;
    (3)用SQL语言查询出发表文章数大于5,文章平均得票数大于100的用户名,按平均得票数倒序排列;
    (4)设计这些表的主键、外键和索引,并指出上面三个查询所使用的索引。
    (5)当用户数超过1000万,文章数超过1亿时,如何考虑存储及性能的改进和优化?

  • 相关阅读:
    mysql常用语法
    Java虚拟机(JVM)内存区域
    Java基础之this和super关键字用法
    Java基础之instanceof和transient关键字用法
    排序算法之快速排序
    Java基础之final和abstract关键字
    排序算法之归并排序
    Java基础之static关键字的用法
    剑指offer题目系列三(链表相关题目)
    数据结构之栈和队列及其Java实现
  • 原文地址:https://www.cnblogs.com/sevenology/p/3007572.html
Copyright © 2020-2023  润新知