【MYSQL学习第七天】 mysql查询示例

查询数据库中部分字段的信息

SELECT 语句可以实现对表的选择及连接等操作。

SELECT 语句可以从一个或多个表中选取特定的行和列,结果通常是生成一个临时表。在执行过程中系统根据用户的 标准从数据库中选出匹配的行和列,并将结果放到临时的表中。

子任务 1 查询数据表中所有字段的值

语法:

select * from 表名; 

其中 * 代表表中的所有列

例 1:查看 Student 表中的所有数据

select * from Student;

例 2:查询 Course 表中的所有数据

select * from Course;

注:当使用 select 语句进行数据查询时,检索出的列是未排序的,其显示是按 mysql 底层的存储顺序进行显示。

子任务 2 查询数据表中部分字段的值

如果一个表中存储的信息较多,有时并不需要查看所有字段的值,只是根据需要查看某个或某些字段的 值,这时也可以使用 select 语句实现。从上一任务可以看到,如果表的字段特别多,而用户又不关注所有列时,可以只查看关注的某一列。

1、只查询一个字段

语法:

select 字段名 from 表名;	

例 3:查询 Student 表中有哪些同学

select StuName from Student;			

例 4:查询课程表中有哪些课程名

select CourseName from Course;

2、查询多个字段:

如果关注表中多个列的内容,可以使用 select 语句检索多个列。

语法:

select 字段名 1,字段名 2......字段名 n from 表名;

注:每个字段名后用逗号隔开,但最后一个字段名后不加逗号。

例 5:查询 Student 表中的学生的学号、姓名和性别

select StuID,StuName,StuSex from Student;

例 6:查询课程表中的课程编号和课程名

select CourseID, CourseName from Course;

子任务 3 定义别名

给列重新起一个名字

语法

select 字段名 [as] 列标题

其中 as 可以省略,通常情况下不建议省略。

例 7:查询 Student 表的 StuName 字段将显示列名为 name,并显示原表

select StuName as name from Student;

在给列起列别名时,只是在显示结果的临时表中有效,即只改变显示结果,原表并没有被改变。如果起的列别名标题中有空格,要使用单引号引起来,但如果含_.则不用单引号。

子任务 4 查询数据表中表达式的值

1、使用计算字段

使用 select 语句进行查询时,待查询的字段可以不是表中原有的字段,而是表中各字段之间或字段与数 值的运算构成的表达式,这通常称为计算字段。

CREATE TABLE tmp_score(
	id int,
    name varchar(20),
    sx int comment '数学',
    yy int comment '英语',
    yw int  comment '语文'
);

INSERT INTO tmp_score values('1','张三',80,81,82);
INSERT INTO tmp_score values('2','李四',70,71,72);
INSERT INTO tmp_score values('3','王五',90,91,92);
select name, yw+sx+yy from tmp_score;

例 8:如上例表中数据,为所有同学的 yy 成绩加 10 分。

select *,yy+10
from tmp_score;

注:mysql 支持+ - * / 的基本运算

当使用计算字段时,只是在查询结果中显示了计算的结果,原表中的数据并没有改变。

2、使用拼接字段 concat

有时我们希望将显示查询结果按我们需求的格式进行显示,这就要用到拼接,即将多个值联结到一起构 成单个值。mysql 中,使用 concat()函数来拼接列。

concat 函数使用方法:

concat(参数 1,参数 2......参数 n)

其中参数可以是表中的字段名或者加入的字符串,若为字符串,应用引号引起来。

例 9:在上例 tmp_score表中,以 name(yw,sx,yy)的格式来显示每个同学的姓名及成绩。

select concat(name,'(',yw,',',sx,',',yy,')')
from tmp_score;

例 5.10:以姓名(学号,性别)的方式显示学生表中的信息

select concat(StuName,'(',StuID,',',StuSex,')')
from Student;

例 11:以学号(课程号,期末成绩) 的格式显示成绩表中的信息。

select concat(StuID,'(',CourseID,',',ExamScore,')')
from Score;

子任务 5 使用查询语句的输出功能

select 语句可以从数据表中查询信息,进行显示。

例 12:以下 select 语句均只完成输出后面内容,当为表达式时,输出表达式的计算结果。

select 'aa';
select 3*2;
select 3*2 as 乘积;
select 'hello'; # select 后面直接跟字符串,还可以跟转义字符
select now(); #输出当前日期和时间。

任务 2 根据指定条件进行查询

子任务 1 消除结果集中的重复行

语法:

SELECT DISTINCT | DISTINCTROW column_name [ , column_name…]

例 13:在 Student 表中查询学生的生源地都有哪些,去掉结果中的重复行。

select distinct Native from Student;

当检索多个字段时,必须每个字段的值都一样才认为是重复行

例 14:在 Student 表中查询学生的生源地和民族都有哪些,去掉结果中的重复行。

select distinct Native, National from Student;

当检索多个字段时,必须每个字段的值都一样才认为是重复行

例 15:在 tb_Student 表中查询学生的生源地和民族都有哪些,去掉结果中的重复行。

select distinct Native, National from Student;

本例中必须 Native 和 Natioal 都相同才认为是重复行。
即 distinct 用于后面的所有字段而不仅是紧跟在其后的字段。

子任务 2 实现有条件的筛选

**

mysql 中的运算符

**

1、简单条件运算符
< = <> != >= <= <=>安全等于
2、逻辑运算符
&& and
|| or
! not
3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符

between 条件一 and 条件二
is null /is not null:用于判断null值

2、where 子句的使用

在实际查询中,我们经常只需要符合条件的某些行而不是全部行,这时,可以使用 where 子句和特定的 操作符来实现选择行的目的。

语法:

select 
	字段名 1,字段名 2....字段名 n
from 表名
where 
	选条件

例 5.16:查询 Student 表中所有男生的学号、姓名。

select 
	StuId,StuName,StuSex
from Student
where 
	StuSex='男';

字符串常量在查询语句中要用单引号引起来。

例 17:查询 Student 表中生源地不是石家庄的同学的信息。

select * from Student
where Native !='河北石家庄';
--或写为:where Native <>'河北石家庄';

例 18:查询 Course 表中学分小于 5 分的课程。

select * 
from 
	Course 
where 
	Credit<5;

例 19:查询 Course 表中学分大于等于 6 分的课程。

select * 
from 
	Course
where 
	Credit>=6;
  • between 操作符

语法:

(not)between 表达式 1 and 表达式 2

表示值在表达式 1 和表达式 2 之间,包含表达式 1 和表达式 2

例 20:查询所有期末考试成绩在 80-90 之间的同学的成绩。

select * 
from 
	Score
where 
	ExamScore between 80 and 90;

例 21:查询期末考试成绩在 90 以上或者 70 以下的同学的成绩。

例 5.22:查询课程表中备注为空的课程信息。

select * 
from 
	Course
where 
	CourseRemark is null;

例 23:查询课程表中备注不为空的课程信息。

select * 
from 
	Course
where 
	CourseRemark is not null;

3、多条件查询

有时候查询时指定了多个条件并存,where 子句使用操作符来实现该功能。

where 子句中经常使用的操作符有:

  • and 操作符:两个或多个条件同时满足,如果有多个条件,可以使用多个 and 操作符。
  • or 操作符:满足多个条件中的任何一个即检索成功
  • in 操作符:满足多个条件中的一个
  • like 操作符:配合%通配符和_通配符实现模糊查询

and

例 24:查询 mb1502 班的男生的信息

select * 
from 
	Student
where 
	ClassID=’mb1502’ 
	and StuSex=’男’;

例 25:查询生源地为石家庄且为汉族的男生。

select * 
from 
	Student
where 
	Native='河北石家庄' 
	and National='汉族' 
	and StuSex='男';

or

连接两个或多个条件,检索出满足其中某一个或多个条件的记录

例 26:查询生源地为保定或石家庄的同学的信息。

select * 
from 
	Student
where 
	Native='河北保定' or Native='河北石家庄';

注:or 操作符连接的是两个或多个完整的条件,上例中的 where 子句不能写成:where Native=河北保定’or ’河北石家庄’;

in

使用 in 关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即 返回 TRUE,否则返回 FALSE。

语法:

(not) in (1,值 2,值 3....)

例 27:查询 10101 课程或 10102 课程或 20201 课程的成绩。

select * 
from 
	Score
where 
	CourseID in (10101,10102,20201);

通常情况下,能用 in 操作符完成的查询用 or 操作符也可以完成,如上例可以用 or 操作符改写如下:

select * from Score
where CourseID=10101or CourseID=10102or CourseID=20201;

in 和 or 的区别

例 28:查询生源地既不是保定也不是石家庄的同学的信息。

select * 
from 
	Student 
where 
	Native not in('河北保定','河北石家庄');

like与通配符%

有时查询给定的条件并不精确,sql 语句提供了模糊查询功能,其实现方法是在 where 子句中使用 like 操
作符,当其与%通配符搭配使用时,可实现匹配任意多个任意字符,包含零个字符。

例 29:查询 Student 表中姓李的同学的信息。

select * 
from 
	Student 
where 
	StuName like '李%';

例 30:查询 Student 表中名字中含有“浩”字的同学的信息。

select * 
from 
	Student
where 
	StuName like '%浩%';

例 31:查询姓名为两个字的李姓同学。

select * 
from 
	Student
where 
	StuName like '李_';
  • %不能匹配 null

4、多个操作符时的计算次序

当 where 子句的条件中有多个操作符时,SQL 语言优先组合 and 操作符。

例 32:查询 Student 表中生源地为保定或石家庄的男生信息。

select * 
from 
	Student
where 
	Native='河北保定' or Native='河北石家庄' and Stusex='男';

任务 3 完成对查询结果的排序

子任务 1 使用一个字段进行排序

order by 子句可以实现排序(升序、降序)

语法:

ORDER BY {col_name | expr | position} [ASC | DESC] , ...

ORDER BY 子句后可以是一个列、一个表达式或一个正整数。正整数表示按结果表中该位置上的列排序。
如 ORDER BY 3 表示对SELECT 的列清单上的第 3 列进行排序。 升序:ASC 降序:DESC 默认升序

例 32:查询 Student 表中学生的学号和姓名,并按学号升序排列。

select 
	StuID,
	StuName 
from 
	Student
order by 
	StuID [ASC];

例 33:查询 Score 表中 10101 课程的成绩,并按成绩降序排列。

 select * 
 from 
 	Score
 where 
 	CourseID=10101order by 
 	ExamScore DESC;

mysql 中的 orber by 子句还可以用非检索的列来进行排序。

例 34: 查询 Student 表中的学生的姓名和性别并按学号升序排列。

select 
	StuName,
	StuSex
from 
	Student
order by 
	StuID;

例 35:查询 Student 表中的信息,并按显示结果的第四列进行升序排列。

select * 
from 
	Student
order by 4;

子任务 2 使用多个字段进行排序

在实际应用中,往往需要按多个字段对检索结果进行排序

举例

语法:

select 
	字段名 1,字段名 2......字段名 n
from 
	表名
order by 
	字段名 1,字段名 2......字段名 n

order by 子句的各个字段名间用逗号隔开,最后一个字段后不加逗号。

例 36:查询 Student 表中的同学的学号、姓名和性别信息,同名学生按学号升序排列。

select 
	StuID,
	StuName,
	StuSex 
from 
	Student
order by 
	StuName,StuID;

例 37:查询 Score 表中的信息,按课程号降序排列,相同课程号按学号降序排列。

select * 
from 
	Score
order by 
	CourseID DESC,StuID DESC;

当 order by 后面有多个字段时,需逐个指定排序方向,即每个待排序字段后都要加关键字 ASC 或 DESC,
否则未加关键字的字段将默认为 ASC。

任务 4 实现分页查询的基础

如果对检索结果有条件的筛选显示,则要用到 LIMIT 子句。

LIMIT 子句是 SELECT 语句的最后一个子句, 主要用于限制被 SELECT 语句返回的行数。

语法:

LIMIT {[offset,] row_count | row_count OFFSET offset}

offset 和 row_count 都必须是非负的整数常数,offset 指定返回的第一行的偏移量,row_count 是返回的行数。

例如,“LIMIT 3”表示返回 SELECT 语句的结果集中最前面 3 行。

“LIMIT 5,3”则表示从第 6 行开始返回 3 行。值得注意的是初始行的偏移量为 0 而不是 1。

例 38:查询 Student 表中的前三个同学的信息。

select * 
from 
	Student
limit 3;

例 39:查看 Score 表中 10101 课程成绩前三名的同学。

select * 
from 
	Score
where 
	CourseID='10101'
order by 
	ExamScore DESC
limit 3;
发布了19 篇原创文章 · 获赞 9 · 访问量 872

猜你喜欢

转载自blog.csdn.net/qq_43761222/article/details/104905053
今日推荐