当前位置: 首页 > article >正文

数据库的查询操作

之前学习了怎么创建数据库,创建数据表以及给数据表添加数据,我们今天就学习一下数据的查询

一. 查询语句的语法

select 列名(字段名) form 表名 [where (查询条件表达式)] [order by <排序的列明>[ASC或DESC]]

1.查询所有的行和列

* 代表所有列,一般在项目中不允许使用,按需搜索

select * from 表名;

2.查询部分列

select 字段1,字段2,... from 表名;

3.where 查询条件

select 字段1,字段2,...from 表名 where 条件;

4.别名 as可以省略,不推荐

select 字段1 as 别名1, 字段2 as 别名2, .... form 表名;

5.查询null

select * from 表名 where 字段 is null;

6.被清空的列 使用‘’ 

select * from 表名 where 字段='';



# 既要查询null的数据,也要查询数据被删除的数据

select * from student where sex='' or sex is null ;

7.分页(开始,数量) 

注意,初始记录行的偏移量从0开始。limit 要放到语句的最后

select * from 表名 limit 开始数,显示数量;


#查询学生表的第6到第18条数据
select * from student limit 5,13;

# 解释: 第6条数据,起始值从0开始,所以是 6-1=5.

# 第6条数据到第18条数据中间有13条数据,是最后一条数据减去起始数据+1 18-6=12 +1=13

# 所以是 5(开始的下标),13(显示的数量)


# 查询学生表性别为男生前五个人

select * from student where sex='男' limit 0,5;

以上是部分查询语法,我们练习一下


-- 1.创建表

/*
 Book_type(分类)(序号t_id,类型名称t_name)
 Book书(序号b_id,书名b_name,价格price,作者author,类型编号t_id,出版时间publication,库存数量num)
 1)图书分类主键自增,图书主键自增
 2)添加外键关系
*/

# 创建图书分类表
create table book_type(
  t_id int primary key auto_increment comment'序号',
  t_name varchar(255) comment'类型名称'
);

# 创建图书表
create table book(
	b_id int primary key  auto_increment comment'序号',
	b_name  varchar(255) comment'书名',
	price double comment'价格',
	author varchar(255) comment'作者',
	t_id int comment'类型编号',
	foreign key (t_id) REFERENCES book_type(t_id),
	publication date comment'出版时间',
	num int comment'库存数量'
);

# 注意:数据都是模拟的,没有特殊含义
-- 2.给book_type添加3条数据

insert into book_type(t_name) values('悬疑'),('武侠'),('散文');

-- 3.给book 添加10条数据
insert into book values(null,'稻城亚丁',35.00,'雪狼子',3,'2007-01-01',10),
(null,'楚留香传奇',38.00,'古龙',2,'2005-01-07',20),
(null,'陆小凤传奇',50.00,'古龙',2,'2006-01-02',130),
(null,'三体',35.00,'刘慈欣',1,'2007-01-02',50),
(null,'第三命运体',28.90,'',2,'2008-01-06',70),
(null,'时间简史',33.00,'古龙',2,'2009-02-03',110),
(null,'格林童话',23.00,'',1,'2010-10-01',120),
(null,'命运',108.00,'张三',1,'2011-05-01',130),
(null,'球形闪电',99.00,'刘慈欣',1,'2020-12-12',60),
(null,'童话世界',80.00,'唐福睿',1,'2012-03-25',150)

-- 4.查询所有图书类型

select * from book_type;

-- 5.查询所有的图书
select * from book;

-- 6.查询类型编号为1的所有图书
select * from book where t_id=1;

-- 7.查询作者是:”古龙”的所有图书
select * from book where author='古龙';

-- 8.查询 出版时间为2020-12的图书

select * from book where publication>='2020-12-01' and publication<='2020-12-31' ;

-- 9.价格在20~50之间的图书
select * from book where price between 20 and 50;

-- 10.查询 “格林童话”,”三体”,”时间简史”的详细信息
select * from book where b_name='格林童话' or b_name='三体' or b_name='时间简史' ;

-- 11.查询 库存数量为60的图书信息
select * from book where num=60;

-- 12.查询 没有作者的图书信息
select * from book where author is null or  author='';

-- 13.修该书名为”球形闪电”的图书价格为68元

# 修改
update book set price=68 where b_name='球形闪电';
#查询
select * from book where b_name='球形闪电';

-- 14.删除 书名为  “童话世界”的图书

#删除
delete from book where b_name='童话世界';
#查看
select * from book;

二. 模糊查询

在项目中尽量不要使用。

# 在学生表中想要查询姓张的学生该如何去查询呢?

# 我们今天学习模糊查询

# _ :代表一个字符

# %:代表任意长度的字符串

# 例子: 学生表中有 ‘张三’,‘张三丰’,‘张无忌’,‘张强’等。

#此时我想要查看姓张只有两个字都有哪些

select * from student where name like '张_';

# 这样我们查询出来姓张,只有两个字的名字有‘张三’,‘张强’。

# 那我想要查询姓张有三个字呢?聪明的你肯定想到了在加一个_ 我们来演示一下。

select * from student where name like '张_ _';

# 这样就查询出来 ‘张三丰’,‘张无忌’。

# 我现在想要查看班里姓张的同学都有哪些? 我们又该如何查询呢?

select * from student where name like '张%';

# % 是进行任意长度的查询,表示 姓张后面一个字两个字或者多个字都可以。聪明的你做对了吗。

我们在思考一个问题,想要查询姓名包含‘宝’字的信息又该如何查询呢?

包含‘宝’字的姓名,我们就需要多字段的模糊查询,我们一起看一下该如何使用

select * from student where name like '%宝%';

# 这样表示前面可以是赵王孙李,中间含有宝,末尾可以有也可以没有 比如:张宝娜,李宝,诸葛宝力 等

关键字:between,in,not 

between:查询某一列中内容在特定范围内的记录

# 查询60-80的成绩

select * from result where student_result>=60 and student_result<=80;

# 我们之前都是这样书写的,我们有更简便的书写方式

select * from result where student_result between 60 and 80;

# between and  between后面跟最小值,and后面面跟最大值

# 如果between后面跟最大值,and后面跟最大值可以吗? 大家思考一下。

# 想必大家都已经思考出来答案了,运行的时候语句没有问题,但是查询不到信息,这是因为between后面跟的最小值,但如果写反之后,就变成了 需要查询的成绩大于等于80 小于等于60的成绩 

in:查询某一列中内容与所列出的内容列表匹配的记录

# 查询‘格林童话’,‘三体’,‘时间简史’的详细信息

select * from book where b_name='格林童话' or b_name='三体' or b_name='时间简史' ;

# 简写 

select * from book where b_name in('格林童话','三体','时间简史');

not:否,不是

-- 所有不是张姓的学生信息

select * from student where student_name not like '张%';

三. 排序 (order by)

我们在生活中遇到很多情况需要进行排序,比如年龄的大小排序,成绩高低排序,那排序又该如何进行操作呢?

排序分为两种,一种升序,一种降序,

升序就是从小到大排列,降序从大到小

# 年龄对公司的员工进行升序排序

# 升序是asc,asc可以省略,默认排序方式是asc

select * from emp order by age asc;

-- asc可以省略
select * from emp order by age ;


-- 降序 desc 不可省略
select * from emp order by age desc;

# 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

# 如果是多字段排序,就要用逗号隔开
select * from emp order by age,entryday desc;

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行降序。

-- 获取成绩前两名信息

select * from result order by student_result desc limit 0,2;

总结:

经过以上的数据库查询的学习,简单总结一下

1.查询会逐行筛选表中的数据,按条件重新重新组合成‘记录集’。

2.使用is null 判断一行中等 某一列是否为null

3. 数据表中的数据被删除掉,并不会显示null,而是变成空字段,查询使用 字段=‘’查询

4.使用 order by 进行排序,可以按多列排序

5.在查询中,可以使用常量、表达式、运算符

6.limit 主要用在分页语句中使用,常常在语句最后。

以上就是数据库查询的基本使用,希望大家所有帮助。


http://www.kler.cn/news/362389.html

相关文章:

  • 《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优
  • 【Vue.js 3.0】Vue.js 中使用 Component 动态组件
  • 1.2 C++内存
  • 构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像
  • 【华为HCIP实战课程十七】OSPF的4类及5类LSA详解,网络工程师
  • python + mitmproxy 爬手机app (1)
  • 6、面向对象八股文(长期更新_整理收集_排版未优化_day06_20个
  • volatile 关键字的作用学习
  • 中小企业如何做大做强?
  • Cadence元件A属性和B属性相互覆盖
  • k8s集群安装
  • 2024/10/23 (easycovery密匙激活码为什么这么贵)
  • 调查显示软件供应链攻击增加
  • 知识问答网站毕业设计基于SpringBootSSM框架
  • git tag 用法
  • Spring Boot在线考试系统:JavaWeb技术的应用案例
  • 使用Redisson的布隆过滤器解决缓存穿透问题
  • 深入探索JavaScript异步编程:Promise与async/await的实现原理与应用
  • 如何获得Linux系统
  • 人工智能:引领未来的科技革命
  • 整理—Redis
  • MySQL-27.多表查询-案例
  • Cesium for UE-04-一些说明
  • Linux基础项目开发day05:量产工具——页面系统
  • 鹏哥C语言81-82---指针和数组+二级指针+指针数组
  • CentOS7安装RabbitMQ-3.13.7、修改端口号