SQL知识点记录

来源:互联网 发布:中文域名成功案例 编辑:程序博客网 时间:2024/05/29 18:51

引号的使用

  (1)数字不能用引号;(2)字符串要用引号;(3)日期和时间要用引号;(4)函数不能用引号;(5)NULL不能用引号。

索引

索引中的数据是经过排序的。

创建索引。CREATE INDEX nameind ON student(name); /*在表student中的列name建一个索引nameind*/

使用索引。主要在where,order by,min,max子句中。比如select * from student where name = 'phf'; /*可以利用列name索引*/

可以在查询语句前加explain来获取该查询语句是如何处理的信息。详见http://blog.csdn.net/gzh0222/article/details/6707760

联接

1.内连接:所有左边表的数据项都与右边表的数据项作一次连接,共产生M*N个连接项,但只保留了满足条件的连接项,其他删除(左表中没有匹配的项也会被删除)。

 1.1连接条件写法:(1)where  先形成M*N连接项,再过虑不匹配项; (2)on 在连接时过虑不匹配项,即只对匹配项形成连接; (3)using 要求连接两表中作为条件的字段要相同,结果集中去除重复的条件字段。

内连接的语法:SELECT  fieldlist  FROM t_left  [inner] join t_right ON t_left.col=tt_right.col;       //mysql中的连接默认是内连接。

内连接的语法:SELECT  fieldlist  FROM t_left  inner join t_right using(col);

2.交叉连接(笛卡尔积连接):没有条件的内连接,即保留所有产生的M*N个连接项。
交叉连接的语法:SELECT  fieldlist  FROM t_left  cross join t_right;
另:无条件的多表查询也是产生笛卡尔积的结果。如SELECT  fieldlist  FROM t_left , t_right;

3外连接
 连接条件:(1)on 用法同内连接; (2)using用法同内连接;     另注意外连接不能用where, 而且一定要有连接条件
3.1左外连接:所有左边表的数据项都与右边表的数据项作一次连接,共产生M*N个连接项,保留匹配的连接项,同时也保留左表中没有匹配到的数据项,其他删除。
左外连接语法:SELECT fieldlist FROM t_left left [outer] join t_right ON t_left.col=t_right.col;      //一定要有连接条件
3.2右外连接:与左外连接类似,即保留匹配的连接项,同时也保留右表中没有匹配到的数据项
右外连接语法:SELECT fieldlist FROM t_left left [outer] join t_right ON t_left.col=t_right.col;
  相当于SELECT fieldlist FROM t_right left [outer] joint_left  ON t_left.col=t_right.col;
3.3全外连接:保留匹配的连接项,同时也保留左和右表中没有匹配到的数据项。
全外连接语法:SELECT fieldlist FROMt_right full [outer] joint_left  ON t_left.col=t_right.col;

4.自然连接
通过mysql自已的判断完成连接过程,不需要指定连接条件。mysql会利用多表内的相同字符作为连接条件。
也分自然内连接,自然左外连接,自然右外连接,自然全连接
自然内连接语法:SELECT fieldlist FROM t_left natural join t_right;
自然左外连接语法:SELECT fieldlist FROM t_left natural left join t_right;

分组

规则1:出现在select列表中的字段,如里出现的位置不是在聚合函数中,那么心须出现在group by子句中。
规则2:where语句是为了限制查询的,在group by前就执行完了,可用having子句对分组后的结果进行限制。

合并

union可合并结果集(列类型兼容,最如相同)

原创粉丝点击