数据库之数据查询

目录

一、单表查询

查询所有字符

查询指定字符

查询结果排序

指定列名

统计查询 

分组查询 

 连接查询

 二、多表连接

左、右连接

子查询

exists 或 not exists

合并查询

一、单表查询

  • 查询所有字符

select * from 数据表;
  • 查询指定字符

select 字段名1,字段名2,……,字符段n 
from 数据表 
where 查询条件1 and 查询条件2;

select name,concat(MONTH(birthday),'月',DAY(birthday),'日')from student;

select studentid,name from student where sex='男' and nativeplace in("湖南","湖北");

        concat:当字段之间有字符串时,用于连接字符串

        datediff:用来计算两个日期之间相隔的天数

        distinct:查询结果不重复,去掉重复的查询结果

         通配符  % 、 _ 模糊匹配数据内容 

 SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%';
 SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_'; 

下划线通配符_只能模糊匹配1个字符

举个例子:

SELECT *
FROM Mall_products
WHERE prod_name LIKE '%ir%';

该语句查询的结果返回所有商品的名字中间带ir字符的所有信息。通配符%告诉MySQL,返回字符串中间带ir字符的记录,不管ir前面和后面分别有多少字符。

        in 、not in关键字查询 

SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...); 

SELECT 字段名 FROM 表名 WHERE 字段名 NOT IN (n1,n2,n3,...);

distinct : 使用关键字DISTINCT检索数据表中指定的不重复的内容,去除重复结果。

select datediff('2022-9-26','2021-9-26');

select distinct nativeplace from student;

or : 在WHERE声明中使用OR关键字表示只需满足两个条件中的其中一个条件即可返回结果。 

and : 在WHERE子句中使用AND操作符限制只有满足所有条件的查询才会被返回。可以使用AND连接两个甚至更多个查询条件,多个条件表达式之间用AND分开。

  • 查询结果排序

order by <字段号1> [asc/desc],<字段号2> [asc/desc]…   首先按<字段号1> 的顺序排序,若多条记录的<字段号1> 值相同,则按<字段号2>顺序排列

ASC升序 DESC降序  默认升序

limit <位置偏移量> <行数> 指定查询结果的数量,[位置偏移量]指示从第几行开始显示,0表示从第1行开始,若[位置偏移量]省略默认为0。<行数>指定返回的记录条数。

select <字段名1>,<字段名2>,……,<字符段n> 
from <数据表> 
where <查询条件> 
group by <分组表达式> having <分组条件>
order by <字段号1> [asc/desc],<字段号2> [asc/desc]
limit <位置偏移量> <行数>;
              
  • 指定列名

select <列名> as <列别名>  为列名指定另外的名字

  • 统计查询 

函数名功能
SUM
计算数值列的和
AVG
计算数值列的平均值
MAX
计算列(数值、日期、字符)的最大值
MIN
计算列(数值、日期、字符)的最小值
COUNT
计算查询结果的数目
select count(*) from student where sex="女";
  • 分组查询 

group by <字段名>  having <条件表达式>

<字段名>为分组依据
<条件表达式>是分组后要满足的条件

例如,查询品均分大于80的学号和平均分 

select studentid,avg(score) as 平均分 from score group by studentid having avg(score)>80;
  •  连接查询

第一种 from 数据表1,数据表2 where 连接条件

第二种 from 数据表1 join 数据表2 on 连接条件 

(on 后面是连接条件,通常是关键字段的值相同)

连接查询中引用两个表的公共字段,须在字符段前添加表名作为前缀

select score.studentid,name,courseid,score 
from score,student
where score.studentid=student.studentid;
select score.studentid,name,courseid,score 
from score join student
on score.studentid=student.studentid;

 二、多表连接

  • 左、右连接

left join 左连接。即输出中包含数据表1中所有的记录。如果该纪录在数据表2中有匹配记录,则返回数据表2中对应记录;如果没有匹配记录,则返回空值。

right join 右连接。即输出中包含数据表2中所有 的记录,如果该纪录在数据表1中有匹配记录,则返回数据表1中对应记录;如果没有匹配记录,则返回空值。

  • 子查询

例如,查询student数据表中周晓阳的老乡

内查询 select nativeplace from student where name=“周晓阳 返回数据集 湖南
外查询
select * from student where nativeplace= ( 内查询结果 )
返回 student 数据表中湖南的学生
select * from student 
where nativeplace= (select nativeplace from student where name=“周晓阳”);

In 关键字进行子查询,内层循环返回一个数据集,not in

anysome 是同义词。重要一行能使结果为真,子查询就为真。

ALL关键字

ALL必须接在一个比较运算符的后面,表示与子查询返回的所有值比较都为 TRUE则返回TRUE

select * from course where courseid=any(select courseid from score);
  • exists 或 not exists

select * from course 
where not exists (select courseid from score where score.courseid=course.courseid);
  • 合并查询

通过集合的并运算(UNION),可将两个SELECT 语句的查询结果合并为一个结果。

SELECT <字段1>,<字段2>……FROM <表1> 
UNION 
SELECT <字段1>,<字段2>…… FROM <表2>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值