一、 基本用法

select 查询字段  from 表名或视图名  

      where 条件 

      group by 分组 

      having  筛选 

      order by排序

注意点 :


(1)可以使用as给查询出的字段取别名,as 也可以省略,但有些前台语言不能识别,所以最好还是需要加as,如果别名中含有一些特殊的字符要用引号或转义栝起来。


例: select name as 姓名 from students;

(2) 可以使用concat函数对字符串(比如说字段名)进行拼接。


例:select name as 姓名, concat(age,’岁’) as 年龄 from students;

(3)select可以将本不存在的值作为一列。


例:select name as 姓名, ’中国’ as 国家;

(4)使用变量作为列名

select name as 学生姓名, score as 分数,  

@grade:=( 

   Case  

   When score between 90 and 100  then ‘优秀’ 

   When score  between 80 and 90  then ‘良好’ 

   end 

)as 等级 

from students;

(5)sql中的!、||、&&可以使用and、or、not代替。


(6)可以使用limit查询指定的条数


limit(m,n):表示从第m个索引开始查询n个值。


(7)可以使用desc和asc进行排序,如果有两个相同的值,则按照主键进行排序,或者可以设置多个排序。


例:    select age from students 

         where age=20 

         order by age  asc,name desc;

(8)使用聚合函数进行统计。


例:select sum(age) from students



二、select中的模糊查询


1.使用like进行字符串的模糊查询,通常会和通配符一起使用,或者和正则表达式一起使用。如果需要对文章等比较长的文本进行搜索,建议使用全文匹配。


(1)Like中有两种通配符,%和

,使用%来进行多个字符的匹配,使用进行一个字符的匹配。


2.使用betwwen…and来进行数值和日期之间的比较查询,功能是介于两种数据之间,可以使用Not 进行取反操作。


(1)Between a and b 等价于 a<=num<=b,其中a<=b


3.使用in来查询一个范围值里面的匹配,可以使用not进行取反。


三、分组查询


1.基本语法:group by 分组字段1,分组字段2…


(1)Group by 的原理类似于distinct(删除重复的字段)


例: Select distinct sex from students;



2.group by 后面存放select语句中所有的非聚合字段,并可出现select中没有的字段。


四、分组过滤


1.使用having语句实现分组后结果集的再次筛选,having出现在group by之后,没有group by就没有Having



2.where和having的区别:


(1)where出现在Group by之前而having出现在group by 之后


(2)where实现对表中行的过滤,group by实现对对象分组后结果集的过滤


五、select的基本语法和执行原理。


书写顺序是:select 、from、where、group by、having 、order by


执行顺序是:from、where、group by、having、order by、select


六、多表查询


1.关键点逻辑:主外键以及父表、子表的关系。


2.语法:


(1)使用where语句进行查询


select 字段 

     from 表1 (as xxx),表2(as  xxx)... 

     where 父表的主键=子表的外键 and其他表的主键=子表的外键 and 其他条件



(2)使用join实现表的连接

select  字段 

      From  子表 join 父表  on  子表的外键=父表的主键 

      [join 表3 on 外键=主键];



注:使用where时的语法(效率没有join高,不建议使用)



3.join 连接有三种情况:内连接,外连接、自连接默认情况下为inner join。


    (1)内连接取的是两张表之间的交集,在一定的条件下,外连接可以代替内连接,反之不可以。


例:   select  s.name ,c.name from 

       students  s  inner  join  classes  c 

       on s.id = cid;



    (2)外连接:外连接又分为三个部分,left join(左连接),right join(右连接),union或者full join(联合查询,mysql不支持full join):


     left join(左连接):显示结果为两个结果的交集再加上左边表部分多出来的结果的值。


     right join(右连接):显示结果为两个结果的交集再加上右边表部分多出来的结果的值。


    union(联合查询):将多个查询的结果合并成一个结果集。


联合查询的例子:


Select 1 union select2 union select3



注意:查询结果的字段的个数和类型要匹配。



    (3)自连接:对表的自身进行连接


例:用stop字段来对route(公交线路表)进行自连接, 查询的结果就是共用同一车站的所有公交线。

SELECT * FROM route R1, route R2  

           WHERE R1.stop=R2.stop;