几种常见的MySQL查询命令以及例子

本文详细介绍了SQL中in/not in, between and, is null/is not null等操作符的应用实例,通过具体案例帮助读者掌握如何使用这些操作符进行高效的数据筛选。
#2、in
/*
功能:查询某字段的值是否属于指定的列表之内
a in(常量值1,常量值2,常量值3,...)
a not in (常量值1,常量值2,常量值3,...);


*/
#a案例一:查询部门编号是30/50/90的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id IN(30,50,90);

#方式二:
SELECT last_name,department_id
FROM employees
WHERE department_id =30 OR department_id=50 OR department_id=90;
#案例二:查询工种编号不是的员工信息
SELECT *
FROM employees
WHERE job_id NOT IN ('sh_clerk','it_prog');

#3/between and/not between and
/*判断某个字段的值是否介于什么什么之间
*/
#案例一:部门编号是30-90之间的部门编号员工姓名
SELECT department_id,last_name
FROM employees
WHERE department_id BETWEEN 30 AND department_id<=30;

#案例二:查询年薪不是10000-200000之间的员工姓名、工资、年薪
SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0))NOT BETWEEN 100000 AND 200000;

#4、is null/is not null
#案例1:查询奖金率为空的员工信息
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL;



#= 只能判断普通的内容
#isnull 只能判断null值
#<=>安全等于,既能判断普通内容,又能判断null值
SELECT *
FROM employees
WHERE commission_pct <=> 0.3;
练习:
SELECT last_name,salary*12*(1+IFNULL(commission_pct,0)),department_id
FROM employees
WHERE employee_id=176;

SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 30 AND 50;

SELECT last_name,job_id
FROM employees
WHERE manager_id IS NULL;

SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';

SELECT job_id 
FROM employees
WHERE department_id BETWEEN 80 AND 100;
### MySQL 连表查询方法 #### 1. **内连接(INNER JOIN)** 内连接用于获取两个表中满足特定条件的数据。它只返回匹配的结果集,即只有当两张表中的记录通过某个字段关联起来时才会被显示。 ```sql SELECT a.*, b.* FROM tableA a INNER JOIN tableB b ON a.column1 = b.column2; ``` 上述 SQL 查询表示从 `tableA` 和 `tableB` 中选取所有符合条件的记录[^4]。如果存在多个匹配项,则每一对都会作为单独的一行展示出来。 #### 2. **左外连接(LEFT OUTER JOIN 或 LEFT JOIN)** 左外连接会返回左边表格的所有记录以及右边表格中与之相匹配的部分;如果没有找到对应的右表条目,则这些位置将以 NULL 值填充。 ```sql SELECT a.*, b.* FROM tableA a LEFT JOIN tableB b ON a.column1 = b.column2; ``` 此命令确保即使某些 `tableA` 行没有对应到任何 `tableB` 数据,它们仍然会被包含在最终结果集中[^3]。 #### 3. **右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN)** 类似于左外连接,不过这次是以右侧为主导——即便左侧缺乏配对项目也无妨: ```sql SELECT a.*, b.* FROM tableA a RIGHT JOIN tableB b ON a.column1 = b.column2; ``` 这里强调的是保留所有的 `tableB` 记录,并补充可能存在的相关联的 `tableA` 条件下的信息。 #### 4. **全外连接(FULL OUTER JOIN)** 虽然标准 MySQL 并未直接支持 FULL OUTER JOIN ,但是可以借助 UNION ALL 实现相同功能效果: ```sql SELECT a.*, b.* FROM tableA a LEFT JOIN tableB b ON a.column1 = b.column2 UNION ALL SELECT a.*, b.* FROM tableA a RIGHT JOIN tableB b ON a.column1 = b.column2 WHERE a.column1 IS NULL ; ``` 这种方法组合了左右两侧全部独立及共同拥有的资料集合。 #### 5. **交叉连接(CROSS JOIN)** 这种类型的链接会产生笛卡尔积形式的结果列表 —— 即第一个表里的每一行都跟第二个表里所有行相结合形成新纪录组别。 ```sql SELECT * FROM test1 t1, test2 t2; -- OR -- SELECT * FROM test1 CROSS JOIN test2; ``` 上面例子展示了如何利用简单逗号分隔或者显式的关键词创建跨乘关系[^2]。 #### 6. **自定义复杂逻辑 - EXISTS/NOT EXISTS 子句** 对于更复杂的场景比如查找某张表不存在另一张表内的情况可采用如下策略之一: ```sql SELECT a.* FROM tableA AS a WHERE NOT EXISTS ( SELECT 1 FROM tableB AS b WHERE a.column1 = b.column2); ``` 这段脚本实现了排除那些存在于 `tableB` 的 `column2` 字段值之外的所有来自 `tableA` 的记录[^1]。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值