简单SELECT语句
我们从最简单的SELECT语句开始起
简单的SELECT语句:
SELECT {*, column [alias], . }
FROM table;
说明:
–SELECT列名列表。*表示所有列。
–FROM 提供数据源(表名/视图名)
–默认选择所有行
例子
查询数据:
select * from student;
查询部分字段:
select id,address from student;
这也是用的最多的方式之一
SELECT中的算数表达式
对于数值型的数据列,变量,常量可以使用 加减乘除(+ - * /)
对于日期型的数据列,变量,常量只可以使用 加减 (+ -)
运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算
select id,age*10 from student;
运算符的优先级
乘除>加减
运算顺序从左往右
括号可以改变运算顺序
SELECT查询时对重复数据的处理
使用 DISTINCT 可以去除重复记录
SELECT DISTINCT name from student /*这时候发现数据中有重复数据*/
SELECT DISTINCT(distinct) name from student; /*使用 DISTINCT 可以去除重复记录*/
DISTINCT的作用范围是后面所有字段的组合
SELECT DISTINCT id,name from student;
限制所选择的记录
使用WHERE子句限定返回的记录
where使用注意事项
WHERE中的字符串和日期值
字符串和日期要用单引号扩起来
SQl语句对于大小写不是特别敏感但是字符串是大小写敏感的,日期值是格式敏感的
语法:
WHERE子句在FROM 子句后
SELECT[DISTINCT] {*, column [alias], . } FROM table–[WHEREcondition(s)];
简单例子:
select id,name from student where name="琦琦";
在where中也可以使用各种运算符 比如 > = < and in like 等 别的篇章会再讲到
也可以使用正则表达式
数据分组——分组查询
GROUP BY子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组
分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。
分组函数忽略空值,。
结果集隐式按升序排列,如果需要改变排序方式可以使用Order by 子句
语法:
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
例子:select max(age) from student [where] group by id;
注意:select只能选中聚合函数字段 或者group by 分组的字段
分组函数规则
如果使用了分组函数,或者使用GROUP BY 的查询:出现在SELECT列表中的字段,要么
出现在组合函数里,要么出现在GROUP BY 子句中。
GROUP BY 子句的字段可以不出现在SELECT列表当中。
使用集合函数可以不使用GROUP BY子句,此时所有的查询结果作为一组
数据分组后限制所选择的记录
HAVING
在group by分组之后的记录里用HAVING代替limit 来限制记录
HAVING子句用来对分组后的结果再进行条件过滤
select MAX(age) from student group by age having age>20;
HAVING与WHERE的区别
WHERE是在分组前进行条件过滤,HAVING子句是在分组后进行条件过滤
WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数。
对查询结果排序
查询语句执行的查询结果,数据是按插入顺序排列
实际上需要按某列的值大小排序排列
按某列排序采用order by 列名[desc],列名…
设定排序列的时候可采用列名、列序号和列别名
如果按多列排序,每列的asc,desc必须单独设定
asc 升序 desc降序 就那么简单
分组排序
select id,group_concat(name),group_concat(age) from student group by id desc;
多分组排序
select id,group_concat(name),group_concat(age) from student group by id asc,age asc;
先根据id升序排,一样的时候再根据age升序排
这边顺便提一下列别名 在select的过程中可以给列取别的名字来使用
在查询中使用别名
select MAX(age) rage from student group by rage having rage>20;
和之前讲过的语句是一个意思
写上头了,再将一个联合查询
联合查询
说明:一般情况下,我们会将 IN 或者 OR 语句 改写成 UNION ALL,来提高性能
UNION 去重复
UNION ALL 不去重复
select id,name,age from student where age>20
union
select id,name,age from student where age<15
MySQL的通配符
MySQL中的常用统配符有三个:
%:用来表示任意多个字符,包含0个字符
_ : 用来表示任意单个字符
escape:用来转义特定字符