基本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
基本mysql语句的更多相关文章
- 如何根据执行计划,判断Mysql语句是否走索引
如何根据执行计划,判断Mysql语句是否走索引
- 让dede运行php代码和mysql语句
一.dede运行php代码 举例1: {dede:name runphp='yes'} $str = "hello ";@me = $str;@me .= "world& ...
- php代码优化,mysql语句优化,面试需要用到的
首先说个问题,就是这些所谓的优化其实代码标准化的建议,其实真算不上什么正真意义上的优化,还有一点需要指出的为了一丁点的性能优化,甚至在代码上的在一次请求上性能提升万分之一的所谓就去大面积改变代码习惯, ...
- mysql语句:批量更新多条记录的不同值[转]
mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 帮助 1 UPDATE mytable SET myfield = 'value' WHERE ...
- Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值
Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值 Thinkphp 的文档经常不够完整的表达MYSQL的各种组合,is not null在thinkp ...
- MySQL语句进行分组后的含有字段拼接方法
MySQL语句: SELECT GROUP_CONCAT(DISTINCT transaction_no) FROM `lm_wh_trans` GROUP BY staff_code; 如果tran ...
- shell脚本循环执行mysql语句
参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...
- 【PHP基础】常用mySQL语句以及WampServer2.2设置数据库默认编码
一.WampServer2.2设置数据库默认编码(此部分转自http://www.cnsecer.com/5984.html) wamp下MySQL的默认编码是Latin1,不支持中文,要支持中文的话 ...
- mysql语句中把string类型字段转datetime类型
mysql语句中把string类型字段转datetime类型 在mysql里面利用str_to_date()把字符串转换为日期 此处以表h_hotelcontext的Start_time和En ...
- php中mysql语句的基本写法
php中mysql语句的基本写法 php作为一门后台语言必须要与mysql数据库打交道,做到将内容存储到数据库以及数据库数据读写的操作,那么下面就来说下最近学习的一些东西: 在具体将之前先说一下编码的 ...
随机推荐
- MySQL备忘点(下)
联结表 创建联结 FROM 表1,表2 与内连接作用相同类似:如果失去WHERE子句,会出现笛卡尔积现象 内联结 INNER JOIN 高级联结 自联结 例子:SELECT 字段b FROM 表 WH ...
- P2051 [AHOI2009]中国象棋——DP(我是谁,我在哪,为什么)
象棋,给你棋盘大小,然后放炮(炮的数量不限),不能让炮打到其他的炮,问方案数: 数据n,m<=200; 状态压缩似乎能做,但是我不会: 因为只要状态数,所以不必纠结每种状态的具体情况: 可以想出 ...
- scrapy框架之spider
爬取流程 Spider类定义如何爬取指定的一个或多个网站,包括是否要跟进网页里的链接和如何提取网页内容中的数据. 爬取的过程是类似以下步骤的循环: 1.通过指定的初始URL初始化Request,并指定 ...
- Chisel-LLDB命令插件,让调试更Easy
http://blog.cnbluebox.com/blog/2015/03/05/chisel/ LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器.LLDB 绑定在 ...
- 关系型数据库的树形结构查询(Oracle、Postgres)
Oracle : start with… connect by 的用法.语法:select * from table [where 条件1] connect by[条件2] start with[条件 ...
- 消息中间件MQ
消息中间件MQ:为方便预览,将思维导图上传至印象笔记,博客园直接上传图片受限于图片大小 https://app.yinxiang.com/shard/s24/nl/27262531/c3e137a5- ...
- 区间dp括号匹配
POJ2955 匹配则加一,不需要初始化 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> ...
- SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes
SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击.但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查. 什 ...
- docker下搭建owncloud
在ubuntu下 搭建owncloud 用docker-compose启动,owncloud.yml文件内容 owncloud: image: owncloud: restart: always 开机 ...
- js中string和json的相互转换
1.将string转成json var json={}; var myorderno=$("#myorderno").val(); json.myorderno=myorderno ...