• 基本mysql语句


    一 select语句

    基本语法  

    select 列名1,列名2             //可以使用完全限定的列名  tables.列名

    form tables

    过滤(where )

    分组(group by 列名1,列名2)    // 分组依据必须是 select的所有列名(统计计算的除外) ,否则可能会出现歧义具体见下

    having  对分组进行过滤 ,  不可使命别名(select里定义的别名) 

    排序(order by)

    limit子句

    1)distinc关键字  

    select distinct A,B,C from tables;    从表中tables 里,查询ABC 三列, distinct 指明 A B C这三列中至少有一列不同时才显示。 

    2)LIMIT

    select A,B,C from tables limit 5;  显示前五行

    select A,B,C from tables limit 5,5; 显示行5开始的五行    计数是从行0开始的

    3)order by 字句, 对索引行进行排序 

    order by A,B  先按A进行排序,再按B进行排序  默认是升序

    order by A desc,B   按A进行降序排列,再按B进行升序排列,  desc 只修饰位于其前面的一列。

    3)where字句

    =   !=  <   <=   >   >=  BETWEEN 指定两个值之间

    select A,B,C from tables 

    where  c between 2 and 10;            //   为赋值列可以这样索引  where c is NULL

    select A,B,C from tables 

    where  A<2  AND  C>10 ;   //    OR 也行       AND 的优先级比OR 高                         A = 1 OR A=2 AND C<5  与    A = 1 OR (B>2 AND C<5)等价

    IN 用来指定条件范围

    select A,B,C from tables 

    where A IN(1002,1003)  //   IN 字句还可以包含其他SELECT语句

    order by A

    4) LIKE 文本匹配  

    A like 's%e'   中间为任意个任意字符            即只匹配出     s....e   这样的行  as.....e匹配不出来,  LIKE 是全量匹配

    A like 's_e'    下划线 表示任意一个字符

    5)正则表达式    REGEXP (正则表达式规则,后续写)            子串匹配

    A  REGEXP   '1000'    列A中包含子串 ‘1000’的所有列      

    1000|2000   

    [123]   1或2或3

    [0-9]   [a-z] 区间或            [:digit:]任意数字同[0-9]            

     [:digit:]{4}    后面的4指明匹配四次, 即任意4位数

    [:digit:]{4,}    不少于4个

    [:digit:]{4,6}   4到6个之间

    ^文本的开始       ^[0-9\.]   在文本的开始处匹配 数字或者.

    $文本的结尾

    [[: 词的开始

    [[:>:]]词的结尾                    

     6) AS 与 concat函数

    concat(A, '(', B,')')    输出列名为   A(B)

    A AS E    给列起个别名E进行显示 输出

    7) 算数计算    (+ - * /)

    select  procid, price, num,  price*num AS total

    form tables;

    where  total>2000;

    order by total;                    输出总价大于2000的 所有产品的 id 单价 数量 和总价信息  并排序

    8)  函数

    文本操作函数

    left()     返回串左边的字符

    length()    串的长度

    lower()   转化为小写

    LTrim()   去掉串左边的空格

    RTrim() 

    Upper()

    select  procid,Upper(procname), price, num,  price*num AS total     //Upper(procname) 商品名字按大写输出

    form tables;

    where  total>2000;

    order by total; 

    日期与时间处理函数   数值处理函数(绝对值,三角函数等)  略了,真多

    9)统计函数

    AVG                         AVG(distinct  pro_price) 

    COUNT        计数

    MAX             返回指定列的最大值(数字或者日期),  如果用于文本列时,  返回正序排列的最后一行(先排序才有意义)

    MIN

    SUM            列值之和

    select AVG(pro_price) AS avg_price          返回特定列的平均价格

    from tables

    where pro_id =2001 ;                       // 返回产品 2001 的平均价格

    select Sum(pro_price*num) AS total          返回采购的产品2001 的总价值

    from tables

    where pro_id =2001 ;  

     10) 分组 group by

    每个供应商可能提供多个产品, 查询每个供应商提供的产品数量

    select ven_id, COUNT(*) AS num_prods  // 分组统计行数

    form tables;

    group by ven_id;

    select 

    select province, countrycode, sum(popu)      // 国家 省份 城市

    from city

    where countrycode = 'CHN'

    group by countycode;   //本意是统计中国各个省份的总人口, 这里却是按国家分组, 只统计出了中国(where的原因)的总人口, 分组不够细致

    11)having 对每个分组单独进行过滤

    select province, countrycode, sum(popu) AS  popu_of_province      // 国家 省份 城市

    from city

    where countrycode = 'CHN'

    group by countycode,province              

    having  sum(popu)>200;           统计中国各个省份的总人口数大于200万的城市

    二 子查询(嵌套)

    使用子查询,应该保证,select语句与where语句 具有相同的列信息,  子查询也可以使用计算字段,统计函数; 注意使用完全限定名

    select cust_name, email   // 客户姓名,联系方式

    from customers   // 客户信息表

    Where  cust_id  IN  (  select cust_id     // cust_id  客户id

                                       from orders                  // 订单表象, 包含 订单号,客户id , 订单日期  , 这里并没有实际的订单产品信息

                                      where order_num IN ( select  order_num

                                                                          from orderItems      // 订单详细的信息表象   保存了该订单的产品id, 价格,数量等信息

                                                                         where proc_id = 1002) ;

    三 联结

    表vendors     ven_id(供应商id)       vend_name      address   email

    表products    proc_id    proc_name   ven_id   price

                           1            milk               1001      10.0

                           2            milk               1002       8.9

    select vend_name, proc_name price 

    from  vendors ,products     // 内部联结      

    where  vendors.ven_id = porducts.ven_id    //  不带where 字句, 会做两个表的笛卡尔积   即两个表任意行之间组合, 会输出N*M行

    order by vend_name,proc_name;

    select vend_name, proc_name price 

    from  vendors INNER JOIN products     // 内部联结      

    on vendors.ven_id = porducts.ven_id    //  不带where 字句, 会做两个表的笛卡尔积   即两个表任意行之间组合, 会输出N*M行

    order by vend_name,proc_name;

    A left OUTER JOIN   B   //  产生表A的完全集,如果B表中匹配的则有值,没有匹配的则为NULL

    right OUTER JOIN

  • 相关阅读:
    通过strace 监控 fdatasync
    RAID 2.0
    AHCI vs NVMe
    NVMe 图解
    详解linux运维工程师入门级必备技能
    条带深度 队列深度 NCQ IOPS
    NVMe 与 AHCI
    IO负载高的来源定位 IO系列
    磁盘性能指标--IOPS 理论
    java程序员从笨鸟到菜鸟系列
  • 原文地址:https://www.cnblogs.com/fchy822/p/8944328.html
Copyright © 2020-2023  润新知