MySQL(day 3)
1.DQL (Date Query Language)
1.1 指定查询字段
SELECT * FROM student; --查询全部学生
/* select 字段 from 表*/
SELECT `StudentNo`,`studentName` FROM student;--查询指定字段
SELECT `studentno` As 学号,`studentname` As 学生姓名 From student As s;--可以给字段取别名,也可以给表取别名;
SELECT CONCAT('姓名:',studentname) As 新名字 From student;
/* 函数 Concat(a,b)*/
语法:SELECT 字段,…FROM 表
1.2 去重查询
SELECT * FROM result;--查询全部从result中 SELECT `studentNo` FROM result;--查询那些同学参加了考试 SELECT DISTINCT `studentNo` FROM result;--发现重复数据,去重 SELECT VERSION;--查询系统版本 SELECT 100*3-1 As 计算结果; SELECT @@auto_increment;--查询自增步长 SELECT `studentno`,`studentResult`+1 AS `提分后` FROM result;--学员考试成绩+1后结果;
1.3 where 条件子句
作用:检索数据中符合条件的值;
SELECT `studentNo`,`studentResult` From result WHERE StudentResult>=95 && StudentResult<=100;
--查询考试成绩在5-100分之间
SELECT `studentNo`,`studentresult` From result WHERE studentresult BETWEEN 95 AND 100;
--模糊查询(区间)
SElect `studentNo`,`studentResult` FRom result WHERE StudentNo!=1000;
--除学号1000之外的学生成绩
SElect studentNo,`studentResult` FRom result WHERE NOT StudentNo=1000;--除学号1000之外的学生成绩
1.4模糊查询
比较运算符
运算符 | 语法 |
---|---|
IS NuLL | a is null |
Between and | a between B and C |
like | a like B,SQL匹配 |
IN | a in (a1,a2,a3…),a为a1,a2…其中一个为真 |
1.4.1 like 语句
SELECT `studentNo`,`studentname` FROM `student` WHERE studentname LIKE '刘%';
--查询姓刘的同学,like结合,%(代表0到任意字符),_(代表一个字符)
SELECT `studentno`,`studentname` FROM `student` WHERE studentname LIKE '刘_';
--查询姓刘的同学,名字后面只有一个字
SELECT `studentno`,`studentname` FROM `student` WHERE studentname LIKE '刘__';
--查询姓刘的同学,名字后面只有两个字
SELECT `studentno`,`studentname` FROM `student` WHERE studentname like '%嘉%';
--查询名字中间有嘉字的同学 %嘉%
1.4.2 in语句
SELECT `studentno`,`studentname` FROM `student` WHERE studentNo in(1001,1002,1003);
--查询1001,1002,1003号学员
SELECT `studentno`,`studentname` FROM `student` WHERE address in('XX','xxxxx');
--查询在XXX的学生
SELECT `studentno`,`studentname` FROM `student` WHERE address = '' OR adress is NULL;
--查询地址为空的学生
SELECT `studentno`,`studentname` FROM `student` WHERE `BornDate` is not null;
--查询出身日期不为空的同学
SELECT `studentNo`,`studentname` FROM `student` WHERE `BornDate` is null;
--查询出生日期为空的同学
注:in(具体的一个或多个值),与like语句不兼容;
1.5联表查询
1.5.1(join)
join (连接的表) on (判断的条件) 连接查询
where 等值查询
思路:分析查询的字段来自那些表(连接查询);确定使用哪种查询,确定交叉点(两个表中数据相同的);判断条件
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
on /*(where)*/ s.studentNo = r.studentNo;
--
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student AS s --AS可以省略
LEFT JOIN result r
on s.studentNo = r.studentNo;
--
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student AS s --AS可以省略
RIGHT JOIN result r
on s.studentNo = r.studentNo;
--
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student AS s --AS可以省略
LEFT JOIN result r
on s.studentNo = r.studentNo
WHERE StudentResult is null;
--查询缺考的学生
思考题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XoxGoIj2-1609852786302)(C:\Users\q3315\AppData\Roaming\Typora\typora-user-images\image-20210105111117538.png)]
SELECT s.studentNo,studentname,SubjectNo,StudentResult
FROM student s
RIGHT JOIN result r
on s.studentNo = r.studentNo
INNER JOIN `subject` sub --再连接一张表
on r.SubjectNo = sub.subject;
--涉及多表查询
总结
- SELECT 查询的数据
- FROM 表
- 联接方式 JOIN 联接的表 ON 交叉条件
- 多张表查询从两张表开始
from a left join b 以a为基准查询;
from a right join b 以b为基准;
from a INNER join b 表中至少有一个匹配就返回行
1.5.2 自连接(了解)
自己的表与自己的表连接,核心是一张表拆成两张表
在这里插入图片描述