MySQL基础关键_002_DQL(一)

目 录

一、初始化

二、简单查询

1.部分语法规则

2.查询一个字段

(1)查询员工编号

(2)查询员工姓名

3.查询多个字段

(1)查询员工编号、姓名

(2)查询部门编号、名称、位置

4.查询全部字段

(1)查询薪资等级全部字段

5.查询时进行数学运算

(1)查询员工姓名、年薪

6.查询时起别名

(1)查询员工姓名、年薪

(2)查询员工全部信息

三、条件查询

1.过滤条件

2.语法格式

3.等于/不等于

(1)查询姓名为"JONES"的员工信息

[(2) 查询位置不在"NEW YORK"的部门信息](#(2) 查询位置不在“NEW YORK”的部门信息)

4.大于等于/小于等于/大于/小于

[(1)查询月薪 2000 以上的员工姓名和薪资](#(1)查询月薪 2000 以上的员工姓名和薪资)

[(2)查询最低薪资低于 1400 的薪资等级信息](#(2)查询最低薪资低于 1400 的薪资等级信息)

5.and/between...and.../or

[(1)查询薪资在 1600~2500 之间的员工信息](#(1)查询薪资在 1600~2500 之间的员工信息)

(2)查询职位是"CLERK"或"SALESMAN"的员工信息

[(3)and 和 or 优先级](#(3)and 和 or 优先级)

[6.is null/is not null](#6.is null/is not null)

(1)查询没有津贴的员工信息

[7.in/not in](#7.in/not in)

(1)查询职位是"ANALYST"、"PRESIDENT"、"MANAGER"的员工信息

[(2)是否忽略 null](#(2)是否忽略 null)

8.模糊查询

[(1)查询姓名以 S 开头的员工信息](#(1)查询姓名以 S 开头的员工信息)

[(2)查询姓名以 T 结尾的员工信息](#(2)查询姓名以 T 结尾的员工信息)

[(3)查询姓名第二个字母是 A 的员工信息](#(3)查询姓名第二个字母是 A 的员工信息)


一、初始化

查询语句属于 SQL 语句中的 DQL(数据查询语言),用于从数据库中检索数据,并将结果返回。由 SELECT(查询内容)、FROM(查询对象)、WHERE(查询条件)、ORDER BY(排序方式)、GROUP BY(分组方式)等组成。

那么,在开始前,先准备一个 sql 脚本来初始化数据库信息,代码如下:

sql 复制代码
DROP TABLE IF EXISTS employees;
DROP TABLE IF EXISTS departments;
DROP TABLE IF EXISTS salary_grades;

-- 部门表
CREATE TABLE departments (
    dept_no INT NOT NULL,
    dept_name VARCHAR(14),
    location VARCHAR(13),
    PRIMARY KEY (dept_no)
);

-- 员工表
CREATE TABLE employees (
    emp_no INT NOT NULL,
    emp_name VARCHAR(10),
    job_title VARCHAR(9),
    manager_id INT,
    hire_date DATE DEFAULT NULL,
    salary DECIMAL(7,2),
    commission DECIMAL(7,2),
    PRIMARY KEY (emp_no),
    dept_no INT,
    FOREIGN KEY (dept_no) REFERENCES departments(dept_no)
);

-- 薪资等级表
CREATE TABLE salary_grades (
    grade INT,
    min_salary INT,
    max_salary INT
);

-- 插入部门数据
INSERT INTO departments (dept_no, dept_name, location) VALUES
(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS'),
(30, 'SALES', 'CHICAGO'),
(40, 'OPERATIONS', 'BOSTON');

-- 插入员工数据
INSERT INTO employees (emp_no, emp_name, job_title, manager_id, hire_date, salary, commission, dept_no) VALUES
(7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800.00, NULL, 20),
(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600.00, 300.00, 30),
(7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250.00, 500.00, 30),
(7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, NULL, 20),
(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250.00, 1400.00, 30),
(7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850.00, NULL, 30),
(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450.00, NULL, 10),
(7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000.00, NULL, 20),
(7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL, 10),
(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500.00, 0.00, 30),
(7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100.00, NULL, 20),
(7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950.00, NULL, 30),
(7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000.00, NULL, 20),
(7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300.00, NULL, 10);

-- 插入薪资等级数据
INSERT INTO salary_grades (grade, min_salary, max_salary) VALUES
(1, 700, 1200),
(2, 1200, 1400),
(3, 1400, 2000),
(4, 2000, 3000),
(5, 3000, 9999);

COMMIT;

二、简单查询

1.部分语法规则

  1. 一条 SQL 语句 必须以【;】结尾;
  2. SQL 语句没有大小写限制;
  3. 可以使用【desc + 表名】来查看表结构;
  4. 使用【\c】终止当前语句。

2.查询一个字段

一个表有多列,查询一个字段就是查询其中的一列。

(1)查询员工编号

sql 复制代码
select emp_no from employees;

(2)查询员工姓名

sql 复制代码
select emp_name from employees;

3.查询多个字段

查询多个字段只需要在字段名之间添加【,】。

(1)查询员工编号、姓名

sql 复制代码
select emp_no, emp_name from employees;

(2)查询部门编号、名称、位置

sql 复制代码
select dept_no, dept_name, location from departments;

4.查询全部字段

可以使用【*】代表所有字段。

但是使用【*】效率低、可读性差。

(1)查询薪资等级全部字段

sql 复制代码
select * from salary_grades;

5.查询时进行数学运算

(1)查询员工姓名、年薪

sql 复制代码
select emp_name, salary * 12 from employees;

6.查询时起别名

(1)查询员工姓名、年薪

sql 复制代码
select emp_name, salary * 12 as year_salary from employees;

(2)查询员工全部信息

别名可以省略 as ,也可以是中文,但是低版本 MySQL 会报错,需要添加单引号或双引号,推荐使用单引号。

别名词组间想要添加空格,也需要使用引号。

sql 复制代码
 select emp_no as ID, emp_name as 姓名, job_title 职位, manager_id '领导ID', hire_date "入职日期", salary as 薪资, commission 津贴, dept_no '部门ID' from employees;

三、条件查询

1.过滤条件

| 条件 | 说明 |
| = | 等于 |
| <> 或 != | 不等于 |
| >= | 大于等于 |
| <= | 小于等于 |
| > | 大于 |
| < | 小于 |
| between...and... | 等同于 >= and <= |
| is null | 为空 |
| is not null | 不为空 |
| <=> | 安全等于(较少使用) |
| and 或 && | 与 |
| or 或 || | 或 |
| in | 在指定值当中 |
| not in | 不在指定值当中 |

like 模糊查询

2.语法格式

  1. select ...... from ...... where [过滤条件]; ;
  2. 执行顺序:
    1. 先执行 from;
    2. 再执行 where;
    3. 最后执行 select。

3.等于/不等于

(1)查询姓名为"JONES"的员工信息

sql 复制代码
select * from employees where emp_name = 'JONES';

(2) 查询位置不在"NEW YORK"的部门信息

sql 复制代码
# 方式1
select * from departments where location != 'NEW YORK';

# 方式2
select * from departments where location <> 'NEW YORK';

4.大于等于/小于等于/大于/小于

(1)查询月薪 2000 以上的员工姓名和薪资

sql 复制代码
select emp_name, salary from employees where salary >= 2000;

(2)查询最低薪资低于 1400 的薪资等级信息

sql 复制代码
select * from salary_grades where min_salary <= 1400;

5.and/between...and.../or

(1)查询薪资在 1600~2500 之间的员工信息

sql 复制代码
# 方式1
select * from employees where salary >= 1600 and salary <= 2500;

# 方式2
select * from employees where salary between 1600 and 2500;

(2)查询职位是"CLERK"或"SALESMAN"的员工信息

sql 复制代码
select * from employees where job_title = 'CLERK' or job_title = 'SALESMAN';

(3)and 和 or 优先级

and 和 or 同时出现时,and 优先级更高。若希望先执行 or,需要给 or 条件添加小括号。

此外,无论是 Java 还是 SQL 中,遇到优先级不确定的情况,都可以添加小括号解决。
下面给出一个实例:

查询薪资低于 1500,且部门编号是 20 或 30 的员工信息。

sql 复制代码
select * from employees where salary <= 1500 and (dept_no = 20 or dept_no =30);

6.is null/is not null

判断某个数据是否为 null,不可以使用【=】,只能使用【is null】。因为在数据库中, null 不是一个值,只是代表没有值/数据。

(1)查询没有津贴的员工信息

sql 复制代码
select * from employees where commission is null;

7.in/not in

in 和 not in 后边有一个小括号,括号内有多个值,值与值之间用【,】分割,其并不代表区间。

(1)查询职位是"ANALYST"、"PRESIDENT"、"MANAGER"的员工信息

sql 复制代码
select * from employees where job_title in('ANALYST', 'PRESIDENT', 'MANAGER');

(2)是否忽略 null

  1. in 自动忽略 null;
  2. not in 不会自动忽略 null。

上述两条语句与下方两条语句等价 ,所以可知其是否会忽略 null。


8.模糊查询

  1. 语法格式:【select... from... where 字段 like '通配符表达式';】;
  2. 通配符:
    1. %:任意多个字符;
    2. _:任意一个字符。
  3. 如遇到模糊查询的内容中也出现上述通配符的情况,需要使用【\】转义。

(1)查询姓名以 S 开头的员工信息

sql 复制代码
select * from employees where emp_name like 'S%';

(2)查询姓名以 T 结尾的员工信息

sql 复制代码
select * from employees where emp_name like '%T';

(3)查询姓名第二个字母是 A 的员工信息

sql 复制代码
select * from employees where emp_name like '_A%';
相关推荐
硅的褶皱2 小时前
MySQL的表空间释放
mysql
杨凯凡2 小时前
MySQL安全加固:权限管控与加密实践
数据库·mysql·安全
DarkAthena2 小时前
【GaussDB】使用DBLINK连接到ORACLE
数据库·oracle·gaussdb
武子康2 小时前
大语言模型 18 - MCP Model Context Protocol 基本项目 测试案例
数据库·redis·语言模型
lxyker2 小时前
MongoDB大数据量的优化——mongoTemplate.stream()方法使用
java·数据库·mongodb·性能优化·数据库调优
青蛙大侠公主2 小时前
MongoDB及spring集成
数据库·mongodb
数据库幼崽2 小时前
MySQL 8.0 OCP 1Z0-908 181-190题
数据库·mysql·ocp
Leo.yuan2 小时前
ETL 代表什么?ETL 开发主要做什么?
大数据·数据库·数据仓库·数据分析·etl
水宝的滚动歌词3 小时前
MySQL中InnoDB引擎逻辑存储结构、B+树索引结构、B+树高度及存储数据量
数据库·mysql
zhifeng6873 小时前
MySQL的可重复读事务隔离级别的实现原理
数据库·mysql