本博文源于mysql,旨在对简单的查询语句做相应学习与练习。内容涉及查询的基础语法,limit关键字、DISTINCT关键词、给字段设置别名、orderby关键子、where关键字查询、单一条件查询、多条件查询、使用like模糊查询。非常精彩!
在学习之前,首先需要创建表
create table tb_students_info
(id INT(11) PRIMARY KEY,
name VARCHAR(10),dept_id INT(11),
age INT(11),sex VARCHAR(4),height FLOAT,login_date DATE);
然后插入记录
insert into tb_students_info values(1,'Dany',1,25,'F',160,'2015-09-10');
insert into tb_students_info values(2,'Green',3,23,'F',158,'2016-10-22');
insert into tb_students_info values(3,'Henry',2,23,'M',159,'2016-10-23');
insert into tb_students_info values(4,'Jane',1,22,'F',156,'2016-10-12');
insert into tb_students_info values(5,'Jim',1,24,'M',158,'2016-10-22');
insert into tb_students_info values(6,'John',2,21,'M',152,'2016-10-24');
insert into tb_students_info values(7,'Lily',6,22,'F',160,'2016-10-25');
insert into tb_students_info values(8,'Susan',4,23,'F',166,'2016-10-26');
insert into tb_students_info values(9,'Green',3,22,'M',170,'2016-10-27');
insert into tb_students_info values(10,'Green',4,23,'M',193,'2016-10-23');
然后开始练习
查询语句基础
基础语法
SELECT
{* | <字段列名>}
[
FROM <表1>,<表2>....
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator><expression>}...]]
使用“*”查询表中的全部内容
在SELECT语句中使用星号“*”
通配符查询所有字段。SELECT查询记录最简单的形式是从一个表中检索所有记录,实现的方法是使用星号通配符指定查找所有列的名称,语法格式如下:
SELECT * FROM 表名;
例子:检索表tb_students_info所有字段的数据
查询表中指定的字段
同样的可以将*换为所有字段的名称,然后进行查询,这就是查询表中指定的字段。如果多列用逗号
隔开
例子:查询表中name列所有学生的姓名
select name from tb_students_info;
使用DISTINCT关键字去除结果中的重复行
英文中distinct意思就是不重复。因此如果想要不重复就需要用到这个关键字
例子:为年龄消除重复行
select age from tb_students_info;
select distinct age from tb_students_info;
在查询时给表和字段设置别名
格式<表名> [AS] <别名>
例子:为tb_students_info表取别名stu
select stu.name,stu.height FROM tb_students_info as stu;
这个取别名,体现在列名!在前面的学习中我们可以为列取别名,比如
例子:取出表中最高的身高
select max(height) as max_height from tb_students_info;
使用LIMIT关键字指定查询结果的行数
查询指定行数<LIMIT> [<位置偏移量>,] <行数>
第一个参数“位置偏移量”指示mysql从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,依次类推);第二个参数“行数”指示返回的记录条数。
来例子加深影响
例子:选取表中前四条记录
select * from tb_students_info limit 4;
例子:选取表中从第四条开始的5行记录
偏移量从0开始。
select * from tb_students_info limit 3,5;
使用ORDER BY对查询结果进行排序
格式ORDER BY {<列名> | <表达式> | <位置>} [ASC | DESC]
,下面对语法格式说明
- <列名>:指定用于排序的列。可以指定多个列,列名之间用逗号分隔
- <表达式>:指定用于排序的表达式
- <位置>:指定用于排序的列在SELECT语句结果集中的位置,通常是一个正整数。
- ASC|DESC:第一个为升序,第二个为降序,默认升序
应该注意的方面:
- 当排序的值中存在空值时,ORDER BY子句会将该空值作为最小值来对待
- 多个列排序时,从左到右执行
例子:查询表中height值,并作默认排序
select height as sort_height from tb_students_info order by height;
例子:对表进行排序,先按heightASC排序,再按nameDESC排序
select height as sort_height,
name as sort_name from tb_students_info order by height ASC,name DESC;
带WHERE关键字的条件查询
语法格式如下:
WHERE <查询条件> {<判定运算1>,<判定运算2>...}
对于判定运算有以下分类:
- <表达式1> {=|<|<=|>|>=|<=>|<>|!=} <表达式2>
- <表达式1> [NOT] LIKE <表达式2>
- <表达式1> [NOT] [REGEXP| RLIKE] <表达式2>
- <表达式1> [NOT] BETWEEN <表达式2> AND <表达式3>
- <表达式1> IS [NOT] NULL
常用的运算符
比较运算符
常用的运算符就是对分类做详细的介绍,如果大家学过高级语言,一些通用的核可以不表示。最想强调的是<=>
这个叫做安全等与运算符
- 用于比较两个表达式的值
- 若两个表达式的值中有一个为空值或者都为空值时,将返回UNKNOWN
- 若两个表达式彼此相等或都等于空值时,比较结果为true
- 若其中一个时空值或者都是非空值但不相等时,则为FALSE。
算术运算符
算术运算符+ - * / %
相信大家都在高级语言里见过,就不细表
逻辑运算符
其中有以下几种
- NOT或者! 逻辑非
- AND或者&& 逻辑与
- OR或者|| 逻辑或
- XOR 逻辑异或
位运算符
- | 按位或
- & 按位与
- ^ 按位异或
- << 按位左移 符号相反,就是右移
- ~ 按位取反,反转所有比特
单一条件的查询语句
这一部分就是将上面的讲过的进行单条件联系
例子:查找表中身高166的学生姓名
select name,height from tb_students_info where height=166;
多条件的查询语句
例子:查找表中身高大于160的,并且年龄大于20岁的学生信息
select * from tb_students_info where height>160 and age>20;
使用LIKE的模糊查询
这个like模糊查询涉及到% 和 _
其中%
就是匹配任何字符串,给定位置可以是0,1或多个字符;同理_
就是匹配单个字符,体会例子。如果对匹配机制感兴趣,可以查看这篇博文,讲的是自动机理论匹配模式
js|正则表达式原理底层–有限状态机
例子:查找表中name以G开头的学生
select * from tb_students_info where name like 'G%';
例子:查找表中name含有e的学生
select * from tb_students_info where name like '%e%';
例子:查找表中name以y结尾,且前面只有三个字母的学生姓名
select * from tb_students_info where name like '___y';
日期字段作为条件的查询语句
这个小节也是用之前的常用运算符进行练习,不过是对日期字段进行练习罢了。
例子:查找表中login_date在2016.10.25以前注册的学生信息
select * from tb_students_info where login_date<'2016-10.25';
例子:查找表中login_date在2016.10.1到2016.10.15日之间注册学生信息
select * from tb_students_info where login_date between '2016-10-1' and '2016-10-15';