这里写目录标题

  • 查询
    • 1、单表查询
      • 1.选择表中的若干列
      • 2.选择表中的若干元组
      • 3.order by子句
      • 4.聚集函数
      • 5.group by分组
    • 2、连接查询
      • 1、等值与非等值连接查询
      • 2、自身连接
      • 3、外连接
      • 4、多表连接
    • 3、嵌套查询
      • 1、带有IN谓词的子查询
      • 2、带有比较运算符的子查询
      • 3、带有ANY或ALL谓词的子查询
      • 4、带有EXISTS谓词的子查询
    • 4、集合查询

查询

作为案例的三个表


点击获取建表语句和表数据

1、单表查询

1.选择表中的若干列

1.查询指定列

select Sno,Sname from Student;

2.查询全部列

select*from Student;

3.查询经过计算的值

3.1、查询到同学的出生年份

select Sname,2022-Sage from student;


3.2、起别名,增加列,通过函数转换大小写

select Sname 姓名,'Brith',2022-Sage,lower(Sdept) from Student;

2.选择表中的若干元组

1.消除取值重复行

select distinct Sno from SC;


2.查询满足条件的元组

2.1、比较大小

select * from Student where Sage<20;


2.2、确定范围

select * from Student where Sage between 20 and 30;


2.3、确定集合

select * from Student where Sdept in ('CS','MA');


2.4、字符匹配

  • %(百分号)代表任意长度(长度可以为0)的字符串
  • _(下横线)代表任意单个字符
select * from Student where Sname like '刘%';
select * from Student where Sname like '刘_';select * from Student where Sname not like '刘%';
select * from Student where Sname not like '刘_';

2.5、空值查询

select * from Student where Grade is null;

3.order by子句

用户可以用order by 子句对查询结果按照一个或多个属性列的升序(ASC)降序(DESC)排列,默认值升序

select * from SC order by Grade;

4.聚集函数

select count(*) from Student;
select count(Sno) from Student;
select avg(Grade) from SC;
select sum(Grade) from SC;
select max(Grade) from SC;
select min(Grade) from SC;

当聚集函数遇到空值时,除count(*)外,都跳过空值处理非空值
聚集函数只能用于select子句和group by中的having子句

5.group by分组

select Sno,count(*) from Student group by Sno;

select Sno from SC group by Sno having count(Sno)>3;

2、连接查询

若一个查询同时涉及两个以上的表,则称之为连接查询

1、等值与非等值连接查询

  • 连接查询的where子句中用来连接两个表的条件成为连接条件连接谓词
  • 当连接运算符为=号时,称为等值连接,使用其他运算符称为非等值连接

例1、查询每个学生及其选修课程的情况

select * from Student,SC where Student.Sno=SC.Sno;


把目标列中重复的属性列去掉则为自然连接

select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student,SC where Student.Sno=SC.Sno;

2、自身连接

连接操作不仅可以在两个表之间进行,也可以时一个表与自身进行连接,称之为表的自身连接
例2、查询每一门课的间接先修课(即先修课的先修课)

select first.Cno,second.Cpno from Course first,Course second where first.Cpno=second.Cno;

3、外连接

有时想以Student 表为主体列出每个学生的基本情况和选课情况。若某个学生没有选课,仍把Student的悬浮元组保存在结果关系中,而在SC表的属性上填空值NULL,这时就需要使用外连接

select * from Student left outer join SC on (Student.Sno=SC.Sno);


左外连接列出左边关系中所有元组,右外连接列出右边关系中所有的元组

4、多表连接

连接操作除了可以时两表连接、一个表与自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接
例4、查询每个学生的学号、姓名、课程名、成绩

select Student.Sno,Sname,Cname,Grade from Student,Course,Sc where Student.Sno=SC.Sno and SC.Cno=Course.Cno;

3、嵌套查询

在SQL语言中,一个select-from-where 语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询例如:
查询选修课程号为2的学生姓名

select Sname from Student where Sno in (select Sno from SC where Cno='2');

本例中,下层查询块 select sno from sc where cno=‘2’是嵌套在上层查询块select sname from student where sno in 的where条件中的,上层的查询块称为外查询父查询,下层查询块称为内查询子查询

子查询的select语句中不能使用 order by 子句,order by子句只能对最终查询结果排序

1、带有IN谓词的子查询

例1、查询与“刘晨”在同一个系学习的学生

select * from student where Sdept in (select Sdept from Student where Sname='刘晨');

本例中,子查询条件不依赖于父查询,称为不相关子查询

例2、查询选修了课程名为“信息系统”的学生学号和姓名

select Sno,Sname from Student where Sno in(select Sno from SC where Cno in (select Cno from Course where Cname='信息系统'));

2、带有比较运算符的子查询

带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户明确知道内层查询返回的是单个值时,可以用>、<、=、>=、<=、!=或<>等比较运算符

例3、找出每个学生超过他自己选修课程平均成绩的课程号

select Sno,Cno from SC x where Grade>(select avg(Grade) from SC y where y.Sno=x.Sno);


x 是表SC的别名,又称为元组变量,可以用来表示SC的一个元组,内层查询是求一个学生所有选修课平均成绩的,至于是哪个学生的平均成绩要看参数x.Sno的值,而该值是与父查询相关的,因此这类查询称为相关子查询

3、带有ANY或ALL谓词的子查询

>ANY 大于子查询结果中的某个值
>ALL 大于子查询结果中的所有值
<ANY 小于子查询结果中的某个值
<ALL 小于子查询结果中的所有值>=ANY 大于等于子查询结果中的某个值
>=ALL 大于等于子查询结果中的所有值
<=ANY 小于等于子查询结果中的某个值
<=ALL 小于等于子查询结果中的所有值

例4、查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄

select Sname,Sage from Student where Sage<ANY(select Sage from Student where Sdept='CS') and Sdept!='CS';

4、带有EXISTS谓词的子查询

EXISTS代表存在量词,带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”

例5、查询所有选修了1号课程的学生姓名

select Sname from Student where exists (select * from SC where Student.Sno=SC.Sno and Cno='1');

使用存在量词exists后,若内层查询结果非空,则外层的where子句返回真值,否者返回假值

例6、查询选修了全部课程的学生姓名
SQL中没有全称量词(for all),但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词,可以将题目转换成等价的存在量词的形式:没有一门课程是他不选修的

select Sname from Student where exists (select * from Course where exists (select * from SC where SC.Sno=Student.Sno and SC.Cno=Course.Cno));

4、集合查询

集合操作主要包括并操作NUION交操作INTERSERT差操作EXCEPT
例1、查询计算机科学系的学生及年龄不大于19岁的学生

select * from Student where Sdept='CS' union select * from Student where Sage<=19;


例2、查询计算机科学系的学生与年龄不大于19岁的学生的交集

select * from Student where Sdept='CS' intersect select * from Student where Sage<=19;

这实际上就行查询计算机科学系中年龄不大于19岁的学生

select *from Student where Sdept='CS' and Sage<=19;

例3、查询计算机科学系的学生与年龄不大于19岁的学生的差集

select * from Student where Sdept='CS' except select * from Student where Sage<=19;

这实际上就行查询计算机科学系中年龄大于19岁的学生

select *from Student where Sdept='CS' and Sage>19;

MySQL 多种查询方法相关推荐

  1. MySQL分页查询方法及优化

    MySQL分页查询方法及优化 http://uusama.com/458.html

  2. 高级查询(二)+php中文网,MySQL高级查询方法之记录查询

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 此文章主要向大家描述的是MySQL高级查询方法之记录查询的实际操作步骤,以及对其实际操作过程中要用到的代码的详细描述,以下 ...

  3. 第一百三十四期:MySQL分页查询方法及优化

    在MySQL中,分页查询一般都是使用limit子句实现,limit子句声明如下:LIMIT子句可以被用于指定 SELECT 语句返回的记录数. 作者:青芽草  分页查询方法: 在MySQL中,分页查询 ...

  4. mysql表格查询方法

    笛卡尔积 交叉连接(CROSS JOIN):有两种,显式的和隐式的2种,一般用来返回连接表的笛卡尔积. 笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积. 例如,有 A ...

  5. mysql 优化查询方法,优化MYSQL查询的详细方法

    优化MYSQL查询的详细方法 发布时间:2020-06-08 17:19:28 来源:PHP中文网 阅读:135 作者:三月 不知道大家之前对类似优化MYSQL查询的详细方法的文章有无了解,今天我在这 ...

  6. 做了6年的Java,mysql去重查询方法

    前言: 求职季在即,技巧千万条,硬实力才是关键,听说今年疫情大环境不好,更要好好准备才行.MySQL是Java程序员面向高级的必备技能,很多朋友在面试时经常在这里折戟沉沙,饮恨不已.熟练掌握MySQL ...

  7. mysql一些查询方法记录

    2019独角兽企业重金招聘Python工程师标准>>> 1. Group by按月.周.日查询数量 按日查询: SELECT DATE(`create_time`) AS dt, C ...

  8. MySQL查询的方法_MYSQL 查询方法

    mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据 select Code,Name from Info --查指定列的数据 select Code ...

  9. mysql求和 子查询_MYSQL 查询方法 统计查询 链接查询 子查询

    mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据 select Code,Name from Info --查指定列的数据 select Code ...

最新文章

  1. css如何转为html5,HTML与CSS中的3D转换模块
  2. 做个流量站-聚茶吧, 汇聚茶的地方
  3. 使用java连接ftp服务器_Java如何连接到FTP服务器?
  4. 【kafka】关于Kafka Fetch Session的讨论
  5. python爬虫——与不断变化的页面死磕和更新换代(3)
  6. linux svn服务器同步,Linux服务器实现SVN与WEB同步解决方案
  7. 华为设备如何将接口配置为中继模式_(完整版)华为设备基本配置命令
  8. Mysql之各种各样的函数啦
  9. VMware安装时出现 “您无权输入许可证密钥,请使用系统管理员账户重试”解决方案
  10. Uabntu安装AWVS11以及破解
  11. 非对称加密算法--RSA加密原理
  12. 大学计算机专业学习哪些课程?
  13. Chrome 不支持 WebGL 怎么办
  14. 清华大学2020年“姚班”“智班”报考指南及选拔方案发布!
  15. 直角坐标与极坐标互相转化
  16. Keil5 平台 S3C2440裸机程序开发-----中断系统/UART
  17. 这家中国云计算企业三个月两轮融资
  18. 趣图:程序员的真实写照!这也太形象了吧!
  19. docker search时列出tag
  20. 计算机组成原理设计,计算机组成原理课程设计

热门文章

  1. Cordova+React+OnsenUI+Redux新闻App开发实战教程-姜博-专题视频课程
  2. Node.js中multer的相关操作
  3. java的JDK环境配置教程
  4. js-控制css3动画暂停播放、暂停继续播放
  5. 小创业者初涉大财神会有感
  6. Redis使用量暴增,快速定位有哪些大key在作怪
  7. kubernetes部署-Heapster(十)
  8. Vue虚拟DOM原理及面试题(笔记)
  9. kaldi中的声纹识别
  10. 获取京东_JdTdudfp的eid和fp