本文已参与「新人创作礼」活动,一起开启掘金创作之路
前言:本章是基于数据操作语言(DML)之后的学习,主要总结数据查询语言(DQL)的语法及其使用。
数据库查询语言,可简称为DQL,英文全称为Data Query Language,用来查询数据库中表的记录。
注:会分三小章对DQL语句进行总结
查询关键字:SELECT
使用场景:
在一个正常的业务系统中,查询操作的频次是要远高于增删改的!
当我们去访问企业官网、电商网站,在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。
而且在查询的过程中,可能还会涉及到条件、排序、分页等操作。
一、基本语法
数据查询语言语法结构如下:
SELECT
字段列表
FROM
表名列表
WHERE #条件查询
条件列表
GROUP BY #分组查询
分组字段列表
HAVING
分组后条件列表
ORDER BY #排序查询
排序字段列表
LIMIT #分页查询
分页参数
本文也是由语法结构进行学习和总结:
基本查询(不带任何条件)
条件查询(WHERE)
聚合函数(count、max、min、avg、sum)
分组查询(group by)
排序查询(order by)
分页查询(limit)
二、基础查询
(1) 查询多个字段
语法一:
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
语法二:
SELECT * FROM 表名 ;
注意:* 代表查询所有字段,在实际开发中尽量少用(影响效率、不直观)。
(2) 字段设置别名
语法一:使用AS关键字
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
语法二:省略AS关键字
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;
(3) 去除重复记录
语法:
SELECT DISTINCT 字段列表 FROM 表名;
#去重关键字:DISTINCT
案例一:查询指定字段 name, workno, age并返回
select name,workno,age from emp;
案例二:查询返回所有字段
-- 将表中所有字段列出再根据emp表进行查询。
select id ,workno,name,gender,age,idcard,workaddress,entrydate from emp;
--直接用 * 代替字段,提高SQL编写效率。
select * from emp;
案例三:查询所有员工的工作地址,起别名
-- 用AS关键字
select workaddress as '工作地址' from emp;
-- 省略AS关键字
select workaddress '工作地址' from emp;
案例四:查询公司员工的上班地址有哪些(不要重复)
--思路:去重关键字:DISTINCT
select distinct workaddress '工作地址' from emp;
三、条件查询
(1) 语法:
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
(2) 条件
此处需要学习和掌握比较运算符和逻辑运算符,并根据两种运算符将条件SQL化。
比较运算符 | 功能 |
---|---|
大于 | |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> or != | 不等于 |
BETWEEN...AND... | 在某个范围内(含最小值和最大值) |
INT(...) | 在in之后的列表中的值,多选一 |
LIKE 占位符 | 模糊查询 (_匹配单个字符, %匹配任意个字符) |
IS NULL | 表示是NULL |
常用逻辑运算符如下:
逻辑运算符 | 功能 |
---|---|
AND or && | 并且(多个条件同时成立) |
OR | 或者(多个条件任意一个成立) |
NOT or ! | 非,不是 |
恩格斯曾说:“我们的理论是发展着的理论,而不是必须背得烂熟并机械地加以重复的教条。”
所以,实践是必要的!!!
接下来我用我做的几个案例来总结下上述理论。
注:案例中的思路只是方法中的一种,有可能有多种写法。
案例一:查询年龄等于 88 的员工
-- 思路:age = 88
select * from emp where age = 88;
案例二:查询年龄小于 20 的员工信息
-- 思路:age <= 20
select * from emp where age < 20;
案例三:查询年龄小于等于 20 的员工信息
-- 思路:age <= 20
select * from emp where age <= 20;
案例四:查询没有身份证号的员工信息
-- 思路:idcard is null
select * from emp where idcard is null;
方案五:查询有身份证号的员工信息
-- 思路:idcard is not null
select * from emp where idcard is not null;
方案六:查询年龄不等于 88 的员工信息
-- 思路:age!=88
select * from emp where age != 88;
# or
select * from emp where <> 88;
``
```sql
案例七:查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息
-- 思路:BETWEEN 15 AND 20
select * from emp where age >= 15 && age <=20
#or
select * from emp where age >= 15 and age <= 20;
#or
select * from emp where age between 15 and 20;
案例八:查询性别为 女 且年龄小于 25岁的员工信息
-- 思路:gender='女' and age<25
select * from emp where gender = '女' and age < 25;
案例九:查询年龄等于18 或 20 或 40 的员工信息
-- 思路: age=18 or age =20 or age =40
select * from emp where age = 18 or age = 20 or age =40;
# or
select * from emp where age in(18,20,40);
案例十:查询姓名为两个字的员工信息 _ %
-- 思路:like
select * from emp where name like '__';
案例十一:查询身份证号最后一位是X的员工信息
-- 思路:like '%X'
select * from emp where idcard like '%X';
# or
select * from emp where idcard like '_________________X';
四、小结
这就是数据查询语言的基本语法、基础查询和条件查询的总结。
在下一章中会对聚合函数、分组查询和排序查询进行总结。