SQL基础2—Data Query Language 数据查询语言

本文介绍了SQL中的Data Query Language(DQL),包括SELECT FROM、WHERE条件筛选、GROUP BY与HAVING、ORDER BY排序以及LIMIT分页查询。详细讲解了SELECT语句的执行顺序、DQL的特点、别名的使用、去重方法、模糊查询以及各种查询条件的运用,是学习SQL查询的基础教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库表的操作步骤


1.查看当前连接下所有的数据库

SHOW DATABASES;

2.启用指定的数据库

USE myemployees;

3.查看当前库下所有表

SHOW TABLES;

SHOW TABLES FROM Database;

4.查看表的具体结构

方式1:
SHOW COLUMNS FROM employees;

方式2:
DESC employees;

5.具体表的查询语句

SELECT * FROM table;

其他:

  • 查看当前数据库服务器的版本

    SELECT VERSION();

  • 查看当前用户

    SELECT USER();

  • 修改字符集

    SET NAMES GBK;

2.Data Query Language 数据查询语言


DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。

语法:

SELECT selection_list /*要查询的列名称*/
FROM table_list /*要查询的表名称*/
JOIN table_list	
	ON condition /*联结条件*/
WHERE condition /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BYsorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/

着重号:`

2.1 SELECT FROM


2.1.1 Select语句的执行顺序:

在这里插入图片描述

  • FROM:检测对应表是否存在、连接是否正确
  • ON
  • JOIN
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT:检测对应列名是否存在,运算、函数是否正确
  • DISTINCT
  • ORDER BY
  • LIMIT

2.1.2 DQL特点

1、查询结果为一个虚拟表,类似于java中学过的System.out.println(打印内容);

2、查询列表可以是

  • 常量值
  • 表达式
  • 变量
  • 字段
  • 函数
  • 也可以是上述的组合

2.1.3 别名

  • 1.AS “别名”:唯一有双引号的地方
  • 2.空格(省略AS关键字)
  • 3.可以省略双引号
    • 前提没有特殊符号

方式一:使用as关键字

SELECT 900 AS 出勤天数,VERSION() AS 版本号,last_name FROM employees;

方式二:使用空格

SELECT 900  "出勤天数",VERSION()   "版本号",last_name FROM employees;

案例:查询last_name,别名为 :姓 名

SELECT last_name AS "姓 名" FROM employees;

注意:

  • 别名可以添加双引号,也可以不使用。
  • 但如果别名里面包含特殊符号,则要求双引号必须加
  • 特殊符号如:空格、#……

2.1.4 去重

语法:

SELECT DISTINCT column FROM table;

/*显示出表 employees 中的全部 job_id(不能重复)*/
SELECT DISTINCT job_id FROM employees;

2.2 WHERE 条件筛选


select 查询列表③
from 表名 ①
where 筛选条件;

2.2.1 筛选条件的书写形式

1.按条件表达式筛选

sql中的关系运算符:> < >= <= = <>(!=)

2.按逻辑表达式筛选

sql中的逻辑运算符:and、or、not

3.按布尔类型的常量值筛选

  • 0 代表的是false
  • 非0 代表的是true

注意:布尔值是用 0 和 非0 表示;

4.模糊查询

  • like
  • between and
  • in
  • is null

2.2.2 模糊查询

1.like/not like 关键字

一般搭配通配符使用,用于判断字符型的数据

  • _ 任意单个字符
  • % 任意多个字符
  • escape关键字:
  • \ 转义字符

案例4:查询姓名中第二个字符为_的员工姓名和邮箱

/*方式1*/
SELECT last_name,email
FROM employees
WHERE last_name LIKE '_\_%';

/*方式2:推荐使用*/
SELECT last_name,email
FROM employees
WHERE last_name LIKE '_a_%' ESCAPE 'a';

2.between and /not between and 关键字

说明:用于判断某字段的值是否在指定的区间

注意:

  • 1、闭区间
  • 2、两个值不能调换顺序,否则影响效果

3.in/not in关键字

说明:判断某字段或表达式的值是否在指定列表内

4.is null /is not null

注意:

  • IS 只能判断NULL值,不能判断普通数值
  • = 只能判断普通数值,不能判断NULL值
  • <=> 既能判断NULL值,又能判断普通数值,但阅读性差
  • NULL 值的运算都为unknow:三值逻辑和NULL

2.3 GROUP BY 与 HAVING

在这里插入图片描述

1.分组查询筛选的分类

分类基于的表使用的关键字位置
分组前筛选原始表wheregroup by前面
分组后筛选分组后的虚拟表havinggroup by后面

问题:HAVING 与 where 的区别?基于的表;位置与执行顺序;功能;

1)两者都可以实现对表数据进行筛选

2)having条件筛选是:在group by之后,即分组后进行条件筛选,针对的是分组后的虚拟表,一般结合聚合函数一起使用,位置与执行都在group by 之后

3)where条件筛选是:在from之后,group by分组之前进行条件筛选,针对的是from中的原始表,其位置与执行都在group by之前;

2.和分组函数一同查询的字段只能是group by后面的字段

3.having子句能够使用的三种要素:

  • 常数
  • 聚合函数
  • group by子句中指定的列名(聚合键)

4.having子句可以单独使用:

  • 此时:认为是对空字段进行group by。

2.3 ORDER BY 排序

select 查询列表           ③
from 表名                 ①
【where 筛选条件】        ②
order by 排序列表 【asc|desc;

特点:

  • 1、升序 通过asc,降序 通过 desc:默认行为:升序
  • 2、排序列表可以是:单个字段、多个字段、表达式、函数、别名
  • 3、ORDER BY 执行顺序在 SELECT 语句之后:所以可以使用别名

1.按单个字段排序

案例:查询姓名中包含e的员工姓名、工资,且按工资降序

SELECT last_name,salary
FROM employees
WHERE last_name LIKE '%e%'
ORDER BY salary DESC;

2.按多个字段排序

案例:查询员工信息,先按部门编号降序,如果部门一样,按员工编号升序

SELECT *
FROM employees
ORDER BY department_id DESC,employee_id ASC;

3.按表达式排序

案例:将有年终奖员工信息进行年薪的降序

SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

4.按别名排序

案例:将有年终奖员工信息进行年薪的降序

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY 年薪 DESC;

5.按函数的结果排序

案例:按姓名的字符个数进行升序

SELECT last_name,CHAR_LENGTH(last_name)
FROM employees
ORDER BY CHAR_LENGTH(last_name) ASC;
  • CHAR_LENGTH(str) :获取指定参数的字符个数
  • LENGTH(str):获取指定参数的字节个数

2.5 LIMIT 分页查询

1.语法:

select 查询列表
from[where 条件]
limit [起始条目索引,] 查询的条目数;

2.特点:

  • 1.limit子句的索引序号,从0开始,且默认为0
  • 2.假如待显示的条目,从第一条开始,则可以省略起始条目索引
limit 0,10;
/*等价于:*/
limit 10;

3.分页查询:

问:待显示的页数page,每页显示的条目数sizePerPage,如何实现分页查询?

SELECT * FROM tableName
LIMIT (page-1)*sizePerPage,sizePerPage;

/*
每页显示10条
1	limit 0,10
2	limit 10,10
3   limit 20,10 	
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值