基本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

猜你喜欢

转载自www.cnblogs.com/fchy822/p/8944328.html
今日推荐