MySQL检索数据

目录

LIMIT限制结果

排序数据

过滤数据

LIKE模糊查询

正则表达式查询

创建计算字段

数据处理函数

聚集函数

分组数据

联结表

高级联结

子查询

组合查询

SELECT子句顺序


以SELECT ... FROM为基础,可以检索单个或多列,也可以用 * 检索所有数据。

LIMIT限制结果

LIMIT后接返回的数据行数,也可以指定从第几行开始返回数据,不指定就默认是从第0行开始返回。

排序数据

ORDER BY排序,默认升序,可以按多个列排序。可以在制定列后加关键字DESC,表示降序。

过滤数据

WHERE子句过滤数据,比较特别的是等于是=,不是==;BETWEEN...AND和IN ()可以规定范围。

AND的优先级高于OR,如果不用括号组合的话,优先是组合AND。 

LIKE模糊查询

LIKE匹配的是整个文本,而不像正则表达式匹配的是子文本。

和LIKE一起用的通配符通常有%和_,%表示匹配任意多个字符,_表示匹配单个字符。

MySQL检索数据

正则表达式查询

关键字为REGEXP,匹配的是子串

  • 用|或者[ ]匹配,这两个是或的意思,[123]表示匹配1或2或3,也可以写成1|2|3 
  • 空白元字符:\\f换页\\n换行\\r回车等等。
  • 重复元字符:* 0个或多个 ,+1个或多个 ,?0个或1个,{n}指定数目,{n,}不少于指定数目,{n,m}数目范围。重复元字符是对它前一个字符的数目匹配限制
  • 定位元字符:^ 文本的开始,$ 文本的结尾,^ 还有个功能是放在[ ]里,表示匹配除[ ]里的一切字符
  • 预定义的字符集,也叫字符类,[:alnum:]同[a-zA-Z0-9],[:alpha:]同[a-zA-Z],[:blank:]空格和制表,[:digit:]同[0-9],[:lower:]同[a-z],[:space:]同任意的空白元字符,[:upper:]同[A-Z]等等
  • 转义,如果想把一些特殊的字符当作普通的字符来匹配就要转义,MySQL外的正则表达式大多只要一个 \ 就可以转义,而MySQL需要两个\才能转义,如果要匹配\,就要\\\,如果要匹配括号,就要\\(\\)

MySQL检索数据

创建计算字段

计算字段简单来说就是你操作数据显示给你的样子,而不会存储到数据库中

拼接字段 Concat()函数拼接串,串可以是某列

MySQL检索数据

使用别名 AS关键字,仅仅修改了显示给你看的列名

数据处理函数

文本处理函数 Upper()将文本全换成大写 Length()返回串长 等等

日期和时间处理函数 日期的格式必须是yyyy-mm-dd,总是用4位数的年份,Date()函数提取列的日期部分,Time()提取时间部分,Year()只提取年份,Month()提取月份,

数学函数 Abs(),Exp(),Sin(),Rand(),Sqrt().....

聚集函数

用在select之后对数据显示的操作,并不是用来过滤数据的。

AVG()函数求某列平均值

COUNT()函数:COUNT(*)求所有行数,不管列中是否为空;COUNT(column)求特定列的行数,忽略空值

MySQL检索数据

MAX()MIN()函数求最大最小,SUM()求总和

以上5个函数都可以在列名前面加DISTINCT关键字,只会选择不同值的行运算

分组数据

GROUP BY关键字,将某列不同的值进行分类,HAVING关键子代替WHERE对数据过滤

MySQL检索数据

MySQL检索数据

联结表

一般一个表里面只放一类数据,如果放多类相关的数据,可能会造成数据重复,对重复数据的修改就会有麻烦。比方说客户,商品有关数据的存储,第一个表中存储客户信息,主键为客户id,另一个表中存储商品信息,客户id,主键为商品id,此时的客户id就充当了外键的角色,这两个表就通过外键联结

内部联结 两种方式,一种where联结,一种inner join,例子如下

MySQL检索数据

上面Mysql语句换成inner join就是:select vend_name, prod_name, prod_price from vendors inner join products on vendors.vend_id = products.vend_id;

笛卡尔积 如果没给联结条件,就会变成类似线代中的向量相乘

高级联结

自联结 比方说已知一个商品,想查到订此商品的买家所订的所有商品,就用自联结

MySQL检索数据

左联结和右联结 LEFT OUTER JOIN和RIGHT OUTER JOIN,在内部联结中,是将几类数据匹配而且会忽略空值的行,但在左右联结中,如果是左联接,就会显示左边表中的所有行,不考虑此行是否能匹配到另一个表的值,如果没有就会显示此行空值;右联结同理

MySQL检索数据

MySQL检索数据

子查询

写起来很麻烦,比如通过商品找到客户信息,先用商品id找到客户id,再由客户id找到客户信息,简单说就是where语句中嵌套select语句

组合查询

UNION关键字,将两个结果拼接在一起,单纯上下拼接,如果UNION后面没有ALL关键字,显示的数据会去掉重复的,加了ALL会显示所有的。对组合结果排序时,只允许一条order by语句,不存在多条排序语句

SELECT子句顺序

select-->from-->where-->group by-->having-->order by-->limit

 

 

大部分资料总结自MySQL必知必会