基本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数据库打交道,做到将内容存储到数据库以及数据库数据读写的操作,那么下面就来说下最近学习的一些东西: 在具体将之前先说一下编码的 ...
随机推荐
- 无缓存I/O操作和标准I/O文件操作区别
本文转载于:http://www.360doc.com/content/11/0521/11/5455634_118306098.shtml 首先,先稍微了解系统调用的概念: 系统调用,英 ...
- TCP SACK 介绍 转载
一.SACK选项 默认情况下TCP采取的是累积确认机制,这时如果发生了报文乱序到达,接收方只会重复确认最后一个按序到达的报文段,为此发送方的处理只能是重复按序到达接收方的报文段之后的那个报文段,因而它 ...
- php-fpm脚本
#! /bin/sh ### BEGIN INIT INFO # Provides: php-fpm # Required-Start: $remote_fs $network # Required- ...
- Spring Cloud|高可用的Eureka集群服务
Eureka,作为spring cloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置.单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况, ...
- ORM SQLAlchemy - 基本关系模式
1 一对多 一个parent对多个child,一对多关系添加一个外键到child表,用于保存对应parent.id的值,引用parent.relationship()在parent中指定,引用/保存 ...
- centos7 设置 防火墙 开机自启
CentOS 7.0默认使用的是firewall作为防火墙,之前版本是使用iptables. 1.设置firewall开机启动 systemctl enable firewalld 2.禁止firew ...
- flutter中的异步机制 Future
饿补一下Flutter中Http请求的异步操作. Dart是一个单线程语言,可以理解成物理线路中的串联,当其遇到有延迟的运算(比如IO操作.延时执行)时,线程中按顺序执行的运算就会阻塞,用户就会感觉到 ...
- JAVA 基础编程练习题26 【程序 26 求星期】
26 [程序 26 求星期] 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if ...
- 读写Session
读写Session Session是保存在服务端的字典 Session与Cookie有些类似,都是通过字典管理key-value对,只不过Cookie是保存在客户端的字典,而Session是保存在服务 ...
- 多个celery如何使用同一个redis做为broker?
曾经有个哥们提了一个这方面的requests,但是最终没有合入的celery中去,所以目前celery没有这个功能,祥见: https://github.com/celery/kombu/pull/9 ...