目录
一、DQL介绍
1、DQL
DQL是Data Query Language缩写,数据查询语言,用于检索数据库中的数据。DQL是作为查询语句,不会对数据库的数据进行修改。
2、常见DQL语句
SELECT | 用于从数据库中查询数据 |
FROM | 指定要查询的数据表 |
WHERE | 指定查询过滤条件 |
GROUP BY | 按照指定的列对查询结果进行分组 |
HAVING | 指定对分组后的结果进行过滤的条件 |
ORDER BY | 指定查询结果的排序顺序,ASC升序,DESC降序 |
JOIN | 将多个表按照某些条件连接在一起进行查询 |
二、DQL语句理解之单表查询
1、准备数据
(1)数据库test中的表goods中的数据如下:
(2)表goods结构如下:
(3)数据库test中的表product中的数据如下(示例中的单表查询使用的是这个表):
(4)表product结构如下:
2、SELECT语句
2.1基本语法
SELECT [distinct]*|列名1, 列名2, ...
FROM 表名
WHERE 条件
GROUP BY 列名
HAVING 条件
ORDER BY 列名 [ASC|DESC]
2.2示例
(1)查询所有的商品
select *from product;
结果如下:
(2)查询商品名和商品价格
select pname,price from product;
结果如下:
3、WHERE条件查询
3.1基本语法
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;
3.2条件查询分类
3.3示例
(1)查询表product中price等于5000的记录
select * from product where price=5000;
结果如下:
4、范围查询
4.1BETWEEN AND进行范围查询
4.1.1基本语法
column_name BETWEEN value1 AND value2;
4.1.2示例
(1)查询表product中price在2000~5000的商品记录
select * from product where price BETWEEN 2000 AND 5000;
结果如下:
4.2IN进行范围查询
4.2.1基本语法
column_name IN (value1, value2, ...)
4.2.2示例
(1)查询表product中price等于2000或3000的商品记录
select * from product where price in(2000,3000);
结果如下:
5、比较查询
5.1查询分类
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (10= 20) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (10 != 20) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (10 > 20) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (10< 20) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (10 >= 20) 返回false。 |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (10 <= 20) 返回 true。 |
5.2示例
(1)查询表product中price不等于5000的商品记录
select * from product where price <> 5000;
结果如下:
6、Like模糊查询
6.1百分号(`%`)
(1)百分号(%)通配符:代表零个或多个字符。可以用在模式的任意位置。基本语法如下:
SELECT * FROM table_name WHERE column_name LIKE '%abc%';
(2)示例:查询以'香'开头的所有商品
6.2下划线(_)
(1)下划线( \_)通配符:代表一个单个字符。可以用在模式的任意位置。基本语法如下:
SELECT * FROM table_name WHERE column_name LIKE 'a_';
(2)示例:查询第二个字为'想'的所有商品
7、非空查询
7.1基础语法
SELECT * FROM table_name WHERE column_name IS NOT NULL;
7.2示例
8、逻辑查询
8.1AND运算符
(1)AND用于指定多个条件同时满足的查询,基本语法:
SELECT * FROM table_name WHERE condition1 AND condition2;
(2)示例
8.2OR运算符
(1)OR用于指定多个条件中任何一个满足的查询,基本语法:
SELECT * FROM table_name WHERE condition1 OR condition2;
(2)示例
8.3NOT运算符
(1)NOT用于指定条件的否定查询,基本语法:
SELECT * FROM table_name WHERE NOT condition;
(2)示例
9、ORDER BY排序查询
9.1基本语法
#ASC升序 DESC降序
SELECT column1, column2, ...
FROM table
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
9.2示例
10、聚合查询
10.1基本语法
SELECT aggregate_function(column1), aggregate_function(column2), ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
HAVING condition;
10.2分类
聚合函数 | 作用 |
---|---|
COUNT(column) | 统计某一列的非空值数量。 |
SUM(column) | 计算某一列的数据之和,如果指定列类型不是数值类型,则计算结果为0。 |
MAX(column) | 找出某一列中的最大值,如果指定列是字符串类型,使用字符串排序运算。 |
MIN(column) | 找出某一列中的最小值,如果指定列是字符串类型,使用字符串排序运算。 |
AVG(column) | 计算某一列的数据平均值,如果指定列类型不是数值类型,则计算结果为0。 |
10.3示例
(1)查询COUNT函数记录条数取别名叫total_products,AVG函数获取平均值取名average_price,MAX函数获取最大值取别名max_price,MIN函数最小值取别名min_price
SELECT COUNT(pid) AS total_products, AVG(price) AS average_price, MAX(price) AS max_price, MIN(price) AS min_price from product;
11、GROUP BY分组查询与having子句
11.1基本语法
SELECT column1, column2, ..., aggregate_function(column)
FROM table
WHERE condition
GROUP BY column1, column2, ...
HAVING condition;
11.2group by语句
(1)基本语法
select column1, column2, ... from table_name group by column1, column2, ...;
(2)示例
11.3聚合函数
(1)group by + 聚合函数的使用:查询每个商品数量和价格分别取别名
select pid,count(*) as total_count,avg(price) as averg_price from product group by pid;
11.4having语句
(1)`having`是过滤分组数据的,只能用于`group by`,示例如下
#统计各个分类商品的个数,且只显示个数大于1的信息
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*) > 1;
12、limit分页查询
12.1基本语法
#`offset`:结果集的起始位置,表示返回结果时忽略前面的多少条记录。(起始位置从0开始)
# `count`:要返回的记录数,指定返回多少条记录。
SELECT column1, column2, ...
FROM table
LIMIT offset, count;
12.2示例
(1)查询从第八条数据开始后面的五条数据
select * from product limit 7,5;
三、DQL语句理解之多表查询
1.笛卡尔积
(1)笛卡尔积指的是通过对两个表进行交叉连接操作,生成一个包含了两个表中所有可能组合的结果集。比如说,两个表分别右两条记录,那么笛卡尔积就是2x2=4。
(2)示例
Table A:
ID | Name |
---|---|
1 | Alice |
2 | Bob |
Table B:
ID | Course |
---|---|
101 | Math |
102 | English |
通过对表A和表B执行交叉连接操作,可以得到它们的笛卡尔积结果:
Table C:
ID | Name | ID | Course |
---|---|---|---|
1 | Alice | 101 | Math |
1 | Alice | 102 | English |
2 | Bob | 101 | Math |
2 | Bob | 102 | English |
2、连接查询
2.1左外连接
(1)关系图如下
(2)基本语法
SELECT 列名
FROM 表A
LEFT JOIN 表B ON 关联条件;
(3)示例
2.2右外连接
(1)关系图如下
(2)基本语法
SELECT 列名
FROM 表A
RIGHT JOIN 表B ON 关联条件;
(3)示例
2.3内连接
(1)关系图如下
(2)基本语法
SELECT 列名
FROM 表A
INNER JOIN 表B ON 关联条件;
(3)示例
3、子查询
(1)基本语法:
SELECT 列名 FROM 表WHERE 列 IN (SELECT 列名 FROM 表 WHERE 条件);
(2)示例:查询product表中价格大于整个表价格平均值的记录
四、总结
数据库中查询很重要,尤其查询语句又多又杂,所以单独拎出来记一篇笔记。