第一天MySQL总结:sql的查询

本文详细介绍了MySQL中的基础查询操作,包括基本SELECT语句、条件过滤、薪水区间查询、模糊搜索、排序方法(升序/降序)、多表联接(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)以及SQL92和SQL99语法示例。

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

下面是表名和表数据

7cac84323408427f9759cf451a2c8c8c.png

1.MySQL的最原始查询

SELECT salary, salary+1000 new_salary 
FROM employees;

1cc0e005268a442aa3a1aec8eb22323b.png

由图可看出来:字段名 新的别名。

2.过滤

2.1查询薪水在6000-10000之间

SELECT first_name,salary
FROM employees
#where salary>=6000 && salary<=10000;
#另一种写法
#where salary>=6000 and salary<=10000;
#还有一种
WHERE salary BETWEEN 6000 AND  10000;

872efe448d074676bee322a3ac7892ce.png

2.2查询30和50号部门中所有的员工

SELECT first_name,department_id
FROM employees
#where department_id=30 || department_id=50;
#where department_id=30 or department_id=50;建议这个
WHERE department_id IN(30,60);#和上面的都一样

3eac2f1ce4fc408888445479cec82724.png

2.3员工的奖金率为null的员工是谁

SELECT first_name,commission_pct
FROM employees
WHERE commission_pct IS NULL;#不能写成=null

反过来,查询不为null的员工

WHERE commission_pct IS NOT NULL;

2.4查询员工工资不在6000-10000之间的

SELECT salary,first_name
FROM employees
WHERE salary NOT BETWEEN 6000 AND 10000;

1f474b5c528a48e79f8e81e144e33c29.png

3.模糊查询

3.1查询员工的姓名中包含f的有哪些

SELECT first_name
FROM employees
WHERE first_name LIKE '%f%';#%表示任意个数的任意字符

3.2查询员工中姓名中第二个字符为d的员工有哪些

SELECT first_name
FROM employees
WHERE first_name LIKE '_d%';#%_表示任意一个字符 \_表示_

3.3escape:指定转义字符

SELECT first_name
FROM employees
WHERE first_name LIKE '_$_%' ESCAPE '$';#指定$为转义字符

再换一个

SELECT first_name
FROM employees
WHERE first_name LIKE '_p_%' ESCAPE 'p';

3.4查询员工姓名中既包含a又包含e的有那些

SELECT first_name
FROM employees
WHERE first_name LIKE '%a%e%'OR first_name LIKE '%e%a%';
#或者:where first_name like'%a%' and first_name like'%e%';

4.排序 1.asc-升序 2.desc-降序

4.1查询员工姓名和薪水并按照薪水排序 默认升序

SELECT first_name,salary
FROM employees
ORDER BY salary DESC;
#ORDER BY salary asc;

4.2查询80号部门的所有员工的姓名和薪水并按照薪水升序

SELECT first_name,salary
FROM employees
WHERE department_id=80
ORDER BY salary ASC;

4.3查询给员工薪水+1000后的工资降序

SELECT first_name,salary,salary+1000 new_salary
FROM employees
ORDER BY  new_salary DESC;

4.4查询所有员工的名字,薪水,部门号。并对部门号将进行降序,若部门号一样,按薪水升序

SELECT first_name,salary,department_id
FROM employees
ORDER BY department_id DESC ,salary ASC;

5.多表查询

以下是sql92语法

5.1查询员工的姓名和部门名称

SELECT first_name,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;

5.2查询员工的姓名,部门号,部门名称

在多表查询中若查询的字段是唯一的,那么可以在字段名前不用加表名。若不是唯一,
还是加上比较好。
在两个表中,如果字段是唯一的,它会需要查找所有的表来确定查找的字段;
若加上表明的话,它只会查找一个表,更有效率。

SELECT employees.`first_name`,departments.`department_name`,departments.`department_id`
FROM employees,departments
WHERE employees.`department_id`=departments.`department_id`;

如果表名太复杂,可以起名;数据库是先执行 from 再执行其他的;

SELECT d.`first_name` a,e.`department_name` b,e.`department_id` c
FROM employees d,departments e
WHERE d.`department_id`=e.`department_id`;

若没有where,则会产生的卡尔基的问题,也就是3*3,4*4那种意思;

SELECT d.`first_name` a,e.`department_name` b,e.`department_id` c
FROM employees d,departments e

以下是sql99语法:
select 字段名1,字段名2,....
from 表名1 join 表名2
on 连接条件
join 表名3
on 连接条件
.......
where 过滤条件
order by 字段名1 asc/desc, 字段名2 asc/desc,......

以下等值连接:连接条件使用的是等号 = ;     

以下非自连接:连接的两张表不是同一张。

5.3查询员工的姓名,部门号,部门名称

SELECT d.`first_name` a,e.`department_name` b,e.`department_id` c
FROM employees d JOIN departments e
ON d.`department_id`=e.`department_id`;

以下自连接:同一张表;

5.4查询员工姓名以及该员工的管理者的姓名

SELECT e1.`first_name` 员工姓名,e2.`manager_id`
FROM employees e1 JOIN departments e2 #e1:当员工表,e2:当管理者表,其实为一张表;
ON e1.`manager_id`=e2.`department_id`

以下非等值连接

5.5查询员工的薪水及等级

SELECT e1.`first_name` , j.`GRADE`
FROM employees e1 JOIN job_grades j
#on e1.`salary` >= j.`LOWEST_SAL`and e1.`salary`<=j.`HIGHEST_SAL`;
#还可用这种beteen
ON e1.`salary` BETWEEN j.`LOWEST_SAL`AND j.`HIGHEST_SAL`;

6.以下是关于内、左外、右外、满外连接的示意图

4d65bf4839f84c349a5102b1f16b19bc.png

0fa79d6cd08c45cc9ea50681eea84151.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珂遇不可求~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值