一 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

基本mysql语句的更多相关文章

  1. 如何根据执行计划,判断Mysql语句是否走索引

    如何根据执行计划,判断Mysql语句是否走索引

  2. 让dede运行php代码和mysql语句

    一.dede运行php代码 举例1: {dede:name runphp='yes'} $str = "hello ";@me = $str;@me .= "world& ...

  3. php代码优化,mysql语句优化,面试需要用到的

    首先说个问题,就是这些所谓的优化其实代码标准化的建议,其实真算不上什么正真意义上的优化,还有一点需要指出的为了一丁点的性能优化,甚至在代码上的在一次请求上性能提升万分之一的所谓就去大面积改变代码习惯, ...

  4. mysql语句:批量更新多条记录的不同值[转]

    mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...

  5. Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值

    Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值 Thinkphp 的文档经常不够完整的表达MYSQL的各种组合,is not null在thinkp ...

  6. MySQL语句进行分组后的含有字段拼接方法

    MySQL语句: SELECT GROUP_CONCAT(DISTINCT transaction_no) FROM `lm_wh_trans` GROUP BY staff_code; 如果tran ...

  7. shell脚本循环执行mysql语句

    参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...

  8. 【PHP基础】常用mySQL语句以及WampServer2.2设置数据库默认编码

    一.WampServer2.2设置数据库默认编码(此部分转自http://www.cnsecer.com/5984.html) wamp下MySQL的默认编码是Latin1,不支持中文,要支持中文的话 ...

  9. mysql语句中把string类型字段转datetime类型

    mysql语句中把string类型字段转datetime类型   在mysql里面利用str_to_date()把字符串转换为日期   此处以表h_hotelcontext的Start_time和En ...

  10. php中mysql语句的基本写法

    php中mysql语句的基本写法 php作为一门后台语言必须要与mysql数据库打交道,做到将内容存储到数据库以及数据库数据读写的操作,那么下面就来说下最近学习的一些东西: 在具体将之前先说一下编码的 ...

随机推荐

  1. Til the Cows Come Home ( POJ 2387) (简单最短路 Dijkstra)

    problem Bessie is out in the field and wants to get back to the barn to get as much sleep as possibl ...

  2. SpringMVC框架下Web项目的搭建与部署

    这篇文章已被废弃. 现在,Deolin使用Maven构建项目,而不是下载Jar文件,使用Jetty插件调试项目,而不是外部启动Tomcat. SpringMVC比起Servlet/JSP方便了太多 W ...

  3. JVM——垃圾回收

    目录: 如何判断垃圾是否回收? 引用计数法 可达性分析算法 四种引用 引用队列 垃圾回收算法 标记清除算法 复制算法 标记整理算法 分代垃圾回收 新生代 老年代 Minor GC 和 Full GC的 ...

  4. oracle insert into 多条数据

    mysql : insert into tablename (column1,column2) values ('aa','bb'), ('dd','cc'), ('ee','ff'); oracle ...

  5. make 和 make install 的区别

    简单来说,make 是编译,make install 是安装. 总结:linux编译安装中configure.make和make install各自的作用 ./configure是用来检测你的安装平台 ...

  6. Python实现进度条的效果

    from itertools import cycle from time import sleep for frame in cycle(r'-\|/-\|/'): print('\r', fram ...

  7. nodejs 服务器模拟异常状态码429,以及前端vue axios捕获状态码

    nodejs 服务端发送429状态: extendInfo (req, res) { res.status(429).json('Too many requests, please try again ...

  8. php mvc 模式的开发注意事项

    1.控制器中: 如果不涉及到数据库的就在控制器中. empty($res['code']) ? $this->error($res['msg']) : $this->success($re ...

  9. jenkin自动化代码上线

    介绍 Jenkins是一款开源自动化服务器,旨在自动化连续集成和交付软件所涉及的重复技术任务. Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序ARc ...

  10. js传值到后台乱码问题

    1.前台js的路径 var addurl1="ldcOrderController.do?goods&orderGoodsExtra="+encodeURI(encodeU ...