查询数据

前一章已经讲完了数据库的:增删改表,和增删改数据。

https://blog.csdn.net/shinhwa96/article/details/124319033?spm=1001.2014.3001.5501

针对测试来说,日常用的最多其实的查询数据。故整理了下常用的查询语句
1.单表查询
2.分组查询
3.多表查询
4.子查询


文章目录

  • 查询数据
  • 一、单表查询(不带查询条件)
    • 1.查询全表
    • 2.查询部分字段:
    • 3.查询带表达式:
    • 4.设置别名:
    • 5.排序:order by
    • 6.查询部分数据(limit)
    • 7.去重distinct
  • 二、单表查询(含查询条件)
    • 1.等值查询
    • 2.不等值查询
    • 3.模糊查询 like
    • 4.逻辑语句 and or not
    • 5.空值处理
    • 6.区间查询 between 小值 and 大值
    • 7.集合查询 in,not in
  • 三、分组查询
    • 1.函数
    • 2.聚合函数
    • 3.分组函数 Group by
    • 4.having 的二次筛选
  • 四、多表查询
    • 内连接 inner join
    • 左连接 left join on
    • 右连接 right join on
    • 子查询

一、单表查询(不带查询条件)

1.查询全表

SELECT * FROM wjh.teacher;

2.查询部分字段:

SELECT t_name FROM wjh.teacher;
SELECT t_name,t_depart FROM wjh.teacher;

3.查询带表达式:

SELECT s_no,s_no%2 FROM wjh.student;
SELECT s_no,if(s_no%2=0,'双号','单号') 学号 FROM wjh.student;

4.设置别名:

空格、或者as 别名

SELECT s_name,s_sex 性别 FROM wjh.student;
SELECT s_name,s_sex as 性别 FROM wjh.student;

5.排序:order by

升序:asc
降序:desc
查询语句不加关键字,默认升序

通过classid进行整体数据排序
SELECT * FROM wjh.student order by classid asc;
SELECT * FROM wjh.student order by classid desc;



注意,如果按照多个字段排序,且有相同排序,先按照第一顺序排序,再按第二排序

SELECT * FROM wjh.student order by classid desc,s_no asc;

6.查询部分数据(limit)

有时候查询数据不需要查看全部,只需要取特定几行的数据。
limit(M,N):表示:从M行开始。显示N行

#显示前五行
SELECT * FROM wjh.student limit 5;
#显示从第5行开始,显示3行
SELECT * FROM wjh.student limit 5,3;

7.去重distinct

SELECT distinct classid FROM wjh.student;

注意事项:distinct 必须要用在SELECT之后。
如果是多个字段去重,前提是这多个字段都要相同才去重,也就是要满足并的关系

二、单表查询(含查询条件)

1.等值查询

在where之后加上过滤条件

SELECT * FROM wjh.student where classid=1101;

2.不等值查询

经常使用的:< 、<=、>、>=、!=、<>、

SELECT * FROM wjh.score where scores>'88';
SELECT * FROM wjh.score where scores< '60';
SELECT * FROM wjh.score where scores !='56';
SELECT * FROM wjh.score where scores <>'56';

3.模糊查询 like

通配符%代表任意内容,_代表匹配单个字符,不能多也不能少,就是一个字符。rlike代表正则

#查询王字开头的数据
SELECT * FROM wjh.student where s_name like '王%';
#查询以一字结尾的数据
SELECT * FROM wjh.student where s_name like '%一';
#查询含有王的数据
SELECT * FROM wjh.student where s_name like '%王%';

4.逻辑语句 and or not

优先级:and的优先级高于or

#and 全部满足
select * from wjh.score where scores='56' and s_no='103';
#or 部分满足
select * from wjh.score where scores='56' or s_no='103'
#既有and,又有or
select * from wjh.score where scores>'60' and c_no ='3-1' or scores>'85'
#not
#查询不含有王的数据
SELECT * FROM wjh.student where s_name  not like '%王%';

5.空值处理

SELECT * FROM wjh.student where s_name is null;
SELECT * FROM wjh.student where s_name is not null;

6.区间查询 between 小值 and 大值

#查询分数在【75,96】区间的数据
SELECT * FROM wjh.score where scores between 75 and 96;
#查询分数不在【75,96】区间的数据
SELECT * FROM wjh.score where scores not  between 75 and 96;

7.集合查询 in,not in

#查询分数为56,85,96的数据
SELECT * FROM wjh.score where scores  in('56','85','96')
#查询分数不为56,85,96的数据
SELECT * FROM wjh.score where scores  not in('56','85','96')
SELECT * FROM wjh.score where (c_no,scores) in (('3-1',56),('3-3',96))

三、分组查询

1.函数

这位博主整理的比较全,可以去看他的推文。

https://blog.csdn.net/daxiong0816/article/details/125263849

2.聚合函数

count(col) 统计个数(注意:不能统计空值)
max(col) 最大值
min(col) 最小值
sum(col)求和
avg(col)求平均值

注意:这些函数只能在select之后,不能在where之后出现。

#统计有多少个分数
SELECT count(scores) FROM wjh.score ;
#统计最高分
SELECT max(scores) FROM wjh.score ;
#统计最低分
SELECT min(scores) FROM wjh.score ;
#统计课程3-1的总分
select sum(scores) from wjh.score where c_no='3-1';
#统计课程3-1的平均分
select avg(scores) from wjh.score where c_no='3-1';

3.分组函数 Group by

确定按照什么分组,例如:查询每个班级多少人,查询每科分数总分多少

#查询每个班级多少人
select classid,count(s_no) from wjh.student group by classid;
#查询每科最高分
select  c_no,max(scores)   from wjh.score group by c_no;

4.having 的二次筛选

在分组函数后需要对数据进行二次过滤
例如:查询每科的最低分,但是只显示最低分数大于60的数据;

select  c_no,min(scores)   from wjh.score group by c_no having min(scores)>'60';

特殊事项:
针对普通字段的筛选,用where,在group by之前
针对聚合函数的筛选,用having ,在group by之后

Select语句完整的执行顺序
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使用order by对结果集进行排序。

四、多表查询

多张表之间的连接查询,具体可分为:
内连接:只选出两张表互相匹配的数据
外连接:既选出两张表匹配的数据,又包括不匹配的数据,可分为左连接和右连接。

内连接 inner join

例如查询student表和score表,得出学生和分数详情
三种写法:
1.只是用where

select s_name,c_no,scores from wjh.student ,wjh.score where student.s_no=score.s_no;

2.用join…on…

select s_name,c_no,scores from wjh.student  join wjh.score  on student.s_no=score.s_no;

3.用inner join on

select s_name,c_no,scores from wjh.student  inner join wjh.score  on student.s_no=score.s_no;
select s_name,c_no,scores from wjh.student  inner join wjh.score  on student.s_no=score.s_no where scores>80;

左连接 left join on

以左表为主(显示完整的左表),根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示

select s_name,c_no,scores from wjh.student  left join wjh.score  on student.s_no=score.s_no;

查询出来的数据和内连接查询的数据就有明显区别,内连接只查出两表都匹配的数据,所有只有24条
但是左连接,以左边Student表为主,右表不匹配的以null补齐,故查询25条,曾一的课程和分数以null显示

右连接 right join on

根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null表示

select s_name,c_no,scores from wjh.student  right join wjh.score  on student.s_no=score.s_no;

子查询

子查询:是多表连接查询的一种实现方式,在一个select语句的from子句或where子句中嵌套了另一个select语句,外层的select查询语句成为主查询,换句话将就是WHERE或FORM中的查询语句称为子查询

WHERE子句中的子查询:子查询返回的值作为主查询的查询条件
FROM子句中的子查询:子查询返回的是一张虚拟的表,主查询从该查询从临时表查询出满足的条件

select * from wjh.score where s_no in (select s_no from wjh.student where s_sex ='女')

数据库SQL-测试常用查询相关推荐

  1. mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...

    首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...

  2. sql datetime 加一天_PowerQuery数据库Sql.Database条件查询

    焦棚子的文章目录 请点击下载附件 1.应用场景 底层数据在数据库(sql server数据库,其他数据库同理,下文不再说明.)中,Excel中有查询的字段,需要在数据库中查询相关信息: 2.举个栗子 ...

  3. SQL server常用查询

    SQL server常用操作 查询:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,v ...

  4. 数据库MySQL(一) 常用查询语句

    MySQL笔记 数据库表.查询.排序.数据处理函数 1 数据库 什么是数据库?什么是数据库管理系统?什么是SQL?它们之间的关系? 数据库: 顾名思义:存储数据的仓库,实际上就是一堆文件,这些文件中存 ...

  5. Mysql 数据库 -------- SQL语句进阶查询 ------- 后部分

    Mysql ---- SQL高级查询 连接查询 内连接 外连接 数据库函数 数学函数 聚合函数(给数据表用的) 字符串函数(字符串用''格式) 日期时间函数 存储过程 创建存储过程 创建存储过程中的传 ...

  6. B站黑马测试第二篇P206视频数据库SQL语句‘关联查询_数据准备‘代码

    drop table if exists category; create table category( id int unsigned primary key auto_increment, ty ...

  7. 数据库SQL SERVER常用命令说明

    转载自https://blog.csdn.net/xf_yan/article/details/80464835: 一.基础 1.说明:创建数据库 CREATE DATABASE database-n ...

  8. SQL Server 常用查询练习

    生成测试数据 if exists(select * from sysobjects where name='db_user') drop table db_user gocreate table db ...

  9. 数据库——sql语句 连接查询

    数据库--连接查询 1.定义:同时涉及多个表的查询. 2.连接条件常用格式: [<表名1>]<列名><比较运算符>[<表名2>]<列名2> ...

  10. Excel以数据库SQL的形式查询本表

    Function qh_excel_query12(qh_strSQL0, Optional qh_PathStr0 = "") 'sql方式查询本表的数据,返回二维数组 作者:阙 ...

最新文章

  1. web集群时session同步的3种方法
  2. Python3 的多线程使用:_thread,threading,multiprocessing
  3. php 输出中文的引号,如何将php英文引号转换为中文引号
  4. Java报警110_Java入门基础SL110
  5. 常用报文的解析与相互转换
  6. 索尼发布新一代 IoT 芯片,万物互联方式将改写?
  7. 四分之一波长阻抗变换器
  8. C#序列化枚举为字符串和自定义转换器
  9. 在线光纤网速测试软件,adsl网速测试(中国移动宽带专用测速软件)
  10. python 黎曼猜想_黎曼猜想简析
  11. 程序员如何学习Hadoop大数据培训
  12. 计算机显示器使用的扫描方式,平板扫描仪怎么用 平板扫描仪使用方法【详解】...
  13. Win Server 2008 R2
  14. EBS:AP_INV_SELECTION_CRITERIA_ALL
  15. 云服务器ECS常见的计费方式
  16. 大牛养成指南(1):吃的草够多,你也能成为大牛
  17. sketch交互动效能导入html吗,UI设计利器Sketch +最新交互利器 Framer 配合使用和动效制作...
  18. 献给java初学者,非常适合新手练习的Java项目
  19. JWT — JWT原理解析及实际使用
  20. DISM命令常见用法

热门文章

  1. LeetCode 643. 子数组最大平均数 I(简单)
  2. 163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧
  3. 246 中心对称数
  4. IP:网络上的击鼓传花
  5. 计算机出现故障后,电脑内存出现故障怎么办 电脑内存常见故障解决方法【详解】...
  6. 小觅双目相机陀螺仪静态数据输出为0+timeshift ubuntu 系统备份
  7. Mac如何拷贝文件到移动硬盘
  8. 如何选择产品关键词?
  9. 相亲也内卷?被程序员的相亲规划整不会了......
  10. 大数据技术与应用专业 课 程 标 准