MySQL数据查询和函数
查看数据库表信息
show databases;//数据库列表
use databasename;//使用此数据库
show tables;//列表
show columns from tablename;//列出表属性的信息
describe tablenames;与上面等同
查询语句
select columnname from tablename;//检索单个列
select column1,column2,column3 from tablename;//检索多个列
select * from tablename;//检索所有列
DISTINCT 检索出不同值的列
LIMIT 限制返回的行数
排序检索
select column1 from tablename order by column1;//升序
select column1,column2 from tablename order by column1, column2;//多个列排序
select column1 from tablename order by column1 DESC;//降序
select column1 from tablename order by column1 ASC;//升序
使用ORDER BY 和LIMIT 可以找出列中最高或最低的值
SELECT COLUMN1 FROM TABLE1 ORDER BY COLUMN1 LIMIT 1;
过滤数据
WHERE搜索条件
select column1 from table1 where column1 = x;
select column1 from table1 where column1 between x1 and x2;//范围值检索
select column1 from table1 where column1 is null;//空值检索
组合WHERE子句,AND,OR
select column1, column2 from table1 where column1 = 1 and column2 = 2;//两个过滤条件
IN指定条件范围
select column1, column2 from table1 where column1 in (x1,x2) order by asc/desc;//在x1,x2范围内检索
NOT否定,配合IN
select column1 from table1 where column1 not in (x1,x2) order by column1;
用通配符进行过滤
LIKE谓词
%通配符,%为任意字符
select column1 from table1 where colomn1 LIKE 'jet%';//查找jet开头的词
_通配符,匹配单个字符
select column1 from table1 where column1 like '_ anvi1'//anvi1前只能匹配一个字符
正则表达式搜索
过滤条件复杂,正则表达式更有效解决
关键字REGEXP
select column1 from table1 where column1 REGEXP '.000';//
- [123]表示1or2or3,[]是一种OR语句,[0-9]表示0到9
- 匹配特殊字符.,\.即可
- *0个或者多个匹配
- +1个或者多个匹配
- ?0个或者1个匹配
- {n}n个匹配
计算字段
从数据库中检索出转换、计算或者格式化过的数据,而不是在客户端应用程序重新格式化
拼接字段Concat(),把多个串连接起来
select Concat(column1 , '(', column2,")") from table1;//输出效果为column1(column2)
用AS关键字赋予别名,别名也称为导出列
使用数据处理函数
- RTrim()去掉列值右边的空格
- Upper()转换为大写
- Left()返回串左边的字符
- Length()返回串的长度
- Lower()转换为小写
- SubString()返回子串的字符
日期和时间的处理函数
- AddDate()增加一个日期,天,周
- AddTime()增加一个时间,时,分
- CurDate()返回当前日期
- CurTime()返回当前时间
- DateDiff()返回两个日期之差
日期格式为yyyy-mm-dd
SELECT datetime FROM table1 WHERE Date(datetime) = '2015-09-01';//过滤条件:日期20150901
数值处理函数
- Abs()绝对值
- Exp()指数
- Rand()随机数
- Sqrt()平方根
聚集函数
汇总表的数据,确定表中行数,获得表中行组的和,找出最大值最小值
- AVG()平均值
- COUNT()返回某列行数
- MAX()某列的最大值
- MIN()某列的最小值
- SUM()某列之和
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM products;
分组数据
GROUP BY以什么分组
- 使用WITH ROLLUP 可以得到每个分组一级每个分组汇总级别的值
- WHERE过滤行,HAVING过滤分组
- HAVING支持所有WHERE操作符
HAVING在数据分组后过滤,WHERE在数据分组前过滤。
SELECT子句顺序
- SELECT返回的列和表达式
- FROM从中检索数据的表
- WHERE行级过滤
- GROUP BY分组过滤
- HAVING 组级过滤
- ORDER BY 排序
- LIMIT 检索行数
子查询
嵌套在其他查询中的查询
SELECT cust_id FROM orders WHERE order_num IN( SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');