mysql数据库查询笔记_mysql笔记: 查询
mysql笔记: 查询
查询准备
CREATE DATABASE search;
use search;
# 学生表(student):学号、姓名、性别、出生日期、班级
CREATE TABLE student(
sno varchar(20) primary key,
sname varchar(20) not null,
ssex varchar(10) not null,
sbirthday datetime,
class varchar(20)
) character set = utf8;
# 教师表(teacher):编号、姓名、性别、出生日期、职称、所在部门
CREATE TABLE teacher(
tno varchar(20) primary key,
tname varchar(20) not null,
tsex varchar(10) not null,
tbirthday datetime,
prof varchar(20),
depart varchar(20) not null
) character set = utf8;
# 课程表(course):课程号、课程名称、教师编号
CREATE TABLE course(
cno varchar(20) primary key,
cname varchar(20) not null,
tno varchar(20) not null,
foreign key(tno) references teacher(tno)
) character set = utf8;
# 成绩表(score):学号、课程号、成绩
CREATE TABLE score(
sno varchar(20) not null,
cno varchar(20) not null,
degree decimal,
foreign key(sno) references student(sno),
foreign key(cno) references course(cno),
primary key(sno, cno)
) character set = utf8;
show tables;
# 向数据表中添加数据
# 添加学生信息
INSERT INTO student VALUES('101', '曾华', '男', '1977-09-01', '95033');
INSERT INTO student VALUES('102', '匡明', '男', '1975-10-02', '95031');
INSERT INTO student VALUES('103', '王丽', '女', '1976-01-23', '95033');
INSERT INTO student VALUES('104', '李军', '男', '1976-02-20', '95033');
INSERT INTO student VALUES('105', '王芳', '女', '1975-02-01', '95031');
INSERT INTO student VALUES('106', '陆君', '男', '1974-06-03', '95031');
INSERT INTO student VALUES('107', '王尼玛', '男', '1976-02-20', '95033');
INSERT INTO student VALUES('108', '张全蛋', '男', '1975-02-02', '95031');
INSERT INTO student VALUES('109', '赵铁柱', '男', '1974-06-03', '95031');
# 添加教师信息
INSERT INTO teacher VALUES('804', '李诚', '男', '1958-12-02', '副教授', '计算机系');
INSERT INTO teacher VALUES('856', '张旭', '男', '1969-03-12', '讲师', '电子工程系');
INSERT INTO teacher VALUES('825', '王萍', '女', '1972-05-05', '助教', '计算机系');
INSERT INTO teacher VALUES('831', '刘冰', '女', '1977-08-14', '助教', '电子工程系');
# 添加课程表
INSERT INTO course VALUES('3-105', '计算机导论', '825');
INSERT INTO course VALUES('3-245', '操作系统', '804');
INSERT INTO course VALUES('6-166', '数据电路', '856');
INSERT INTO course VALUES('9-888', '高等数学', '831');
# 分数表
INSERT INTO score VALUES('103', '3-245', '86');
INSERT INTO score VALUES('105', '3-245', '75');
INSERT INTO score VALUES('109', '3-245', '68');
INSERT INTO score VALUES('103', '3-105', '92');
INSERT INTO score VALUES('105', '3-105', '88');
INSERT INTO score VALUES('109', '3-105', '76');
INSERT INTO score VALUES('103', '6-166', '85');
INSERT INTO score VALUES('105', '6-166', '79');
INSERT INTO score VALUES('109', '6-166', '81');
INSERT INTO score VALUES('101', '3-105', '90');
INSERT INTO score VALUES('102', '3-105', '91');
INSERT INTO score VALUES('104', '3-105', '89');
查询练习
# 1、查询student表达所有记录
SELECT * FROM student;
# 2、查询student表中的所有记的的sname、ssex和class列
SELECT sname, ssex, class FROM student;
# 3、查询教师所有的单位即不重复的depart列
# distinct 排除重复
SELECT distinct depart FROM teacher;
# 4、查询score表中成绩在60-80之间的所有记录
# between 查询区间
SELECT * FROM score WHERE degree BETWEEN 60 AND 80;
# 预算符比较
SELECT * FROM score WHERE degree > 60 AND degree < 80;
# 5、查询score表中成绩为85、86或88的记录
# 在同一字段表示或关系的查询 IN
SELECT * FROM score WHERE degree IN(85, 86, 88);
# 6、查询student表中'95031'班或性别为'女'的同学记录
# 在不同字段表示或关系的查询 OR
SELECT * FROM student WHERE class='95031' OR ssex='女';
# 7、以class降序查询student表的所有记录
# 升序(asc)和降序(desc),默认是升序
SELECT * FROM student ORDER BY class DESC;
# 8、以cno升序、degree降序查询score表的所有记录
SELECT * FROM score ORDER BY cno, degree DESC;
# 9、查询'95031'班的学生人数
# 统计 count
SELECT COUNT(*) FROM student WHERE class='95031';
# 10、查询score表中的最高分的学生号和课程号
# 复合子查询
SELECT sno, cno FROM score WHERE degree=(SELECT max(degree) FROM score);
# 11、查询每门课的平均成绩
# GROUP BY分组
SELECT cno, avg(degree) FROM score GROUP BY cno;
# 12、查询score中至少有2名学生选修的并以3开头的课程的平均分数
SELECT cno, avg(degree), count(*) FROM score GROUP BY cno HAVING count(cno) >= 2 and cno like '3%';
# 13、查询分数大于70小于98的sno列
SELECT sno, degree FROM score WHERE degree > 70 AND degree < 90;
# 14、查询所有学生的sname、cno 和 degree列
# 多表查询
SELECT sname, cno, degree FROM student, score WHERE student.sno = score.sno;
# 15、查询所有学生的sno、cname和degree列
SELECT sno, cname, degree FROM course, score WHERE course.cno = score.cno;
# 16、查询所有学生的sname、cname和degree列
SELECT sname, cname, degree FROM student, course, score WHERE student.sno=score.sno AND course.cno=score.cno;
# 17、查询'95031'班学生每门可的平均分
# 子查询 + 分组查询
SELECT cno, avg(degree) FROM score WHERE sno in (SELECT sno FROM student WHERE class='95031') GROUP BY cno;
# 18、查询选修'3-105'课程的成绩高于'109'号同学'3-105'成绩的所有同学记录
SELECT * FROM score WHERE cno = '3-105' AND degree > (SELECT degree FROM score WHERE sno='109' AND cno='3-105');
# 19、查询成绩高于学号为'109'、课程号为'3-105'的成绩的所有记录。
SELECT * FROM score WHERE degree > (SELECT degree FROM score WHERE sno='109' AND cno='3-105');
# 20、查询和学号为108、101的同学同年出生的所有学生的sno、sname和sbirthday列
# year函数与带关键字的子查询
SELECT * FROM student WHERE year(sbirthday) in (SELECT year(sbirthday) FROM student WHERE sno in(108, 101));
# 21、查询'张旭'教师任课的学生成绩。
# 多层嵌套查询
SELECT degree FROM score WHERE cno=(SELECT cno FROM course WHERE tno=(SELECT tno FROM teacher WHERE tname='张旭'));
# 22、查询选修某课程的同学人数多于5人的教师姓名。
# 多表查询
SELECT tname FROM teacher WHERE tno=(SELECT tno FROM course WHERE cno=(SELECT cno FROM score GROUP BY cno HAVING count(*) > 5));
# 23、查询95033班和95031班全体学生的记录。
# in表示或者关系
SELECT * FROM student WHERE class in('95033', '95031');
# 24、查询存在有85分以上成绩的课程cno;
SELECT cno, degree FROM score WHERE degree>85;
# 25、查询出'计算机系'教师所教课程的成绩表。
SELECT * FROM score WHERE cno in(SELECT cno FROM course WHERE tno in(SELECT tno FROM teacher WHERE depart='计算机系'));
# 26、查询'计算机系'与'电子工程系'不同职称教师的tname和prof。
# union 和 not in 的使用
SELECT * FROM teacher WHERE depart='计算机系' and prof not in(SELECT prof FROM teacher WHERE depart='电子工程系')
union
SELECT * FROM teacher WHERE depart='电子工程系' and prof not in(SELECT prof FROM teacher WHERE depart='计算机系');
# 27、查询选修编号'3-105'课程且成绩至少高于选修编号为'3-245'的同学的cno、sno和degree,并按degree从高到低次序排序。
# 至少? 大于其中至少一个,any()
SELECT * FROM score WHERE cno='3-105' AND degree > any(SELECT degree FROM score WHERE cno='3-245') ORDER BY degree DESC;
# 28、查询选修编号为'3-105'且成绩高于选修编号为'3-245'课程的同学的cno、sno和degree。
# 且? all()
SELECT * FROM score WHERE cno='3-105' AND degree > all(SELECT degree FROM score WHERE cno='3-245');
# 29、查询所有教师和同学的name、sex和birthday。
# 别名? as
SELECT tname as name, tsex as sex, tbirthday as birthday FROM teacher
union
SELECT sname, ssex, sbirthday FROM student;
# 30、查询所有女教师和女同学的name、sex和birthday。
SELECT tname as name, tsex as sex, tbirthday as birthday FROM teacher WHERE tsex='女'
union
SELECT sname, ssex, sbirthday FROM student WHERE ssex='女';
# 31、查询成绩比该课程平均成绩低的同学的成绩表。
SELECT * FROM score a WHERE degree < (SELECT avg(degree) FROM score b WHERE a.cno=b.cno);
# 32、查询所有任课教师的tname和depart
SELECT tname, depart FROM teacher WHERE tno in(SELECT tno FROM course);
# 33、查询至少2名男生的班号
SELECT class FROM student WHERE ssex='男' GROUP BY class HAVING count(*) > 1;
# 34、查询student表中不姓'王'的同学记录。
# not like模糊查询取反
SELECT * FROM student WHERE sname not like '王%';
# 35、查询student表中每个学生的姓名和年龄
# 年龄 = 当前年份-出生年份
SELECT sname, year(now()) - year(sbirthday) as 'age' FROM student;
# 36、查询student表中最大和最小的sbirthday日期值。
# max min
SELECT max(sbirthday) as max, min(sbirthday) as min FROM student;
# 37、以班号和年龄从大到小的顺序查询student表中的全部记录
SELECT * FROM student ORDER BY class DESC, sbirthday DESC;
# 38、查询'男'教师及其所上的课程
SELECT * FROM course WHERE tno in(SELECT tno FROM teacher WHERE tsex='男');
# 39、查询最高分同学的sno、cno和degree列
SELECT * FROM score WHERE degree=(SELECT max(degree) FROM score);
SQL的四种连接查询
# 内连接:
# inner join 或 join
# 外连接:
# 1.左连接 left join 或者 left outer join
# 2.右连接 right join 或者 right outer join
# 3.完全外连接 full join 或者 full outer join
# 创建两个表
# Person表:id, name, cardid
CREATE TABLE person(
id int,
name varchar(20),
cardid int
) character set = utf8;
# Card表:id, name
CREATE TABLE card(
id int,
name varchar(20)
) character set = utf8;
INSERT INTO card VALUES(1, '饭卡');
INSERT INTO card VALUES(2, '建行卡');
INSERT INTO card VALUES(3, '农行卡');
INSERT INTO card VALUES(4, '工商卡');
INSERT INTO card VALUES(5, '邮政卡');
INSERT INTO person VALUES(1, '张三', 1);
INSERT INTO person VALUES(2, '李四', 3);
INSERT INTO person VALUES(3, '王五', 6);
# 这两张表并没有创建外键
# 1. inner join查询(内链接)
SELECT * FROM person inner join card on person.cardid = card.id;
# inner join 内联查询,其实就是两张表中的数据,通过某个字段相等,查询出相关数据记录,和join的效果一样
SELECT * FROM person join card on person.cardid = card.id;
# 2. left join查询(左外连接)
SELECT * FROM person left join card on person.cardid = card.id;
# 左外连接会将左边表里面的所有数据取出来,而右边的表数据,如果有相等的就显示,没有的就补null
# left join 等同于 left outer join,下面的结果是一样的
SELECT * FROM person left outer join card on person.cardid = card.id;
# 3. right join查询(右外连接)
SELECT * FROM person right join card on person.cardid = card.id;
# 右外连接会将右边表里面的所有数据取出来,而左边的表数据,如果有相等的就显示,没有的就补null
# 右外连接与左外连接正好相反
# right join 等同于 right outer join,下面的结果是一样的
SELECT * FROM person right outer join card on person.cardid = card.id;
# 4. mysql不支持 full join, 通过左右连接的union来完成
SELECT * FROM person left join card on person.cardid = card.id
union
SELECT * FROM person right join card on person.cardid = card.id;
本文禁止转载或摘编
--
--
--
分享到:
投诉或建议
评论
mysql数据库查询笔记_mysql笔记: 查询相关推荐
- MySQL数据库基础到进阶笔记整理包含事务、SQL优化、锁等内容
写在前面 本文是在学习MySQL数据库时整理的笔记,可供初学者学习 是在https://dhc.pythonanywhere.com/entry/share/?key=12e4a7324f68371d ...
- MySQL 数据库 like 语句通配符模糊查询小结
MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)--MySQL 数据库 like 语句通配 ...
- mysql数据库表的多条件查询
mysql数据库表的多条件查询 一.select语句基本查询 SELECT 字段1,字段2....FROM 表名[WHERE 条件] [LIMIT N][ OFFSET M] select可以返回多条 ...
- MySQL数据库中的多表查询含义以及练习~建议码友们点亮拇指+收藏呐~
MySQL数据库中的多表查询含义以及练习 一. 多表查询含义 二. 多表查询练习 1. 已知表 2. 需求And代码 一. 多表查询含义 查询语法: select列名列表from表名列表where条件 ...
- MySQL数据库C接口的数据查询操作示例
MySQL数据库C接口的数据查询操作示例 命令行操作 (1)建库建表(已有则不用) 连接MySQL服务器,并登录之.选择某个数据库.假设用户在这个数据库下已有一个表了. (2)查询所有数据的方法 SE ...
- MySQL数据库学习教程全套笔记完整版
[MySQL学习1]SQL语言简介及数据库简介https://www.52txr.cn/2021/mysql1.html 本节大致介绍数据库. [MySQL学习2]MySQL简介及安装和卸载https ...
- 【如何通过汉字首字母拼写查询数据】mysql数据库汉字首字母获取查询或通过ES插件elasticsearch-analysis-pinyin进行汉字首拼查询
一.mysql数据库汉字首字母获取查询 1.汉字提取首字母 get_first_pinyin_char: 此函数是将一个中文字符串的第一个汉字转成拼音字母 (例如:"李"-> ...
- MYSQL数据库字段关联_MySQL数据库基础——操作关系表、连接查询
MySQL数据库基础入门--day11 一.操作关联表 1.关联关系: 关联关系有:多对一.多对多和一对多. 一对一关联关系可以应用在以下几方面: (1)分割具有很多列的表 (2)由于安全原因而隔离表 ...
- 您是否也需要用到Visual Studio 2017连接MySQL数据库,请看正文笔记
开篇 为了开发.net应用程序,选择了Visual Studio 2017开发软件,公司用的数据库是MySQL,所有写了这篇文章记录笔记,方便以后查找. 正文 需要工具(我本地用以下版本): 1.My ...
最新文章
- Zabbix监控httpd服务
- SAP CRM Survey调查问卷的存储模型
- BaseExecutor.query()-从数据库查询
- Es6常用方法filter
- oracle之 Oracle归档日志管理
- 一个完整的机器学习项目在Python中演练
- 用深度强化学习玩atari游戏_深度强化学习从入门到大师:以刺猬索尼克游戏为例讲解PPO(第六部分)...
- http://download.chinaitlab.com/testdoc/files/8628.
- 软件测试自动化测试工具有哪些?常见的自动化工具简介
- Windows Server安装 IIS 时报错:刷新服务器管理器时出现意外错 误:无法打开匿名级安全令牌。(异常来自 HRESULT:0x80070543)
- Unity3D中隐藏与显示物体的方法
- css 动画 抖动,css3动画之上下抖动
- 几种常用网页文本编辑器总结
- 拉卡拉前三季度净利润7.35亿元 继续保持高速增长态势
- pandas中的窗口对象(窗口函数)
- Allegro如何添加泪滴操作指导
- 视觉SLAM(二):相机与图像
- 快乐生活的1000+篇文章总结
- 文件扫描-TWAIN,WIA,ISIS,SANE
- 盘点PDF文件转Word文档的四种高效率转换方法
热门文章
- 「题解」:[BZOJ4558]方
- 客户端与服务器之间通信收不到信息——readLine()
- 关于vue如何解决数据渲染完成之前,dom树显示问题
- XML文件解析之--DOM与SAX
- C++查缺补漏,赶紧的
- File类的mkdir()与mkdirs()方法的区别
- 堆垛机器人编程技巧_机器人智能堆垛的控制方法与流程
- Python+django网页设计入门(5):自定义用户注册与登录功能
- web前端三大主流框架_web前端三大主流框架
- 只可顺守不可逆取书法_坚持练书法10年以上,会怎么样?