先附上我要用到的表(仅用于测试sql语句,练习时尽量根据自己需要设计)
1.查询出所有属性值,有两种方法,一种是使用通配符*查询 select*from yi; ,另一种是 select id,name,aeg,sex,tel from yi;
如果我们只想查询部分的列,只需要将需要的列名称用逗号隔开依次列出 ,如只要name和age列 select name,aeg from yi;
需要注意的是,*通配符虽然方便,但我们在实际开发中一般不建议使用它,因为检索不需要的列会降低检索的速率和应用程序的性能,但通配符也有一个优势就是可以检索出未知列。
2.distinct关键字,Mysql只返回不同的值
例:select distinct age from yi;
去掉了相同的年龄数
3.limit子句,表示返回不多于多少行
select*form yi limit 2;表示只显示前两行
select*from yi limit2,3;与select*from yi limit 3 offset 2;都表示从第二行开始显示3行
注意:检索出来的第一行是0不是1(我们的id通常是从1开始),所以limit2,3如下图表示
4.order by 子句
例:seelct 列1 from 表名 order by 列1;
按列1为基准,以字母顺序排序,用非检索的列排序也是完全合法的
例:select 列1,列2 from 表名 order by 列1,列2;
先按列1排序,再按列2排序
例:select 列1.列2 from 表名 order by 列1 desc,列2 ;
select 列1.列2 from 表名 order by 列1 desc,列2 desc;
DESC关键字是按降序排列,相对应的ASC(基本不用)是升序排列;desc关键字只运用到直接位于其前面的列名,若要对每个列进行降序排序,必须对每个列指定desc关键字
例:select 列1 from 表名 order by 列1 desc limit 1;
找出列1中的最大值(逻辑简单自己分析下,如果还有疑问请评论留言),还有在使用子句的时候一定注意它们的顺序 ,次序不对会产生错误信息。
5.where子句:wherer子句在select中使用支持多种操作符过滤数据,以检索出我们需要的数据。
支持以下操作符:
= 等于
<> 不等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于
between 在指定的两个值之间,between 小值 and 大值
例:select 列1,列2,列3 from 表名 where 条件1;
例:select 列1,列2 from 表名 where 列1 between 小值 and 大值;
6.and和or关键字(有关where的操作符):and用来指出检索时必须满足所有条件的行,or用来指出检索时只需要满足任一条件的行
例:select 列1,列2 from 表名 where 条件1 and 条件2;
例:select 列1,列2 from 表名 where 条件1 or 条件2;
次序问题:当and和or同时出现在一个where语句中时,按照语法优先级一般是先执行and在执行or,所以使用圆括号来明确的分组相应的操作符。建议存在它们两者时都要使用圆括号,可以有效的规避歧义。
例:select 列1,列2 from 表名 where 条件1 or 条件2 and 条件3;
select 列1,列2 from 表名 where (条件1 or 条件2 )and 条件3;
7.In操作符:in操作符和or操作符的功能一样,in后面的清单必须用圆括号括起来,在不同条件之间用逗号隔开
in具有的优点:
(1)使用合法选项清单时,in操作符语法更清晰,更直观
(2)减少or的使用次数,操作符减少计算的次序更容管理
(3)in操作符一般比or操作符执行速率更快
(4)in还可以包含select语句,使能够动态的建立where子句(最大的优点)
例:select 列1,列2 from 表名 where 列 in (条件1,条件2);
8.not操作符:在where子句中not操作符只有一个功能,就是否定它之后的所跟的任何条件
例:select 列1,列2 from 表名 where 列1 not in(条件1,条件2);
解释:列出条件1和条件2以外的所有
在复杂的语句中利用not和or组合可以很容易的找到不匹配的项,此外在MySQL中not还可以接between,exists子句取反。