[笔记]MySQL学习(1)- 检索、排序、过滤、分组

检索数据
    限制结果 
        limit 5 返回不多于5行
        limit 5, 5 从行5开始的5行
        
排序检索
    ORDER BY 列 (可以是检索列或非检索列)
    ORDER BY 列1 DESC,列2 DESC,列3 
    DESC 降序 (如果想对多个列降序排序,必须每个列指定DESC)
    ASC 升序
    
过滤数据
    =、!=、BETWEEN  AND
    IS NULL
    mysql在执行匹配时,默认不区分大小写
    AND、OR、IN(value1,value2)、NOT IN
    通配符:
        LIKE 
            % 任何字符出现任意次数,搜索区分大小写
            _ 匹配单个字符
        花费之间更长
    正则表达式:
        RGEXP '...'
        RGEXP '1000|2000'
        RGEXP '[123]TON'  (OR)
        RGEXP '[1-3]TON'  (范围)
        特使字符前加\\   包括. [ ] | -
        [:alnum:] [a-zA-Z0-9]任意字母和数字
        [:alpha:] 任意字母
        * 0个或多个
        + 1个或多个
        
汇总数据
    AVG COUNT MAX MIN SUM 某列    (忽略NULL的行)

分组
    1. GROUP BY 可以包含任意数目的列
    2. GROUP BY 子句中列出的每个列都必须是检索列或者有效的表达式(但不能是聚集函数)
    3. 如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能用别名
    4. 除聚集语句外,select中的每个列都必须在group by子句中列出
    5. group by子句必须出现在where子句之后,order by子句之前
    6. 过滤分组:having,在分组后进行过滤 例如 having count(*) > 2

子查询
    1. 子查询总是从内向外处理
    2. 列必须匹配,在where子句中使用子查询,应该保证select语句具有与where子句中相同数目的列
       通常子查询将返回单个列,并且与单个列匹配。
    3. 利用子查询进行过滤, 例子:
        orderitems: order_num, prod_id, cust_id
        customers: cust_id, cust_name, cust_contact, cust_state
        查询包含物品TNT2订单的所有客户的客户信息
        SELECT cust_name, cust_contact
        FROM customers
        WHERE cust_id IN (SELECT cust_id
                          FROM orders
                          WHERE order_num IN (SELECT order_num
                                              FROM orderitems
                                              WHERE prod_id='TNT2')));
            
    4. 子查询作为计算字段
        查询customers中每个客户的订单总数
        SELECT cust_name, cust_state, (SELECT COUNT(*) 
                                        FROM orders
                                        WHERE orders.cust_id = customers.cust_id) AS orders
        FROM customers
        ORDER BY cust_name;
    
联结表
    用来检索出存储在多个表中的信息
    关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系)互相关联。
    vendors 供应商信息 vend_id vend_name 
    products 产品信息 prod_id prod_name prod_price vend_id
    内部联结 等值联结
        SELECT vend_name, prod_name, prod_price
        FROM vendors INNER JOIN products
        ON vendors.vend_id = products.vend_id;
        
    使用连接查询包含物品TNT2订单的所有客户的客户信息
        SELECT cust_name, cust_contact
        FROM customers, orders, orderitems
        WHERE customers.cust_id = orders.cust_id
            AND orderitems.order_num = orders.order_num
            AND prod_id = 'TNT2';

你可能感兴趣的:(MySQL)