我们在使用Mysql数据库存储数据时,对数据的查询方法是至关重要的,此博客主要介绍Mysql数据库的查询数据方法。
单表查询
单表查询就是我们仅对一个表进行查询,我们可以首先创建一个名为table的表单:
create table student(
id char(36) primary key,
name varchar(8) not null,
age int(3) default 0,
mobile char(11),
address varchar(150)
)
insert into student
values ('9b4435ec-372c-456a-b287-e3c5aa23dff4','张三',24,'12345678901','北京海淀');
insert into student
values ('a273ea66-0a42-48d2-a17b-388a2feea244','李%四',10,'98765432130',null);
insert into student
values ('eb0a220a-60ae-47b6-9e6d-a901da9fe355','张李三',11,'18338945560','安徽六安');
insert into student
values ('6ab71673-9502-44ba-8db0-7f625f17a67d','王_五',28,'98765432130','北京朝阳区');
insert into student
values ('0055d61c-eb51-4696-b2da-506e81c3f566','王_五%%',11,'13856901237','吉林省长春市宽平区');
查询语法:
select *|字段列表|表达式 from table_name [where 条件] [order by 字段列表]
1. *:
*相当于按照表中字段顺序罗列表中的所有字段,但在日常工程开发时,由于使用*非常占用内存,我们通常不采用*进行查询,但在数据库规模较小时,使用*进行查询十分的方便。
2. 字段列表:
当我们不使用*对全部字段进行查询时,就说明我们的查询结果只是表中部分字段,所以我们要将显示的字段罗列出来,字段之间以逗号间隔。
比如我们对student表的name,address进行查询:
select name,address from student
3.表达式:
当然,查询结果也可以是算术运算符也可以是数据库中的函数:
select age+1 from student;
select length(name) from student;
4.table_name:
table_name为需要查询的表名
5.where:
指定查询过滤条件
6.order by:
对查询结果进行排序
别名
1.字段别名
select所选字段后面可以指定别名以使查出来的结果所显示的字段更好理解,字段名与别名之间使用空格或as关键字间隔;为了阅读方便,推荐使用as关键字这种方式定义字段别名。
select age+1 stu_age from student;
select length(name) as name_length from student;
在默认情况下,查询结果中显示的字段名为大写字母,如果别名中包含空格、特殊字符(例如%)或者对大小写敏感,则别名需要使用双引号引起来。
select age+1 "stu age" from student;
select length(name) as "name%length" from student;
#不加双引号,上面SQL语句均无法执行
2.表别名
表别名:表名与别名之间使用空格间隔(MySQL数据库中表的别名可以使用as关键字间隔,但Oracle数据库不允许)。
select student.name,student.address from student
select s.name,s.address from student s#表别名简化了SQL语句
表的别名最多可以有30个字符;
表别名的作用方法在整个select语句中都有效,离开select语句即无效。
WHERE
where是为了指定查询的条件
1.like
进行数据模糊查询
%:匹配0次或多次
select * from student where name like '张%’;#查询姓张的学生信息
select * from student where name like '%李%’;#查询姓名中含有“李”字的学生信息
_:只匹配1次
select * from student where name like '张_’;#查询两个字的张姓学生信息
escape:取消%或_字符的通配符特性:
#查询姓名中含有%字符的学生信息
select * from student where name like '%#%%' escape ‘#’
#查询姓名中含有%字符的学生信息
select * from student where name like '%$_%' escape ‘$’
#查询姓名以%%结尾的学生信息
select * from student where name like ‘%A%A%' escape ‘A’;
注意: escape后面单引号中只能是单个字符; escape后面可以是字母、#、$、,、\等字符,不能是_;
逻辑条件:and、or
#查询张姓且地址中含有北京的学生信息
select * from student where name like '张%' and address like '%北京%’;
#查询张姓或地址中含有北京的学生信息
select * from student where name like '张%' or address like '%北京%’;
between 下限 and 上限:
等同于“(column_name>=下限) and (column_name<=上限)”
注意: “between 下限 and 上限”一定是小值在前大值在后,否则查不出数据; “between 下限 and 上限”查询数据包括边界值;
order by
查询结果进行排序,必须置于SQL语句的最后,语法:order by {column_name1, column_name2, column_name3, ......column_namen} [asc|desc] 说明: {column_name1, column_name2, column_name3, ......column_namen}:指定需要排列的字段 [asc|desc]:指定排列策略,asc以升序排列,desc以降序排列,默认以升序排列。
distinct
distinct:去除相同的行(“相同的行”指不同行之间的相同列中的数值相同)
例如: select distinct age from student; select distinct age,name from student; 注意:该关键字必须紧跟select关键字的后面,即如下写法是错误的: select age,distinct name from student