Java---MySQL(二)

对表进行查询数据

SELECT语句
select语句用来查询数据库数据,是数据库语言中最核心、最重要的语句,也是使用频率最高的语句。
select语法:

/*
SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
    [left | right | inner join table_name2]  #联合查询
    [WHERE ...]  #指定结果需满足的条件
    [GROUP BY ...]  #指定结果按照哪几个字段来分组
    [HAVING]  #过滤分组的记录必须满足的次要条件
    [ORDER BY ...]  #指定查询记录按一个或多个条件排序
    [LIMIT {[offset,]row_count | row_countOFFSET offset}];
    # 指定查询的记录从哪条至哪条
*/

查询指定字段:

Select 字段名1,字段名2,字段名3,...  from  表名;

对表中的列的数据进行查询,结果为该列的所有值。

select StudentName,StudentNo from student;
/*在student表中,对学生学号和学生姓名进行查询*/

*,星号代表全部的意思,可以用来查询整个表的数据。

AS语句
as语句用来起别名,可以给列起别名,也可以给表起别名,还可以给计算或总结的结果起一个新的名字。

select StudentNo AS 学号,StudentName as 姓名 from student; //给指定的数据列起别名
select StudentName,StudentNo from student as s;  //给表起别名
select 100*3-1 as 计算结果;  //给计算的结果起别名

DISTINCT关键字的使用
用于去除select语句查询结果中重复的记录,只保留一条。

select distinct StudentNo from result;  //在成绩表中,因为一个学生会考多门课程,所以不使用distinct关键字,那么查询的结
果会是同一个学号会出现多次,使用之后,重复的学号就被去掉了。
where语句

where条件语句用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成。
逻辑操作符

操作符名称语法描述
AND或&&a AND b 或 a && b逻辑与,同时为真人,结果才为真
OR或丨丨a AND b 或 a丨丨b逻辑或,只要有一个为真,结果就为真
NOT或!NOT a或!a逻辑非,若操作数为假,结果则为真
select StudentNo,StudentResult
from result
where StudentResult>=95 and StudentResult<=100; // 查询成绩在95到100之间的学生的学号和成绩。

select StudentName from student where Address='' or Address is null; //查询地址为null的学生姓名

select StudentNo,StudentResult
from result
where StudentNo!=1000; //查询学号不是1000的学生的学号和成绩

比较操作符

操作符名称语法描述
is NULLa is NULL若操作符为NULL,则结果为真
is NOT NULLa is NOT NULL若操作符不为NULL,则结果为真
BETWEENa BETWEEN b AND c若a范围在b与c之间,则结果为真
LIKEa LIKE bSQL模式匹配,若a匹配b,则结果为真
INa IN (a1,a2,a3,…)若a等于a1,a2。。。中的某一个,则结果为真
select StudentName from student where BornDate is null;  //查询出生日期没有填写的学生姓名

select StudentName from student where BornDate is not null ; //查询出生日期填写的学生姓名

select StudentNo,StudentResult
from result
where StudentResult between 95 and 100; //查询成绩在95到100之间的学生学号和姓名

select StudentNo,StudentName from student where StudentName like '%文%'; //查询名字中带有文字的学生学号和姓名

select StudentNo,StudentName from student where StudentNo in (1000,1001,1002); //查询学号是1000,1001,1002的学生学号和姓名
连接查询

在查询数据时,由于要查询的数据在两张表中,这时就需要进行连接查询。
连接查询分为内连接,外连接和自连接。外连接又分为左连接和右连接。

操作符名称描述
INNER JOIN如果表中有至少一个匹配,则返回行
LEFT JOIN即使右表中没有匹配 ,也从左表中返回所有的行
RIGHT JOIN即使左表中没有匹配,也从右表中返回所有的行
select s.StudentNo,StudentName,SubjectNo,StudentResult
from student s
inner join result r
on r.StudentNo=s.StudentNo;  
//通过学号这个公共字段将student表和result表进行内连接,查询学生学号,姓名,课程号和成绩。
//内连接是组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集部分。

select s.StudentNo,StudentName,SubjectNo,StudentResult
from student s
right join result r
on s.StudentNo=r.StudentNo;
//通过学号这个公共字段将student表和result表进行右连接,查询学生学号,姓名,课程号和成绩。
//左表只会显示符合搜索条件的记录,而右表的记录将会全部表示出来。左表记录不足的地方均为NULL。

select s.StudentNo,StudentName,SubjectNo,StudentResult
from student s
left join result r
on s.StudentNo = r.StudentNo;
//通过学号这个公共字段将student表和result表进行左连接,查询学生学号,姓名,课程号和成绩。
//左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

自连接
数据表与自身进行连接
我们以先行课为例:
在这里插入图片描述
id代表课程号,subjectname代表课程名字,AdvanceClassid代表先行课id
先行课表示我们在学习这门课程之前要先学习这门课程的先行课,比如说我们要学习计算机,那么我们要先学习数学。如果要学习数据库,那么要先学习计算机。所以说数学是计算机的先行课,计算机是数据库的先行课。
我们将这张表进行自连接,那么就可以得到上述这些结果。

select a.subjectname as '先行课',b.subjectname as '课程名'
from subject as a,subject as b
where a.id=b.AdvanceClassid;

得到的结果就为:
在这里插入图片描述

ORDER BY语句

order by语句用于对查询的结果进行排序,默认是按照ASC进行升序,使用关键字DESC可以对结果降序排序。

select s.StudentNo,StudentName,SubjectName,StudentResult
    from student s
    inner join result r
    on s.StudentNo=r.StudentNo
    inner join subject sub
    on r.SubjectNo=sub.SubjectNo
    where SubjectName='数据库结构-1'
    order by StudentResult desc;
    //查询 课程为数据库结果-1的所有信息(学号,学生姓名,课程名,课程成绩) 将结果进行降序排序
分页

分页的关键字为LIMIT,可以将查询的结果进行分页
语法:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
//其中 [offset,] rows 指的是从第几行开始  ,  rows OFFSET offset 指的是每页有多少行
//例如:
select * from student
limit 0,5;
//查询学生的所有信息,从第0行开始,显示5行
GROUP BY语句

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
比如说我们想要查看每个课程的考试人数是多少

select count(*)as 考试人数,SubjectNo as 课程号
FROM result
GROUP BY SubjectNo;
//以课程号分组,查询每个课程号的考试人数
HAVING语句

HAVING语句是在GROUP BY语句之后使用,对分组的数据进行过滤。 所以,有GROUP BY语句才能有HAVING子句。

SELECT SubjectNo AS 课程号,COUNT(*)AS 考试人数
FROM result
WHERE SubjectNo BETWEEN 10 AND 16
GROUP BY SubjectNo
HAVING COUNT(*)>=18;
//查询课程号在10到16之间,并且考试人数大于等于18人的课程号和考试人数
简单的数据库函数
SELECT ABS(-8);  //取绝对值
SELECT CEILING(9.4); //向上取整
SELECT FLOOR(9.4); //随机数
SELECT RAND(); //返回0-1之间的随机数
SELECT CHAR_LENGTH('I LOVE YOU'); //返回字符串包含的字符数
SELECT REPLACE('I LOVE YOU','YOU','THE WORLD');  //替换字符串
SELECT SUBSTR('狂神说坚持就能成功',4,6); //截取字符串
SELECT NOW(); //获取当前日期和时间 
SELECT YEAR(NOW()); //获取当前年份
SELECT MONTH(NOW()); //获取当年月份
SELECT VERSION(); //获取版本信息
SELECT USER(); //获取用户信息

聚合函数

函数名称描述
COUNT()返回满足select条件记录总和数
SUM()返回数字字段或表达式列做统计,返回一列的总和
AVG()返回数字字段或表达式做统计,返回一列的平均值
MAX()可以为数值字段、字符字段或表达式列做统计,返回最大的值
MIN()可以为数值字段、字符字段或表达式列做统计,返回最小的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值