查询语句

一:单表查询完整的查询语句

       格式:

               select  [distinct]  {*|字段名|聚合函数|表达式} from 表名  [where 条件  group by 字段名  having 条件  order by 字段名  limit 显示的条数]

                                 以上是书写顺序,必须按照这个顺序来书写sql语句。其中[]表示可选的,{}表示必选的。

 

       关键字的执行顺序:关键字的执行顺序和关键字的书写顺序相同,都是从上至下。

                                      第一步找到对应的文件from,

                                      第二步读取并筛选数据,where条件读取每一行数据,判断是否满足条件,

                                      group by将数据按照某个字段进行分组,having对分组后的数据进行筛选,

                                      distinct对数据进行去重处理,order by对数据进行排序,limit选取一部分数据。

                

        以上书写顺序中:

              *:表示所有列都显示,也可以手动指定眼显示的列,可以是多个。

     distinct:用于去除重复的记录,注意:只能去除完全相同的记录。

     表达式:支持加减乘除四则运算。

      where:从硬盘上读取数据时的一个过滤条件。where支持的运算符见图1            

  group by:用于给数据分组,从而方便统计管理。

  聚合函数:将一堆数据经过计算,得到一个数据。

                    如:求和 sum()         求平均数 avg()       求最大值/最小值  max()/min()     求个数  count()

     having:用于对分组后的数据进行过滤。having一般不会单独出现,都是和group by一起出现。

                   having和where的区别:

                   相同点:都用于过滤数据

                   不同点:where是最先执行,用于读取硬盘数据,而having要等到数据读取完之后,才进行过滤;

                                 where中不能使用聚合函数,而having中可以使用。

  order by:用于对记录进行排序,默认为升序。修改为降序:select *from 表名 order by 标准 desc;

         limit:用于限制显示的记录数。  语法:limit  [起始位置,] count

                  例:查看表里的前三条数据:select *from 表名 limit 3;

                         查看表里的第三条到第五条数据:select * from 表名 limit 2,3;

 

 

二:多表查询:在多个表中查询需要的数据。

              多表查询的方式:

              1:笛卡尔积查询:用表中的一条记录,去链接另一张表中的所有记录。就像是把两张表的数据做了一个乘法,

                                    这将导致产生大量的无用重复数据,然后可以使用where筛选出正确的数据。

                    语法:select *from 表1,表2 where 条件;

               on关键字:用于多表查询时进行条件限制。但是on关键字无法替换上述的where,因为它只能用在专门多表

                                 查询语句中。如内连接查询就可以使用on关键字。

              2:内连接查询:  inner  join

                    语法:select *from 表1 inner join 表2  on 条件;

              3:左外连接:  left  join   左边表中的数据完全显示,右边表中的数据匹配上才显示。

                    语法:select *from 左表 left  join 右表  on 条件;

              4:右外连接: right  join   右边表中的数据完全显示,左边表中的数据匹配上才显示。

                    语法:select *from 左表 right  join 右表  on 条件;

              5:全外连接: full  join   在mysql中不支持,但是在oracle中支持。可以通过union来间接实现全外连接。

                    union:表示合并查询,意思是把多个表的查询结果合并在一起显示,但是要求被合并的表之间,表结构

                                 必须相同。union默认去除重复,如果想要合并但是不去除重复,可以使用union all来实现。

 

三:子查询

              将上一次查询的结果作为本次查询的原始数据。

 

==========================================================================================

 

补充:记录详细操作:

[] 表示可选的;

 

增:

     语法:insert [into] 表名[字段名] value|values(字段值....);

               其中 [字段名] 如果写了,那么后面的值必须与写的字段匹配;如果不写,那么后面的值必须和表的结构完全匹配。

                       value  表示插入一条记录

                       values  表示插入多条记录

 

改:

     语法:update 表名 set 字段名 = 新的值[,字段n = 新值n]  [where 条件];

               其中 where 是可选的,如果有就修改满足条件的记录;如果没有,就全部修改。

                       可以同时修改多个字段,用逗号进行隔开即可。

 

删:

     语法:delete from 表名 [where 条件];

              其中 where 是可选的,如果有就删除满足条件的记录;如果没有,就全部删除。

              如果需要全部删除,建议使用 truncate table 表名;

              因为 delete 是逐行比对,删除效率低,而且 delete 删除的行号会保留,不方便。

 

复制表:

     语法:create  table  表名副本  select  *from  表名;      结构与数据全部拷贝。

               create table  表名副本  select  *from  表名  where 0 > 1;    仅拷贝结构。

     总结:这种复制的索引(也就是主键)不能被拷贝,并且描述(也就是自增)也不能被拷贝。

 

 

                                                                                                                                                                                                                                                                        

 

                                    

 

posted @ 2018-09-14 19:23  &nbsp  阅读(229)  评论(0编辑  收藏  举报