目录
LIMIT限制结果
排序数据
过滤数据
LIKE模糊查询
正则表达式查询
创建计算字段
数据处理函数
聚集函数
分组数据
联结表
高级联结
子查询
组合查询
SELECT子句顺序
以SELECT ... FROM为基础,可以检索单个或多列,也可以用 * 检索所有数据。
LIMIT后接返回的数据行数,也可以指定从第几行开始返回数据,不指定就默认是从第0行开始返回。
ORDER BY排序,默认升序,可以按多个列排序。可以在制定列后加关键字DESC,表示降序。
WHERE子句过滤数据,比较特别的是等于是=,不是==;BETWEEN...AND和IN ()可以规定范围。
AND的优先级高于OR,如果不用括号组合的话,优先是组合AND。
LIKE匹配的是整个文本,而不像正则表达式匹配的是子文本。
和LIKE一起用的通配符通常有%和_,%表示匹配任意多个字符,_表示匹配单个字符。
关键字为REGEXP,匹配的是子串
计算字段简单来说就是你操作数据显示给你的样子,而不会存储到数据库中
拼接字段 Concat()函数拼接串,串可以是某列
使用别名 AS关键字,仅仅修改了显示给你看的列名
文本处理函数 Upper()将文本全换成大写 Length()返回串长 等等
日期和时间处理函数 日期的格式必须是yyyy-mm-dd,总是用4位数的年份,Date()函数提取列的日期部分,Time()提取时间部分,Year()只提取年份,Month()提取月份,
数学函数 Abs(),Exp(),Sin(),Rand(),Sqrt().....
用在select之后对数据显示的操作,并不是用来过滤数据的。
AVG()函数求某列平均值
COUNT()函数:COUNT(*)求所有行数,不管列中是否为空;COUNT(column)求特定列的行数,忽略空值
MAX()MIN()函数求最大最小,SUM()求总和
以上5个函数都可以在列名前面加DISTINCT关键字,只会选择不同值的行运算
GROUP BY关键字,将某列不同的值进行分类,HAVING关键子代替WHERE对数据过滤
一般一个表里面只放一类数据,如果放多类相关的数据,可能会造成数据重复,对重复数据的修改就会有麻烦。比方说客户,商品有关数据的存储,第一个表中存储客户信息,主键为客户id,另一个表中存储商品信息,客户id,主键为商品id,此时的客户id就充当了外键的角色,这两个表就通过外键联结
内部联结 两种方式,一种where联结,一种inner join,例子如下
上面Mysql语句换成inner join就是:select vend_name, prod_name, prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
笛卡尔积 如果没给联结条件,就会变成类似线代中的向量相乘
自联结 比方说已知一个商品,想查到订此商品的买家所订的所有商品,就用自联结
左联结和右联结 LEFT OUTER JOIN和RIGHT OUTER JOIN,在内部联结中,是将几类数据匹配而且会忽略空值的行,但在左右联结中,如果是左联接,就会显示左边表中的所有行,不考虑此行是否能匹配到另一个表的值,如果没有就会显示此行空值;右联结同理
写起来很麻烦,比如通过商品找到客户信息,先用商品id找到客户id,再由客户id找到客户信息,简单说就是where语句中嵌套select语句
UNION关键字,将两个结果拼接在一起,单纯上下拼接,如果UNION后面没有ALL关键字,显示的数据会去掉重复的,加了ALL会显示所有的。对组合结果排序时,只允许一条order by语句,不存在多条排序语句
select-->from-->where-->group by-->having-->order by-->limit
大部分资料总结自MySQL必知必会