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%';
相关推荐
一 乐3 小时前
民宿|基于java的民宿推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·源码
鹏码纵横3 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
美林数据Tempodata4 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
野槐4 小时前
node.js连接mysql写接口(一)
数据库·mysql
Zzzone6835 小时前
PostgreSQL日常维护
数据库·postgresql
chxii5 小时前
1.13使用 Node.js 操作 SQLite
数据库·sqlite·node.js
冰刀画的圈5 小时前
修改Oracle编码
数据库·oracle
这个胖子不太裤5 小时前
Django(自用)
数据库·django·sqlite
麻辣清汤5 小时前
MySQL 索引类型及其必要性与优点
数据库·mysql
2501_915374356 小时前
Neo4j 图数据库安装教程(2024最新版)—— Windows / Linux / macOS 全平台指南
数据库·windows·neo4j