DQL_MySQL
4.DQL(查询数据){SUPER 重点}
4.1DQL
(Data Query Language : 数据查询语言)
-所有的查询操作; Select
数据库中最核心的语言
create database `school`;--创建数据库school
use `school`;--使用school数据库
drop table if EXISTS `grade`;--删除grade历史表
create table `grade`( --创建表grade
`GradeID` int(11) not null auto_increment comment '年级编号',
`GradeName` varchar(50) not null comment '年级名称',
primary key(`GradeID`)
)engine = innodb auto_increment=6 default CHARSET=utf8;
--插入数据
insert into `grade`(`GradeID`,`GradeName`)values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四');
--删除result历史表
drop table if exists `result`;
--创建表result
create table `result`(
`StudentNo` int(4) not null comment '学号',
`SubjectNo` int(4) not null comment '课程编号',
`ExamDate` TIMESTAMP not null comment '考试日期',
`StudentResult` int(4) not null comment '考试成绩',
key `SubjectNo`(`SubjectNo`)
)engine = innodb default charset=utf8;
--插入数据
insert into `result`(`StudentNo`,`SubjectNo`,`ExamDate`,`StudentResult`)values(100,101,'2020.1.1',88);
--删除student历史表
drop table if exists `student`;
--建表student
create table `student`(
`StudentNo` int(4) not null comment '学号',
`LoginPwd` varchar(20) DEFAULT null,
`StudnetName` varchar(20) DEFAULT null comment '学生姓名',
`Sex` tinyint(1) default null comment '性别,取值0或1',
`GradeId` int(11) default null comment '年级编号',
`Phone` varchar(40) not null comment '联系电话,允许为空,可选输入',
`Address` varchar(255) not null comment '地址,允许为空',
`BornDate` TIMESTAMP default null comment '出生日期',
`Email` varchar(50) not null comment '邮箱账号',
`IdentityCard` varchar(18) default null comment '身份证号',
PRIMARY key (`StudentNo`),
UNIQUE key `IdentityCard`(`IdentityCard`),
key `Email`(`Email`)
)engine=MYISAM default charset=utf8;
--建表
create table `subject`(
`SubjectNo` int(11) not null auto_increment comment '课程编号',
`SubjectName` varchar(40) default null comment '课程名称',
`ClassHour` int(4) default null comment '学号',
`GradeId` int(4) default null comment '年级编号',
primary key(`SubjectNo`)
)engine=innodb auto_increment=18 default charset=utf8;
4.2指定查询字段
-查询表中所有的数据&指定数据
--select * from 表名; 查询所有的表数据
--完整语法 select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [having子句] [order by 子句] [limit子句];
--select 字段1,... from 表名;
select * from `student`;
select `StudentNo`,`Address` from `student`;
-别名设置
--别名as语句 给结果起一个新名字
--可以给字段和表起别名
select `StudentNo` as 学号,`Address`as 地址 from `student`;
-函数
--函数 Concat(a,b)
select concat('姓名:',StudentName) as 新名字 from student;
去重 distinct
--去重复值
select distinct `StudentNo` from result;
-- 所有成绩加一分
select `StudentNo`,`StudentResult`+1 as '加分后成绩' from result;
查看当前系统版本
--查看当前版本 函数
select version();
用来计算
-- 用于计算 表达式
select 100*2-4 as 计算;
4.3where条件子句
作用:检索数据中符合条件的值
搜索的条件为一个或者多个表达式组成,结果为布尔值
逻辑运算符(英文状态下)
| 逻辑运算符 | 语法 | 描述 |
|---|---|---|
| and && | a and b(a && a) | 逻辑与,两个值都为真时,结果为真 |
| or || | a or b(a || b) | 逻辑或,两个值中有一个值为真,结果为真 |
| not ! | not a (!a) | 逻辑非,做取反操作 |
--查询学生中成绩大于等于95小于等于100的学生学号以及分数
select `StudentNo`,`StudentResult` from result
where `StudentResult`>=95 and `StudentResult`<=100;
--between and 用法
select `StudentNo`,`StudentResult` from result
where `StudentResult` between 81 and 100;
--!的用法
select `StudentNo`,`StudentResult` from result
where `StudentNo` != 1001;
4.4模糊查询
模糊查询:比较运算符
| 运算符 | 语法 | 描述 |
|---|---|---|
| is null | a is null | 如果a为空,则结果为真 |
| is not null | a is not null | 如果a不为空,则结果为真 |
| between | a between b and c | 如果a在b和c之间,则结果为真 |
| like | a like b | SQL匹配,如果a匹配b,则结果为真 |
| in | a in(a1,a2,a3...) | 假设a在a1,a2,a3...其中某一个值中,则结果为真 |
-- =======================模糊查询===============
-- =========like==========
select `StudentNo`,`StudentName` from student
where `StudentName` like 'R%';
select `StudentNo`,`StudentName` from student
where `StudentName` like 'R___';
select `StudentNo`,`StudentName` from student
where `StudentName` like '%o%';
-- =======in(具体的一个或者多个值)========
select `StudentNo`,`StudentName` from student
where `StudentNo` in (1001,1002);
select `StudentNo`,`StudentName` from student
where `Address` in ('克利夫兰');
4.5联表查询
JOIN 对比


-- =======================联表查询========================
--查询了参加了考试的同学(学号、姓名、科目编号、分数)
/*
思路:
1、分析需求,分析查询的字段来自哪些表(连接查询)
2、确定使用哪些连接查询 7中
3、确定一个交叉数据
4、判断条件:学生表中的 StudentNo = 成绩表中的 StudentNo
*/
-- inner join 求交集
select s.StudentNo,StudentName,SubjectNo,StudentResult
from `student` as s
inner join `result` as r
where s.studentNo=r.studentNo;
-- right join
select s.StudentNo,StudentName,SubjectNo,StudentResult
from `student` as s
right join `result` as r
on s.studentNo = r.studentNo;
-- left join
select s.StudentNo,StudentName,SubjectNo,StudentResult
from `student` as s
left join `result` as r
on s.studentNo = r.studentNo;
/*
参加考试同学信息:学号、学生姓名,科目名、分数
三个表 student subject result
*/
select s.StudentNo,StudentName,SubjectName,StudentResult
from student s
right join result r
on r.StudentNo=s.StudentNo
inner join `subject` sub
on r.SubjectNo=sub.SubjectNo;
| 操作 | 描述 |
|---|---|
| inner join | 如果表中至少有一个匹配,就返回行 |
| left join | 即使右表中没有匹配,也会从左表中返回所有的值 |
| right join | 会从左表中没有匹配,也会从右表中返回所有的值 |
join on(判断的条件) 连接查询
where(连接的表) 等值查询
自连接
自己和自己连接;核心:一张表拆为两张一样的表
父类
| categoryid | categoryName |
|---|---|
| 2 | 信息技术 |
| 3 | 软件开发 |
| 4 | 数据库 |
| 5 | Web开发 |
子类
**
| pid | categoryid | categoryName |
|---|---|---|
| 1 | 2 | 信息技术 |
| 1 | 3 | 软件开发 |
| 3 | 4 | 数据库 |
| 1 | 5 | Web开发 |
create table `category`(
`categoryid` int(10) UNSIGNED not null auto_increment comment '主题id',
`pid` int(5) not null comment '父id',
`categoryName` varchar(40) not null comment '主题名字',
primary key (`categoryid`)
)engine=innodb auto_increment=9 default charset=utf8;
insert into `category`(`categoryid`,`pid`,`categoryName`)
values(2,1,'信息技术'),
(3,1,'软件开发'),
(4,3,'数据库'),
(5,1,'Web开发'),
(6,4,'PS技术');
-- 查询父子信息 --把一张表看成两张一模一样的表
select a.`categoryName`as '父栏目',b.`categoryName` as '子栏目'
from `category` as a ,`category` as b
where a.`categoryid`=b.`pid`;
4.6分页和排序
排序
-- =========分页limit 和 排序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 = '软件工程'
order by `StudentResult` desc;
分页
-- =========分页limit 和 排序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 = '软件工程'
order by `StudentResult` desc;
-- 分页;每页显示一条数据
-- 语法:limit 起始位置,页面的大小
-- limit 0,1 1到2的数据
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 = '软件工程'
order by `StudentResult` asc
limit 0,1;
语法:limit(查询起始下标,pageSize)
4.7子查询
本质:在where语句中嵌套一个子查询语句
where (select * from ...)
-- ======子查询=========
-- 由里及外
select `StudentNo`,`SubjectNo`,`StudentResult`
from `result`
where `StudentNo` = (select SubjectNo from `subject`
where SubjectName = '软件工程'
);
select `StudentNo`,`StudentName`
from `student` s
where `StudentNo`=(
select `StudentNo` from `result`
where `StudentResult` > 80
limit 1
);
4.8.分组和过滤
select SubjectName,AVG(StudentResult) as '平均分'
from result r
inner join `subject` sub
on r.`SubjectNo`=sub.`SubjectNo`
GROUP BY r.`SubjectNo` -- 分组
HAVING 平均分 > 80; -- 过滤(和where一样效果,知识位置不同,在group by后面)
DQL_MySQL的更多相关文章
随机推荐
- Python实用笔记 (5)使用dictionary和set
dictionary 通过键值存储,具有极快的查找速度,但占用空间比list大很多 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Micha ...
- Myeclipse启动WebLogic 总是报账号密码无效<Authentication denied: Boot identity not valid
在MyEclipse下配置了Weblogic 11后,每次启动从报错: Critical> 看了下描述,是用户名及密码什么的问题,我想起来,配置Weblogic 的域的时候将密码改成了12345 ...
- JS中字符串和数组的相互转化
题目:利用var s1=prompt("请输入任意的字符串:") ,可以获取用户输入的字符串,试编程将用户输入的字符串“反转”,并且将字符串输出. 思路:字符串对象的方法中并没有实 ...
- 基于小程序请求接口 wx.request 封装的类 axios 请求
基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...
- Spring 容器的初始化
读完这篇文章你将会收获到 了解到 Spring 容器初始化流程 ThreadLocal 在 Spring 中的最佳实践 面试中回答 Spring 容器初始化流程 引言 我们先从一个简单常见的代码入手分 ...
- (八十九)c#Winform自定义控件-自定义滚动条(treeview、panel、datagridview、listbox、listview、textbox)
官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...
- Red Hat Enterprise Linux 6上安装Oracle 11G(11.2.0.4.0)缺少pdksh包的问题
RHEL 6上安装Oracle 11G警告缺少pdksh包 前言 相信很多刚刚接触学习Oracle的人,在RHEL6上安装11.2.0.3 or 11.2.0.4这两个版本的时候, 都遇到过先决条件检 ...
- 猿灯塔:疫情冲击,去体验远程面试被怼10分钟,今年Java开发找工作真难
网行业,美团王兴曾说:“2019年可能会是过去十年里最差的一年,却是未来十年里最好的一年”.没想到预言竟然快成真了? 年前很多企业一波裁员,2020年又受疫情影响,延长了假期,各大企业复工时间拉长,招 ...
- Azure Data Box
一,引言 最近博主又要面临考试了,随笔又再次缓慢更新,说起考试,之前在微软的 ms learn的课程上有接触到一个叫 Azure Data Box的,刚好今天也花了一个多小时看了一下相关文档,下面就正 ...
- wcf服务各种情况下应用
1.控制台调用 第一步,添加wcf服务 2.写接口,记得要加好契约特性. 3.声明一个类继承wcf服务. 4.ipconfig配置 5.控制台运行 6.运行app.config里面,加上调用的接口方法 ...