MySQL 数据库查询语言(DQL)

发布于 2024-05-04 15:54:21 字数 4903 浏览 22 评论 0

1. 顺序

1.1 语法顺序

# SELECT 语句由子句构成, 最重要的子句有:  
SELECT columns_name       --查找一列或多列,多列之间用逗号隔开
FROM Table                --目标表
WHERE condition           --过滤条件
GROUP BY columns_name     --按列值分组,可以 1 个或多个列
HAVING condition          --分组后的筛选条件,HAVING 与 WHERE 区别在于前者表达式中可包含函数
ORDER BY columns_name     --按列排序
LIMIT start, row_count    --对结果进行限定,start 表示从哪行开始,row_count 表示结果行数

这些总是使用这个顺序。

1.2 执行顺序

FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY

2. 语法及示例

SELECT 语句

多列查询

SELECT [DISTINCT] <目标列组>
    FROM <数据源>
    [WHERE <元组选择条件>]
    [GROUP BY <分列组[HAVING <组选择条件>]]
    [ORDER BY <排序 1列<排序 2列>]
    

# 例子
SELECT FirstName, LastName, OrderDate
FROM Orders WHERE OrderDate '10/10/2010'

# 去重
SELECT DISTINCT FirstName FROM Orders

SELECT * 会增加很多不必要的消耗(CPU、IO、内存、带宽)

从第一行开始选择一共五行数据

SELECT FirstName FROM Orders  limt 5 offset 1;

排序

# 语法
SELECT co_name1,col_name2 
FROM table_name 
ORDER BY col_name1 DESC,col_name2 ASC

#例子
SELECT ,FirstName
FROM Orders 
ORDER BY OrderDate DESC

常用条件过滤

# 范围内检查
SELECT col_name FROM table_name WHERE col_name BETEWEEN 5 AND 10;

# 空值检查
SELECT col_name FROM table_name WHERE col_name IS null;

# in 操作符
SELECT col_name FROM table_name WHERE col_name IN (....);

# NOT 操作符
SELECT col_name FROM table_name WHERE NOT (条件);

# AND 和 OR 注意优先级 and 优先级高于 or
SELECT col_name FROM table_name 
WHERE (condi_1 OR condi_2) AND condi_3;

# 使用通配符进行过滤
SELECT col_name FROM table_name WHERE col_name like '..%..';

SELECT col_name FROM table_name WHERE col_name like '.._..';

SELECT col_name FROM table_name WHERE col_name like '[]%';

分组并按条件筛选

# 语法
SELECT <Column List>, <Aggregate Function>(<Column Name>)
FROM <Table Name>
WHERE <Search Condition>
GROUP BY <Column List>

# 例子
SELECT LastName, SUM(OrderValue)
FROM Orders
WHERE OrderDate '10/10/2010'
GROUP BY LastName

注意: 
GROUP BY 后面也可以接条件。
WHERE 语句和 HAVING配合的使用。WHERE在 HAVING之前。
WHERE 过滤针对的是行,HAVING过滤针对的是组。

分组和排序的顺序

/*
SELECR 
FROM 
WHERE
GROUP BY 
HAVING 
ORDER BY
*/
SELECT  col_name FROM table_name
WHERE <condition_1>
GROUP BY <col_name>
HAVING <condition_2>
ORDER BY <col_name>

子查询

写在 () 中,把内层查询结果当做外层查询参照的数据表来用。

SELECT col_name FROM table_name 
WHERE  col_name  = 
(SELECT  col_name  FROM table_name WHERE .... );

一些小例子

-- 用 and 操作符查询 s_id 为 101 并且 f_id 为 a1 的水果记录
select * from fruits
where s_id = 101 and f_id = 'a1';

-- 用 or 操作符查询苹果或者橙子的相关记录
select * from fruits
where f_name = 'apple' or f_name = 'orange';

-- 用 in 操作符查询苹果和橙子的相关记录
select * from fruits
where f_name in('apple','orange');

-- 用 not in 操作符查询苹果和橙子之外的水果的相关记录
select * from fruits
where f_name not in('apple','orange');

-- 用 between...and 操作符查询 f_price 在 10 元到 20 元之间的水果记录
select * from fruits
where f_price between 10 and 20;

-- 用 like 操作符查询所有 f_name 由 a 开始的水果记录
select * from fruits
where f_name like 'a%';

-- 用 like 操作符查询所有 f_id 由 b 开始且字符长度为两位的水果记录
select * from fruits
where f_id like 'b_';

-- 用 is null 操作符查询所有 f_name 为空的水果记录
select * from fruits
where f_name is null;

-- 查询 fruits 表中所有不重复的 s_id
select distinct s_id from fruits;

-- 用 any 操作符与子查询语句来查询所有 f_id 对应的 f_price 在 10 元到 20 元之间的水果记录
select * from fruits where f_id =  any
(select f_id from fruits where f_price between 10 and 20);


-- 用 all 操作符与子查询语句来查询所有 f_price 大于 20 元的水果记录
select * from fruits where f_price all
(select f_price from fruits where f_price <= 20);

-- 用 exists 操作符与子查询语句来查询是否存在 f_price 大于 30 元的水果记录
select * from fruits where exists
(select * from fruits where f_price 30);

-- 用 as 将 fruits 表名重命名为 f 后使用
select f.* from fruits as f;

-- 显示 f_price 金额最大的前三名水果记录
select * from fruits
order by f_price desc
limit 3;

表的连接查询

# 语法
SELECT <Column List>
FROM <Table1JOIN <Table2>
ON <Table1>.<Column1= <Table2>.<Column1>、

# 示例
SELECT Orders.LastName, Countries.CountryName
FROM Orders INNER JOIN Countries ON
Orders.CountryID = Countries.ID

除此之外还有:
左联结 LEFT JOIN
右联结 RIGHT JOIN
全联结 FULL JOIN

联合查询

# 语法
SELECT <Column ListFROM <Table1>
UNION
SELECT <Column ListFROM <Table2>

# 示例
SELECT <Column ListFROM <Table1>
UNION
SELECT <Column ListFROM <Table2>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

窝囊感情。

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

娇女薄笑

文章 0 评论 0

biaggi

文章 0 评论 0

xiaolangfanhua

文章 0 评论 0

rivulet

文章 0 评论 0

我三岁

文章 0 评论 0

薆情海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文