学堂 学堂 学堂公众号手机端

DQL是什么?DQL数据查询操作演示全流程

lewis 1年前 (2024-04-12) 阅读数 9 #技术

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。查询关键字: SELECT 在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站,在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能还会涉及到条件、排序、分页等操作。


那么,本小节我们主要学习的就是如何进行数据的查询操作。 我们先来准备一些数据:
droptableifexistsemployee;createtableemp(idintcomment'编号',worknovarchar(10)comment'工号',namevarchar(10)comment'姓名',genderchar(1)comment'性别',agetinyintunsignedcomment'年龄',idcardchar(18)comment'身份证号',workaddressvarchar(50)comment'工作地址',entrydatedatecomment'入职时间')comment'员工表';INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(1,'00001','柳岩666','女',20,'123456789012345678','北京','2000-01-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(2,'00002','张无忌','男',18,'123456789012345670','北京','2005-09-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(3,'00003','韦一笑','男',38,'123456789712345670','上海','2005-08-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(4,'00004','赵敏','女',18,'123456757123845670','北京','2009-12-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(5,'00005','小昭','女',16,'123456769012345678','上海','2007-07-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(6,'00006','杨逍','男',28,'12345678931234567X','北京','2006-01-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(7,'00007','范瑶','男',40,'123456789212345670','北京','2005-05-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(8,'00008','黛绮丝','女',38,'123456157123645670','天津','2015-05-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(9,'00009','范凉凉','女',45,'123156789012345678','北京','2010-04-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(10,'00010','陈友谅','男',53,'123456789012345670','上海','2011-01-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(11,'00011','张士诚','男',55,'123567897123465670','江苏','2015-05-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(12,'00012','常遇春','男',32,'123446757152345670','北京','2004-02-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(13,'00013','张三丰','男',88,'123656789012345678','江苏','2020-11-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(14,'00014','灭绝','女',65,'123456719012345670','西安','2019-05-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(15,'00015','胡青牛','男',70,'12345674971234567X','西安','2018-04-01');INSERTINTOemp(id,workno,name,gender,age,idcard,workaddress,entrydate)VALUES(16,'00016','周芷若','女',18,null,'北京','2012-06-01');
准备完毕后,我们就可以看到emp表中准备的16条数据。接下来,我们来学习DQL查询操作的语法。

DQL 查询语句,语法结构如下:

SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT分页参数

这部分内容,我们可以将将上面的完整语法进行拆分,分为以下几个部分:


基本查询(不带任何条件)

条件查询(WHERE)

聚合函数(count、max、min、avg、sum)

分组查询(group by)

排序查询(order by)

分页查询(limit)

1.基础查询

在基础查询的DQL语句中,不带任何的查询条件,查询的语法如下:

1). 查询多个字段

SELECT字段1,字段2,字段3...FROM表名;
SELECT*FROM表名;

注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

2). 为字段设置别名

SELECT字段1[AS别名1],字段2[AS别名2]...FROM表名;
SELECT字段1[别名1],字段2[别名2]...FROM表名;

3). 去除重复记录

SELECTDISTINCT字段列表FROM表名;

案例:

A. 查询之前准备的字段中的指定字段 name, workno, age并返回,示例代码如下:

selectname,workno,agefromemp;

B. 查询返回所有字段

selectid,workno,name,gender,age,idcard,workaddress,entrydatefromemp;
select*fromemp;

C. 查询所有员工的工作地址,起别名

selectworkaddressas'工作地址'fromemp;
--as可以省略selectworkaddress'工作地址'fromemp;

D. 查询公司员工的上班地址有哪些(不要重复)

selectdistinctworkaddress'工作地址'fromemp;

2.条件查询

1). 语法

条件查询的语法格式如下:

SELECT字段列表FROM表名WHERE条件列表;

2). 条件常用的比较运算符如下:


常用的逻辑运算符如下:

案例: A. 查询年龄等于 88 的员工
select*fromempwhereage=88;
B. 查询年龄小于 20 的员工信息
select*fromempwhereage<20;
C. 查询年龄小于等于 20 的员工信息
select*fromempwhereage<=20;
D. 查询没有身份证号的员工信息
select*fromempwhereidcardisnull;
E. 查询有身份证号的员工信息
select*fromempwhereidcardisnotnull;
F. 查询年龄不等于 88 的员工信息
select*fromempwhereage!=88;select*fromempwhereage<>88;
G. 查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息
select*fromempwhereage>=15&&age<=20;select*fromempwhereage>=15andage<=20;select*fromempwhereagebetween15and20;
H. 查询性别为 女 且年龄小于 25岁的员工信息
select*fromempwheregender='女'andage<25;
I. 查询年龄等于18 或 20 或 40 的员工信息
select*fromempwhereage=18orage=20orage=40;select*fromempwhereagein(18,20,40);
J. 查询姓名为两个字的员工信息 _ %
select*fromempwherenamelike'__';
K. 查询身份证号最后一位是X的员工信息
select*fromempwhereidcardlike'%X';select*fromempwhereidcardlike'_________________X';





版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门