一、操作符
1、计算次序优先级:()>and>or
2、in操作符:功能和or相当。
优点:(1)语法更清楚直观。(2)计算次序更容易管理。(3)执行快。(4)可包含其他select语句,动态建立where子句。
3、not操作符:否定它之后所跟条件的关键字。
4、通配符%:(1)无法匹配null。(2)尾空格可能会干扰通配符匹配。
5、下划线_通配符:只匹配单个字符。
二、正则表达式
1、‘.’单字符匹配。
2、‘|’等于or,多个或存在的时候,可以使用‘[]’来进行匹配。
3、匹配特殊字符,前面加//,进行转义处理。
4、?匹配可选字符,出现0次或者1次。
5、like匹配整个列值,而regexp匹配列值内的项目。
6、MySQL默认不区分大小写,binary区分大小写。
7、定位符:^文本的开始(在集合中,否定该集合);$文本的结束。
三、函数
1、concat():拼接串。
2、常用文本函数
left():返回串左边的字符;
right():返回串右边的字符;
locate():找出串的一个子串;
lower():将串转为小写;
upper():将串转为大写;
ltrim():去掉串左边的空格;
rtrim():去掉串右边的空格;
substring():返回子串的字符;
soundex():将任何文本串转换为其语音表示的字母数字模式的算法。
3、常用日期和时间处理函数
4、聚集函数
distinct参数:计算不同的值。只用于conut()。
四、分组数据
1、group by :分组,用于where前,order后。
2、with rollup :可以得到每个分组,以及每个分组汇总级别的值。
3、过滤分组:having支持所有的where操作符。where在分组前过滤,having在分组后过滤。
4、子查询:由内向外。
五、联结表
1、保证所有联结都有where子句。
2、等值联结:内部联结,基于两个表之间的相等测试。
example:select a,b,c from D inner join E on D.id = E.id
联结多个表
example:select a,b,c,d from A,B,C,D where A.id=B.id and A.id=C.id and C.string='string'
3、联结是SQL中最强大的特性。
4、自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。
5、自然联结排除多次出现,使每个列只返回一次。
6、自然联结出现条件:对表是用通配符,对其他表的列使用明确的子集来完成。
7、左联结与外右联结的区别:如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。
参考网址:Mysql Join语法以及性能优化
8、高级联结
example:检索没有关联行的行。
select A.a,B.b from A left outer join B on A.id=B.id;
outer join 必然带上left 或者 right
六、组合查询
1、union:并。单个查询从不同表返回类似数据;单个表执行多个查询,按单个查询返回。
没给查询必须具有相同的列,表达式或者聚集函数。
2、union默认去除重复;否则使用union all。
七、全文本搜索
1、正则表达式的限制
(1)性能(2)明确控制(3)智能化结果
2、全文本检索必须索引被搜索的列,之后可以用match()和against()一起执行搜索。
3、启用全文本检索,在建表时必须启用fulltext子句。
4、不要再导入数据的时候使用fulltext。
5、match()指定要搜索的列,必须与定义相同。指定多个,则需要次序正确。
6、against()指定要使用的搜索表达式。
7、binary关键字:不去大小写。
8、布尔文本搜索
(1)要匹配的词(2)要排斥的词(3)排列提示(4)表达式分组
特点:无索引,操作缓慢。
in Boolean mode
9、布尔操作符
10、布尔搜索排列而不排序。
八、数据插入
1、插入及系统安全,可控制(表或者用户)禁止插入。
2、insert语句不产生输出。
3、low_priority:降低insert语句的优先级。
4、使用单条插入比多条插入速度快。
5、插入检索出的数据。
九、更新和删除数据
1、update更新特定行或者所有行。
2、update安全,限制和控制。
3、delete语句不要省略where语句,同样具备限制和控制。
4、MySQL没有undo(撤销)。