从0基础学习MySQL数据库(三)
MySQL数据库技术
十、多表查询
1.分页查询
语法:limit 开始的索引,每页查询的条数
-- 公式:开始的索引=当前的页码-1 * 每页的条数-- 每页显示3条数纪录
select * from 表名 limit 0,3; -- 第一页
select * from 表名 limit 3,3; -- 第二页-- 注意:起始位置从0索引开始
2.多表查询
概念
合并多个数据表的信息查询,又称为连接查询
-- 案例表
-- 创建班级表
CREATE TABLE class(cno INT PRIMARY KEY,-- 班级编号cname VARCHAR(50),-- 班级名称address INT -- 班级所在教室号
)
-- 学生表
CREATE TABLE student(sno INT PRIMARY KEY,-- 学号sname VARCHAR(50),-- 姓名job VARCHAR(50),-- 职位mgr INT,-- 上级的学号score FLOAT(5,2), -- 成绩cno INT, -- 班级CONSTRAINT student_fk FOREIGN KEY(cno) REFERENCES class(cno)
)
-- 成绩等级表
CREATE TABLE scorerank(scorelow INT,scorehigh INT,rank VARCHAR(50)
)CHARACTER SET utf8
INSERT INTO scorerank VALUES(260,269,'普通');
INSERT INTO scorerank VALUES(270,279,'良好');
INSERT INTO scorerank VALUES(280,289,'优秀');
INSERT INTO scorerank VALUES(290,300,'杰出');INSERT INTO class VALUES(1,'classone',101);
INSERT INTO class VALUES(2,'classtwo',102);
INSERT INTO class VALUES(3,'classthree',103);
INSERT INTO class VALUES(4,'classfour',104);SELECT * FROM class;
SELECT * FROM student;INSERT INTO student VALUES(1801,'tom','banzhang',NULL,272,1);
INSERT INTO student VALUES(1802,'rose','fubanzhang',1801,265,2);
INSERT INTO student VALUES(1803,'jack','fubanzhang',1801,274,1);
INSERT INTO student VALUES(1804,'bob','math-kdb',1808,279,1);
INSERT INTO student VALUES(1805,'james','chinese-kdb',1808,267,3);
INSERT INTO student VALUES(1806,'george','english-kdb',1808,280,1);
INSERT INTO student VALUES(1807,'curry','mzuzhang',1804,270,2);
INSERT INTO student VALUES(1808,'fox','xuexiweiyuan',1802,282,2);
INSERT INTO student VALUES(1809,'simons','czuzhang',1805,270,1);
INSERT INTO student VALUES(1810,'love','luren',1807,262,3);
INSERT INTO student VALUES(1811,'tt','luren',1807,270,3);
分类
内连接
外连接
自连接
交叉连接
-- 案例:查询所有学生名和班级名,涉及到两张表
select sname,cname from student,class;
问题分析:
笛卡儿积,出现多余没用的数据
解决代码:
select sname,cname from student,class where student.cno = class.cno;--注意:如果解决笛卡尔积现象,多表查询的规定,多表查询的条件是至少不能小于表的个数-1,加了一个条件笛卡尔积就会消失
所以两张表至少有一个条件,三张表至少有两个条件
自连接查询
是指同一张表的连接查询
-- 查询学生的上级的姓名
SELECT s1.`sname`,boss.`sname` bossname FROM student s1,student boss WHERE s1.`mgr`=boss.`sno`;
内连接
等值连接、不等值连接、自然连接
-- 等值连接 inner join on 显示内连接,隐式内连接
SELECT sname,cname FROM student INNER JOIN class ON student.`cno`=class.`cno`;-- 显示内连接
SELECT sname,cname FROM student,class WHERE student.cno = class.cno; -- 隐式内连接-- 不等值连接,范围型,添加between and-- 自然连接: natural join 所有符合条件的结果返回,自动连接符合的条件进行查询
SELECT * FROM student NATURAL JOIN class;
外连接
左外连接、右外连接
-- 左外连接
语法:select 字段列表 from 表1 left join 表2 条件 左表为主
SELECT s.`sname`,c.`cname`,s.`id` FROM student s LEFT JOIN class c ON s.`cno` = c.`cno`;-- 右外连接,和左外类似
SELECT s.`sname`,c.`cname`,s.`id` FROM student s RIGHT JOIN class c ON s.`cno` = c.`cno`;
交叉连接
就是笛卡尔积 cross join
SELECT COUNT(*) FROM student CROSS JOIN class;
3.子查询
嵌套查询,select语句中包含select
如果一条语句中包含两个或者以上的select,那么这样的语句叫子查询
子查询出现的位置:
1.where后,作为条件的一部分
2.from后,作为被查下的一张表
当查询出现在where后作为条件时,还可以使用关键字:
all
any
子查询结果集的形式:
单行单列、单行多列、多行单列、多行多列
-- 单行单列:指返回一行一列数据的子查询语句
-- 案例:成绩大于bob的同学,第一步查询bob的成绩,第二步查询高于bob成绩的同学
SELECT score FROM student WHERE sname='bob';
SELECT * FROM student WHERE score>(SELECT score FROM student WHERE sname='bob');-- 案例2:与tom在一个班级的同学
SELECT cno FROM student WHERE sname='tom';
SELECT cno,sname FROM student WHERE cno=(SELECT cno FROM student WHERE sname='tom');-- 多行单列:返回多行数据的子查询
-- 案例:查询高于三班所有人成绩的同学,其中三班所有人成绩就是子查询
SELECT score FROM student WHERE cno=3;
SELECT * FROM student WHERE score > ALL(SELECT score FROM student WHERE cno=3);
-- 案例2:查询比三班任意一个人成绩高的同学名字,成绩,班级号
SELECT * FROM student WHERE cno=3;
SELECT sname,score,cno FROM student WHERE score > ANY(SELECT score FROM student WHERE cno=3);-- 单行多列的查询
-- 案例:查询与tt班级和职务都相同的同学
SELECT job,cno FROM student WHERE sname='tt';
SELECT * FROM student WHERE (job,cno) = (SELECT job,cno FROM student WHERE sname='tt');-- 多行多列的查询
--案例:查询出高于自己班级平均成绩的同学信息
-- 第一步:查询出各个班级的平均成绩和班级号
SELECT AVG(score),cno FROM student GROUP BY cno;
-- 第二步:把上面的查询作为一张子表查询
SELECT s1.`sname`,s1.`score`,s1.`cno`,s2.myscore FROM student s1,(SELECT AVG(score) myscore,cno FROM student GROUP BY cno) s2WHERE s1.`cno`=s2.cno AND s1.`score`>s2.myscore;
十一、MySQL事务处理
1.TCL语言:
Transanction Control Language 事务控制语言
事务:一个或一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
2.事务有哪些特点:
事物的ACID属性:
- **原子性(Atomicity)
从0基础学习MySQL数据库(三)相关推荐
- 0基础学MySQL数据库—从小白到大牛(20)大小写规范、sql_mode的合理设置
文章目录 一.SQL大小写规范 Windows和Linux平台区别 Linux下大小写规则设置 SQL编写建议 二.sql_mode的合理设置 介绍 宽松模式 vs 严格模式 模式查看和设置 一.SQ ...
- 0基础学MySQL数据库—从小白到大牛(38)数据库备份与恢复
文章目录 前言 物理备份与逻辑备份 MySQLdump实现逻辑备份 备份一个数据库 备份全部数据库 备份部分数据库 备份部分表 备份单表的部分数据 排除某些表的备份 只备份结构或只备份数据 备份中包含 ...
- mysql 9.0创建数据库_数据库基础学习——MySQL数据库知识小结(9)
1 MySQL 中的约束 1.1约束类型 • 非空约束(not null) • 唯一性约束(unique) • 主键约束(primary key) PK • 外键约束(foreign key) FK ...
- 0基础学MySQL数据库—从小白到大牛(30)数据库设计规范
文章目录 前言 一.为什么需要数据库设计 范式 范式介绍 范式都包括哪些 键和相关属性的概念 第一范式 第二范式(2nd NF) 第三范式(3rd NF) 小结 反范式化 概述 应用举例 反范式的新问 ...
- 0基础学MySQL数据库—从小白到大牛(23)逻辑架构
文章目录 前言 一.逻辑架构剖析 1.1服务器处理客户端请求 1.2Connectors 1.3第 1 层:连接层 1.4第 2 层:服务层 1.5第 3 层:引擎层 1.6 存储层 1.7小结 二. ...
- Java学习-MySQL数据库
Java学习-MySQL数据库 1.基础 1.1MySQL数据库在MAC电脑上的安装 1.2 数据基本概念 1.3 MySQL的一些基本操作 2.数据库的基本操作 2.1 DDL:操作数据库.表 (C ...
- 5天学习MYSQL数据库第一天剩余全部笔记(超级详细的mysql入门笔记适合新手反复看加深记忆)
这是关于五天学习MYSQL数据库的笔记,如果想要观看视频可以访问(视频链接(b站) 或者访问视频链接 之前的笔记已经记到了1.3的mysql基本介绍,接下来主要是: 2.1MySQL服务端框架 一. ...
- 重新学习Mysql数据库1:无废话MySQL入门
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- java连接MySQL几种方法_Java连接MySQL数据库三种方法
好久没有更新博客了!今天利用周目时学习了一下数据库mysql.介绍一下数据库的三种连接方式! 开发工具:Myeclipse MySQL5.6 MySQL连接驱动:mysql-connector-jav ...
最新文章
- emoji 乱码_这个自制emoji的网站,让你成为永远不输的斗图王者
- SpringCache与redis集成,优雅的缓存解决方案
- 神经网络防止过拟合的方法
- 理解值和对象-快照图
- java执行exe 没捕获到输出_Java程序员注意——六种异常处理的陋习
- how to execute tcode during startup
- android jni ——Field Method -- Accessing Field
- -js中json数组 以表格形式_为什么js类数组加上splice方法就是数组形式,不加就是对象形式?...
- 初探Golang(2)-常量和命名规范
- 前端学习(1745):前端调试值之查看元素最终样式
- 诺禾致源css客户端,诺禾,诺禾致源:CSS 基础教学
- nginx作用_云服务器:详解Nginx启用proxy_buffer缓冲
- 一些常用常新的数学公式(备查)
- 中国通用电阻器市场趋势报告、技术动态创新及市场预测
- Mysql的master,slave的配置
- Java求取主析取范式、主合取范式、成真赋值、成假赋值、打印真值表
- textarea输入框光标定位问题
- AngularJS停止定时器$interval
- Tire Defect Detection Using Fully Convolutional Network-论文阅读笔记
- 天气预报今天几点下雨_天气预报今天几点下雨【相关词_ 天气预报明天几点下雨】...
热门文章
- 0基础学MySQL数据库—从小白到大牛(20)大小写规范、sql_mode的合理设置