本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • MySQL基础教程(6)MySQL的子句、函数与子查询用法

MySQL基础教程(6)MySQL的子句、函数与子查询用法

发布:TangLu2019-1-3 12:46分类: MySQL 标签: mysql

一、MySQL常用子句

MySQL常用子句有where、like、limit、group by等,如果一个SQL同时存在多个子句,则子句执行顺序是where-->group by-->having-->order by-->limit。下面是常用子句的简单示例介绍: 


WHERE:对语句所要处理的数据进行过滤,过滤条件有=、>、<、>=、<=、!=、AND、OR。如有多个过滤条件时需要注意顺序,AND优先于OR,可以加括号来改变优先级
select * from student_table where age > 18 order by price limit 10;
select * from student where age > 18 and height < 170 #多条件过滤

LIKE:通常和where一起使用,实现字符串的模糊匹配(非字符串类型不行)。需要注意如果%出现在匹配条件的最前面,不会走索引
select * from student where name like 'tang%' ;  #%代表通配所有字符,_代表通配一个字符

DISTINCT:对查询结果进行去重
select age from student_table;
select DISTINCT name,age from student_table;  #对name和age列的查询结果去重

ORDER BY:对查询结果进行排序,需要注意如果存在相同数据会随机排序。该子句一般写在语句最后
select * from student_table order by age;  #根据age列的数据进行排序
select * from student_table order by age desc;  #根据age列的数据进行倒序排序
select * from student_table order by age,price;  #根据age列的数据进行排序,如果该列有重复值再根据price列进行排序

LIMIT:限制查询结果的返回行数
select * from student_table order by age desc limit 100; 
select * from student_table order by age desc limit 100,10;  #返回第100行以及它后10行的数据 

BETWEEN:带范围的条件过滤,可以理解为>=与<=的组合
select * fron student where age between 18 and 20;

NULL、NOT NULL:过滤空值或非空值,但不是空字符串
select * fron student where price IS NULL;
select * fron student where price IS NOT NULL;  #过滤非空数据

IN、NOT IN:以集合的形式过滤,同样也支持and、or等逻辑判断符
select * from student_table where age in (18,19,20) and sex = 'male';
select * from student_table where age not in (18,19,20);  #age不等于18,19,20

GROUP BY:为查找出来的数据进行分组统计,比如统计一张学生信息表中有多少个男生。group by通常都会配合AVG()、MAX()、COUNT()、sum()等聚合函数使用,不会单独使用

select addr,count(id) from t1 group by addr  #统计表中各地区各有多少人,这里用到了count()函数对id列进行统计,然后用addr进行分组
select age,height,count(*) from student group by age,height;  #对多列数据进行分组统计


HAVING:对group by分组后的数据再次进行筛选,优先级在where之后
select age,count(*) from student group by age having age >18 ;


REGEXP:正则表达式匹配

select * from student where name REGEXP '^tang' ;


二、MySQL常用函数(不同函数可嵌套组合使用)
CONCAT():实现字段拼接,函数中没有用引号的都属于表中的字段
select concat(name,age) from student  #拼接name和age字段
select concat(user,'@',host) from mysql.user;  #显示数据库中所有用户的快捷办法

AS():为字段起别名,AS关键词其实可以省略不写
select *,concat(company,address) as company_info from student  #将concat拼接出来的字段命名为company_info 
select address addr,concat(company,address) company_info from student;  #省略as的写法

LEFT()、RIGHT():从左或从右截取指定长度的字符串
select left(name,5) from student;  #截取name列前5个字段


LENGTH():返回指定列的字符串长度


LOWER()、UPPER():将指定列的字符串修改为小写或大写


LTRIM()、RTRIM():将字符串左边或右边的空格去掉后返回


SUBSTRING():指定需要截取的字符串范围并返回
select substring(name,1,3) from student ;  #返回name列的第一到第三个字符

NOW():返回系统当前时间
select now();

COUNT():行数统计
select count(name) from student  #统计name列的长度,不会包含空行
select count(*) from student;  #统计整张表的长度,包含空行

AVG():对查询结果进行平均值计算


UNION、UNION ALL:聚合2个查询的结果集,UNION会自动去重复,UNION ALL不会

select * from world.city where countrycode='CHN' union all select * from world.city where countrycode='USA'

MAX()、MIN():找出指定列中最大或最小的一行
select MAX(id) from student;

三、子查询
子查询就是嵌套进行多次查询的一个过程,主要解决AVG等聚合函数不能写在where条件中的问题
select age,height from studeng where age > ( select avg(age) from student);


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《MySQL基础教程(6)MySQL的子句、函数与子查询用法
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-289.html  [生成短网址]

已有 0/2229 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~