1、 通配符
    SELECT

    FROM products;

    2、 DISTINCT 筛选非重复项目
    SELECT DISTINCT pro_id
    FROM products;

    3、 LIMIT 限制返回行数
    SELECT pro_id
    FROM products
    LIMIT 5;

    SELECT pro_id
    FROM products
    LIMIT 3,5;

    //返回第4行起的5行
    // 行0 检索出来的第一行为行0 而非行1
    //另一种写法
    SELECT pro_id
    FROM products
    LIMIT 5 OFFSET 3;

    4、ORDER BY
    SELECT pro_name
    FROM products
    ORDER BY pro_name;
    //对单个结果排序

    SELECT pro_name,pro_id,pro_price
    FROM products
    ORDER BY pro_price,pro_name;
    //筛选多列,并按照先规则1,再规则2排序

    DESC/ASC
    SELECT pro_id,pro_price
    FROM products
    ORDER BY pro_id DESC,pro_price;
    //倒序和正序

    SELECT pro_price
    FROM products
    ORDER BY pro_price DESC
    LIMIT 1;
    //综合使用,找到谷值和峰值
    //LIMIT ORDER 需要位于FROM后

    5、WHERE
    SELECT pro_name,pro_price
    FROM products
    WHERE pro_price = 2.5;
    //ORDER BY 需放在WHERE 之后
    //= 等于 、<> 不等于、!=不等于、< 小于、<= 小于等于、BETWEEN 介于(包含起终值)

    WHERE pro_name= ‘kitty’;
    // 不区分大小写 kitty和Kitty
    // ‘’单引号用来限定字符串

    WHERE pro_price BETWEEN 5 AND 10;
    //意思为[5,10] 之间

    WHERE pro_price IS NULL;
    //空值
    //在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤 或不匹配过滤时不返回它们。

    6、WHERE 操作符
    AND:
    SELECT pro_id,pro_price,pro_name
    FROM products
    WHERE ven_id = 1003 AND pro_price<10;
    //且的筛选条件,支持添加多个AND

    OR
    SELECT pro_id,pro_price,pro_name
    FROM products
    WHERE ven_id = 1002 OR ven_id = 1003;
    //或的筛选条件,满足任一条件即返回

    ()括号的使用
    //OR与AN优先处理AND操作符
    WHERE ven_id = 1002 OR ven_id = 1003 AND pro_price<10;
    //返回供应商=1002 的全量与供应商=1003且价格<10 的并集

    WHERE (ven_id =1002 OR ven_id = 1003) AND pro_price<10;
    //返回供应商=1002且价格<10与供应商=1003且价格<10 的并集

    IN
    WHERE ven_id IN (1002,1003)
    //都好分隔,结果与OR一致
    //执行比 OR快

    NOT
    WHERE ven_id NOT IN(1002,1003)
    //否定,支持对IN、BETWEEN、EXISTS取反

    7、通配符过滤
    LIKE

    % 任意字符出现的任意次数
    SELECT pro_id,pro_name
    FROM products
    WHERE pro_name LIKE ‘jet%’;
    //jet之后的任意字符;如果区分大小写,jet 和Jetpack 就无法匹配
    // 可在任意位置使用’%jet%’
    //如果词后有空格,’%jet’无法匹配,可以使用’%jet%’
    //无法匹配到NULL

    单一字符匹配
    WHERE pro_name LIKE ‘_jet’
    WHERE pro_name LIKE ‘%jet’
    //‘
    jet’匹配不到.5jet,’%jet’可以

    //不要过度使用,搜索时长长
    //不要置于搜索开始处

    8、正则表达式
    //匹配文本

    REGEXP

    SELET pro_name
    FROM products
    WHERE pro_name REGEXP ‘1000’
    ORDER BY pro_name;
    //这里等同于LIKE

    WHERE pro_name REGEXP ‘.000’
    // . 表示匹配任意一个字符,可以返回2000、1000
    //LIKE匹配整个列。如果被匹配的文本在列值 中出现,LIKE将不会找到它,相应的行也不被返回(除非使用 通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在 列值中出现,REGEXP将会找到它,相应的行将被返回。这是一 个非常重要的差别。
    //BINARY区分大小写

    OR
    WHERE pro_name REGEXP ‘100|200|300’

    //匹配特定字符
    WHERE pro_name REGEXP ‘[123]Ton’

    返回:
    1 ton anvil
    2 ton anvil

    //为[1|2|3]ton的缩写
    //注意 REGEXP ‘1|2|3 ton’ 匹配的是1或2或3ton,必须放在把字符 | 括在一个集合中,否则将应用于整个串
    //否定字符合集 [^123]

    匹配范围
    [0-9]等同于[0123456789]
    [a-z]

    WHERE pro_name REGEXP ‘[1-5] ton’

    返回:
    .5 ton
    1 ton
    2 ton
    //满足匹配 5 ton ,所以返回. 5 ton

    特殊字符匹配\
    WHERE pro_name REGEXP ‘\. ‘
    //匹配反斜杠为“///”

    匹配字符类
    [:alnum:] 任意字母和数字(同[a-zA-Z0-9])
    [:alpha:] 任意字符(同[a-zA-Z])
    [:blank:] 空格和制表(同[\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与[:print:]相同,但不包括空格
    [:lower:] 任意小写字母(同[a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
    [:space:] 包括空格在内的任意空白字符(同[\f\n\r\t\v])
    [:upper:] 任意大写字母(同[A-Z])
    [:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

    匹配多个实例
    * 0个或多个匹配
    + 1个或多个匹配(等于{1,})
    ? 0个或1个匹配(等于{0,1})
    {n} 指定数目的匹配
    {n,} 不少于指定数目的匹配
    {n,m} 匹配数目的范围(m不超过255)

    WHERE pro_name REGEXP ‘\([0-9] sticks?\)’
    // “\(“ 用来匹配(,[0-9]匹配数0到9的数字,sticks?用来匹配stick或sticks,?号前的任何字符可以0次或1次出现。

    WHERE pro_name REGEXP ‘[[:digit]]{4}’
    //[:digit:]用来匹配任意数字,{4}要求前面字符的出现次数
    ——————————————-Page 59—————————————————-

    —————————————-page 63——————-

    9、Concat
    //多数DBMS使用+或者||实现拼接,Mysql使用Concat实现拼接,各个串之间使用逗号分隔
    SELECT Concat(ven_id,’(‘,ven_country,’)’)
    FROM vendors
    ORDER BY ven_name;

    //去掉左右空格,使用RTrim或者LTrim、Trim

    10、AS
    赋予列名字,新增字段名
    SELECT Concat(ven_id,’(‘,ven_country,’)’) AS ven_title

    11、算术计算
    // + - * /

    SELECT pro_id,quantity,quantity*item_price AS expanded_price
    FROM orderitems
    WHERE order_num=2005;

    12、函数

    Upper 、Lower//使其大、小写
    Length//长度
    Locate//串的子串
    Left、Right//返回左边右边字符串
    Soundex//发音相似
    WHERE Soundex(cust_contact) = Soundex(‘Y Lie’)
    返回:
    Y Lee

    13、日期和时间
    AddDate()//增加日期 Addtime//增加时间 CurDate//返回当前日期 CurTime//返回当前时间
    Date()//日期时间的日期部分 DateDiff()//计算两个日期之差 Date_Add()//日期运算函数
    Date_Format()//格式化的日期或时间串

    //日期格式必须为yyyy-mm-dd

    检索日期
    WHERE Date(order_date)=’2005-09-01’;//因为如果数据中带有时分秒,直接检索date=’2005-09-01’匹配失败

    检索区间
    WHERE Date(order_date) BETWEEN ‘2005-09-01’ AND ‘2005-09-30’;

    检索月份
    WHERE Year(order_date) =2005 AND Month(order_date)=9;

    14、数值处理函数
    Abs绝对值、Exp 指数值 Mod 余数 其他三角函数

    15、聚集函数
    AVG() 忽略NULL
    COUNT()计算行数 COUNT(*)计算包括空值和非空值 COUNT(column)计算具体值,忽略NULL
    MAX() 如果用于文本数据,返回最后一行,忽略NULL
    MIN() 如果用于文本,返回最开始的行,忽略NULL
    SUM() 忽略NULL

    DISTINCT 只包含不同的值
    SELECT AVG(DISTINCT pro_price) AS avg_price
    FROM products
    WHERE ven_id =1003;
    //统计商品价格不同的产品的均值

    // DISTINCT 必须使用列名,不允许使用COUNT(DISTINCT)

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