数据库SQL-测试常用查询
查询数据
前一章已经讲完了数据库的:增删改表,和增删改数据。
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-测试常用查询相关推荐
- mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...
首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...
- sql datetime 加一天_PowerQuery数据库Sql.Database条件查询
焦棚子的文章目录 请点击下载附件 1.应用场景 底层数据在数据库(sql server数据库,其他数据库同理,下文不再说明.)中,Excel中有查询的字段,需要在数据库中查询相关信息: 2.举个栗子 ...
- SQL server常用查询
SQL server常用操作 查询:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,v ...
- 数据库MySQL(一) 常用查询语句
MySQL笔记 数据库表.查询.排序.数据处理函数 1 数据库 什么是数据库?什么是数据库管理系统?什么是SQL?它们之间的关系? 数据库: 顾名思义:存储数据的仓库,实际上就是一堆文件,这些文件中存 ...
- Mysql 数据库 -------- SQL语句进阶查询 ------- 后部分
Mysql ---- SQL高级查询 连接查询 内连接 外连接 数据库函数 数学函数 聚合函数(给数据表用的) 字符串函数(字符串用''格式) 日期时间函数 存储过程 创建存储过程 创建存储过程中的传 ...
- B站黑马测试第二篇P206视频数据库SQL语句‘关联查询_数据准备‘代码
drop table if exists category; create table category( id int unsigned primary key auto_increment, ty ...
- 数据库SQL SERVER常用命令说明
转载自https://blog.csdn.net/xf_yan/article/details/80464835: 一.基础 1.说明:创建数据库 CREATE DATABASE database-n ...
- SQL Server 常用查询练习
生成测试数据 if exists(select * from sysobjects where name='db_user') drop table db_user gocreate table db ...
- 数据库——sql语句 连接查询
数据库--连接查询 1.定义:同时涉及多个表的查询. 2.连接条件常用格式: [<表名1>]<列名><比较运算符>[<表名2>]<列名2> ...
- Excel以数据库SQL的形式查询本表
Function qh_excel_query12(qh_strSQL0, Optional qh_PathStr0 = "") 'sql方式查询本表的数据,返回二维数组 作者:阙 ...
最新文章
- web集群时session同步的3种方法
- Python3 的多线程使用:_thread,threading,multiprocessing
- php 输出中文的引号,如何将php英文引号转换为中文引号
- Java报警110_Java入门基础SL110
- 常用报文的解析与相互转换
- 索尼发布新一代 IoT 芯片,万物互联方式将改写?
- 四分之一波长阻抗变换器
- C#序列化枚举为字符串和自定义转换器
- 在线光纤网速测试软件,adsl网速测试(中国移动宽带专用测速软件)
- python 黎曼猜想_黎曼猜想简析
- 程序员如何学习Hadoop大数据培训
- 计算机显示器使用的扫描方式,平板扫描仪怎么用 平板扫描仪使用方法【详解】...
- Win Server 2008 R2
- EBS:AP_INV_SELECTION_CRITERIA_ALL
- 云服务器ECS常见的计费方式
- 大牛养成指南(1):吃的草够多,你也能成为大牛
- sketch交互动效能导入html吗,UI设计利器Sketch +最新交互利器 Framer 配合使用和动效制作...
- 献给java初学者,非常适合新手练习的Java项目
- JWT — JWT原理解析及实际使用
- DISM命令常见用法
热门文章
- LeetCode 643. 子数组最大平均数 I(简单)
- 163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧
- 246 中心对称数
- IP:网络上的击鼓传花
- 计算机出现故障后,电脑内存出现故障怎么办 电脑内存常见故障解决方法【详解】...
- 小觅双目相机陀螺仪静态数据输出为0+timeshift ubuntu 系统备份
- Mac如何拷贝文件到移动硬盘
- 如何选择产品关键词?
- 相亲也内卷?被程序员的相亲规划整不会了......
- 大数据技术与应用专业 课 程 标 准