美文网首页
Mysql必知必会笔记——上

Mysql必知必会笔记——上

作者: 丑角的晨歌 | 来源:发表于2018-07-23 20:52 被阅读0次

    第一章 了解SQL

    主键
    primary key, 一列(或一组列),能够唯一区分表中的每个行;绝大多数情况下都应该保证每个表具有一个主键,以便于以后的数据操纵和管理;
    任何列都可以作为主键,只要保证该列每行数值唯一且不为NULL;也可以使用多个列作为主键,此时所有列值的组合必须唯一,但单个列的值可以不唯一。
    建议:不更新、不重用主键列中的值,也不在主键列中使用可能会更改的值。

    第四章 检索数据

    LIMIT子句
    LIMIT 5 限制返回不多于5行
    LIMIT 5,5 第一个数为开始位置,第二个数为行数(注意位置从第0行开始)
    LIMIT 3 OFFSET 4 == LIMIT 4, 3

    第六章 过滤数据

    同时使用ORDER BY与WHERE时,必须让ORDER BY位于WHERE之后;
    BETWEEEN ... AND ...是闭区间;
    检查是否为空用IS NULL;
    NULL在匹配过滤与不匹配过滤都不会被返回;

    第七章 数据过滤

    AND优先级高于OR;
    应该总是用圆括号明确分组,不要过分依赖默认计算次序,即使它是对的;
    IN操作符:select ... from ... where ... in ...

    第八章 用通配符进行过滤

    使用通配符时必须用LIKE操作符;
    搜索是否区分大小写由MySql的配置方式决定;
    %表示任何字符出现任意次数(包括0次),_只匹配单个字符;
    %不能匹配NULL;
    通配符的搜索会耗费更长的时间,不要过度使用通配符,如果其他操作符能达到相同目的,应该使用其他操作符;

    第九章 正则表达式 略

    第十章 创建计算字段

    使用Concat拼接多个字段
    SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors
    使用RTrim函数删除数据右侧多余空格:
    SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') FROM vendors
    算术计算:
    SELECT prod_id, quantity, item_price, quantityitem_price AS expanded_price* FROM orderitems

    可以使用SELECT进行试验,并不一定需要FROM子句:

    SELECT 3*2;
    SELECT Now();
    SELECT Trim('abc ');

    第十一章 数据处理函数

    常用文本处理函数
    Left, Length, Locate, Lower, LTrim, SubString, Soundex
    常用日期时间处理函数
    AddDate, AddTime, CurDate, CurTime, Date, DateDiff, DateFormat, Hour/Minute/Month, Now, Year/Month/Day/DateOfWeek
    常用数值处理函数
    Abs, Cos, Exp, Mod, Pi, Rand, Sin, Sqrt, Tan

    第十二章 汇总数据

    聚集函数

    AVG
    只适用于单个列, 忽略NULL;
    COUNT
    COUNT()统计所有行数目, COUNT(column)忽略NULL;
    MAX, MIN, SUM
    忽略NULL
    与DISTINCT组合使用
    SELECT AVG(DISTINCT prod_price) AS avg_price FROM products
    DISTINCT不能用于COUNT(
    ),必须使用列名
    根据需要,可以包含多个聚集函数

    SELECT COUNT(*) AS num_items,
           MIN(prod_price) AS price_min,
           MAX(prod_price) AS price_max,
           AVG(prod_price) AS price_avg
    FROM products
    

    第十三章 分组数据

    统计每个vend_id下的产品数量
    SELECT vend_id, COUNT(*) AS num_prods
    FROM products GROUP BY vend_id
    GROUP BY可以包含任意数目的列;
    如果在GROUP BY中嵌套了分组,数据将在最后规定的分组上进行汇总;
    GROUP BY中不能包含聚集函数;
    除聚集计算语句外,SELECT中的每个列都必须在GROUP BY中给出;
    所有NULL值将分为一组;

    过滤分组

    SELECT cust_id, COUNT(*) AS orders
    FROM orders
    GROUP BY cust_id
    HAVING COUNT(*) >= 2;
    

    WHERE在分组前进行过滤,HAVING在分组后进行过滤,WHERE排除的行不包含在分组中。

    第十四章 子查询

    利用子查询进行过滤
    示例:
    SELECT cust_id FROM orders WHERE order_num
    IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
    子查询总是从内向外处理。
    虽然子查询一般与IN结合使用,但也可以用于==、<>等;
    子查询并不总是执行这种类型的数据检索的最有效方法;
    作为计算字段使用子查询
    示例:

    SELECT cust_name, 
           cust_state, 
           (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders
    FROM customers
    ORDER BY cust_name
    

    针对customers中的每个cust_id统计在orders表中的行数;
    只要列名可能有多义性,就必须将表名带上。

    相关文章

      网友评论

          本文标题:Mysql必知必会笔记——上

          本文链接:https://www.haomeiwen.com/subject/iwtsmftx.html