MariaDB的创始人将MySQL卖给SUN公司,之后又被Oracle收购。和MySQL一样的搜索引擎机制,一样的。
基本查询:(先过滤再排序原则)
select * from product where market_price between 1000 and 2000 order by market_price DESC |
查询并删除重复的数据字段:
第五行起(从第6行开始的)的5条数据:
按多个排序:
按指定方向排序:
使用where的子句:
范围检查:
组合where子句:and ,or(多逻辑表达式用括号括起来进行明确分组)
In 和 or 可以相互转换,但是in的操作比or效率高,而且in能够包含其他select的语句,能够动态地创建where子句。
Not的使用,否定跟在其后的条件。
用通配符进行过滤
% 代表任意字符出现任意次数。
_ 仅代表一个字符出现一次。
创建计算字段:
拼字段
MySQL或MariaDB的拼字段语法:
使用别名:
执行算数计算:
转换成大小写字母;upper,lower
左子串:
右子串:
去掉左右空格:
日期处理函数:
汇总数据
聚集函数
AVG()计算列的平均值
COUNT()计算总条数:
对某一字段计数,如果为null将不会计数,如果使用*,则null也会被计数。
MAX指定列中的最大值:MIN指定列中的最小值,SUM列之和
组合聚集函数:
分组数据
涉及Select语句子句:GROUP BY 和 HAVING
创建分组:
分组过滤:having和分组连用,where过滤特定的行,换句话说前者分组后使用,后者分组前使用。
使用where先过滤然后分组再having过滤:
分组和排序:记住select子句的顺序
使用子查询进行过滤:
表名 +点+字段:进行列的限定
联结表
为什么使用联结?将数据分解为多个表更能有效地存储,更方便地处理,并且可伸缩性更好。
创建联结:第三列在第二个表中
Where的关键性保持表一和表二逻辑上的一致性。
内联结:inner join … on,两个表的关系是以inner join指定的部分from子句。
与上面的例子完全相同。
联结多个表:where …and…and…
创建高级联结
使用表别名简化SQL书写:
子查询:
使用联结查询:
外联结:左外联结,右外联结。包含没有关联的行(left,right)从哪个表选取所有的行。
内联结:只包含有关联的行
全外联结:包含两个表的不相关行。
使用带聚类函数的联结:
组合查询:执行多个查询语句返回一个查询结果。
规则:两条或两条以上的select语句,查询语句之间用关键字UNION分隔。
Union会删除重复的查询结果。
Union ALL 会保存所有查询结果。(包括重复的行)
对组合查询进行排序:不允许使用多条order by
插入数据
可以在表后给出字段,这样当表结构次序变化时,插入SQL的语句仍能够使用。也可以给某些字段插入表中。
插入检索出来的数据:假如想把另一表中的顾客合并到当前Customers表中,不需要每次读取一行再将它用insert插入。
复制一张表(包括过滤部分后):select和子句都可以用,包括where和group by
更新和删除数据
更新表中特定的行,更新表中所有的行。
Update语句:要更新的表+列名和它们的新值+更新哪些行的过滤条件
更新单列:
更新多列;
删除数据
删除特定的行, 删除所有的行。
删除所有行:truncate 效率更高。Delete不做过滤也可以删除所有行。
连表也被删除了:
注意:在会用delete和update的SQL语句时,一定记得带使用where,防止误删数据。保证每个表中都有主键。
创建和操纵表