一 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

最新文章

  1. Kendall’s tau-b,pearson、spearman三种相关性的区别(有空整理信息检索评价指标)
  2. 用Dart&amp;Henson玩转Activity跳转
  3. Unity-Animator在Editor状态下的单个/批量预览工具
  4. 代码演示用 KnockoutJS 和 Web API 对一个表格(Gird)进行 CRUD 操作,在 MVC 5 下
  5. Eclips将lib打入war中
  6. 【转】 C++中delete和delete[]的区别
  7. java基础(七)面向对象(二)
  8. css伪元素
  9. 在github搭建你的个人主页
  10. ant在持续集成的应用
  11. Redis中的关系查询
  12. bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
  13. H5 百度一下,你就知道
  14. Java简单工厂模式(SimpleFactoryMode)
  15. 漫画HDFS工作原理(转)
  16. bus总线
  17. Identity(五)
  18. 【Java】 剑指offer(4) 替换空格
  19. [Python] 当猎头遇上 Guido van Rossum
  20. Qt532.QString_填充字符

热门文章

  1. Python3.5以上Celery4.2.1启动报错:ImportError: cannot import name &#39;LRUCache&#39; from &#39;kombu.utils.functional&#39;
  2. 常用SQL之日期格式化和查询重复数据
  3. springmvc返回json对象
  4. python定时任务实现
  5. Go语言函数之可变参数
  6. pwn学习日记Day20 《程序员的自我修养》读书笔记
  7. 2019balsn两道web和2019巅峰极客一道web记录
  8. Java 线程概述
  9. html文字两行后,就用省略号代替剩下的
  10. Linux下使用 Nginx