二级MYSQL中的DQL语句

DQL(Data Query Language,数据查询语言) 是 SQL 的一个子集,专门用于从数据库中查询数据。DQL 的核心语句是 `SELECT`,它允许用户从表中检索数据,并支持多种复杂的查询操作。

以下是 DQL 语句 的详细介绍,包括基本语法、常用操作和示例。


目录

1. 基本语法

参数说明:

 2. 常用操作

(1) 基本查询

(2) 条件查询(WHERE)

(3) 排序(ORDER BY)

(4) 分组(GROUP BY)

(5) 分组后过滤(HAVING)

(6) 限制结果集(LIMIT)

3. 高级查询

(1) 连接查询(JOIN)

(2) 子查询

(3) 联合查询(UNION)

4. 常用函数


1. 基本语法


SELECT 语句的基本语法如下:

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column]
[HAVING condition]
[ORDER BY column [ASC|DESC]]
[LIMIT number];

参数说明:


SELECT:指定要查询的列,可以使用 `*` 表示所有列。
FROM:指定要查询的表。
WHERE:过滤条件,用于筛选符合条件的行。
GROUP BY:按指定列分组,通常与聚合函数一起使用。
HAVING:对分组后的结果进行过滤。
ORDER BY:按指定列排序,`ASC` 表示升序(默认),`DESC` 表示降序。
LIMIT:限制返回的行数。


 2. 常用操作

(1) 基本查询


查询表中的所有列:
 

SELECT * FROM mytable;

查询特定列:

SELECT name, age FROM mytable;
(2) 条件查询(WHERE)


查询满足条件的行:
 

SELECT * FROM mytable WHERE age > 18;

支持多种条件运算符:
- 比较运算符:`=`, `!=`, `>`, `<`, `>=`, `<=`
- 逻辑运算符:`AND`, `OR`, `NOT`
- 范围查询:`BETWEEN ... AND ...`
- 模糊查询:`LIKE`
- 空值查询:`IS NULL`, `IS NOT NULL`

示例:
- 查询年龄在 18 到 25 岁之间的用户:

SELECT * FROM mytable WHERE age BETWEEN 18 AND 25;

- 查询名字以 "A" 开头的用户:
 

SELECT * FROM mytable WHERE name LIKE 'A%';

- 查询邮箱为空的用户:
 

SELECT * FROM mytable WHERE email IS NULL;
(3) 排序(ORDER BY)

ASC:升序;  DESC:降序;


按指定列排序:
 

SELECT * FROM mytable ORDER BY age DESC;

多列排序:
 

SELECT * FROM mytable ORDER BY age DESC, name ASC;
(4) 分组(GROUP BY)


按指定列分组,通常与聚合函数一起使用:
 

SELECT age, COUNT(*) FROM mytable GROUP BY age;

常用聚合函数:
- COUNT():统计行数。
- SUM():求和。
- AVG():求平均值。
- MAX():求最大值。
- MIN():求最小值。

示例:
- 统计每个年龄的用户数量:
 

SELECT age, COUNT(*) AS user_count FROM mytable GROUP BY age;

- 计算每个部门的平均工资:
 

SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;
(5) 分组后过滤(HAVING)


对分组后的结果进行过滤:
 

SELECT age, COUNT(*) FROM mytable GROUP BY age HAVING COUNT(*) > 10;

示例:
- 查询用户数量大于 10 的年龄:
 

SELECT age, COUNT(*) AS user_count 
  FROM mytable 
  GROUP BY age 
  HAVING user_count > 10;
(6) 限制结果集(LIMIT)


限制返回的行数:
 

SELECT * FROM mytable LIMIT 10;

分页查询:
 

SELECT * FROM mytable LIMIT 10 OFFSET 20; -- 跳过前 20 行,返回接下来的 10 行

3. 高级查询

(1) 连接查询(JOIN)


连接多个表进行查询:
- INNER JOIN:内连接,返回匹配的行。
- LEFT JOIN:左连接,返回左表的所有行和右表匹配的行。
- RIGHT JOIN:右连接,返回右表的所有行和左表匹配的行。
- FULL JOIN:全连接,返回所有匹配和不匹配的行(MySQL 不支持,但可以通过 UNION 实现)。

示例:
- 查询用户及其订单信息:
 

  SELECT u.name, o.order_id 
  FROM users u 
  INNER JOIN orders o ON u.id = o.user_id;

- 查询所有用户及其订单信息(包括没有订单的用户):
 

SELECT u.name, o.order_id 
  FROM users u 
  LEFT JOIN orders o ON u.id = o.user_id;

(2) 子查询


在查询中嵌套另一个查询:
 

SELECT name FROM mytable WHERE age = (SELECT MAX(age) FROM mytable);

示例:
- 查询工资高于平均工资的员工:
 

SELECT name, salary 
  FROM employees 
  WHERE salary > (SELECT AVG(salary) FROM employees);

(3) 联合查询(UNION)


合并多个查询的结果集:
 

SELECT name FROM table1
UNION
SELECT name FROM table2;

示例:
- 查询两个表中的所有用户:
 

 SELECT name FROM users1
  UNION
  SELECT name FROM users2;

4. 常用函数

(1) 字符串函数
- `CONCAT()`:连接字符串。
  SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;


- `SUBSTRING()`:截取字符串。
- `LENGTH()`:返回字符串长度。

 (2) 日期函数
- `NOW()`:返回当前日期和时间。

- `DATE()`:提取日期部分。

- `DATEDIFF()`:计算日期差。

 (3) 数学函数
- `ROUND()`:四舍五入。

- `ABS()`:返回绝对值。
 

5.考试中出现的DQL语句:

SELECT dname FROM tb_department,tb_employee 
WHERE tb_department.dno=tb_employee.dno 
GROUP BY dname HAVING count(dname) >=3;
SELECT ename,birthday FROM tb_employee
WHERE year(birthday) = 1985
ORDER BY birthday;
SELECT s_sex,count(*) FROM tb_student 
GROUP BY s_sex;
SELECT s.s_name ,sc.s_score FROM tb_student s
JOIN tb_score sc ON s.s_id=sc.s_id
JOIN tb_course c ON sc.c_id=c.c_id
WHERE c.c_name = 'PHP程序设计' AND sc.s_score<60;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值