m0_71079238 2022-05-17 23:09 采纳率: 100%
浏览 83
已结题

mysql or和in的执行结果不一样

问题遇到的现象和发生背景

刚学mysql 做题发现or和in执行后的结果不一样,一个是141条记录一个是39条记录,141条的执行结果有很多一个id对应多份工作名的,各位可以帮我看下这个问题的原因吗?

问题相关代码,请勿粘贴截图

9. 查询部门名为 Sales 或 IT 的员工信息

SELECT employee_id,last_name,department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id
AND d.department_name = 'Sales'
OR d.department_name = 'IT';
#141条记录
SELECT employee_id,last_name,department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id
AND d.department_name IN ('Sales','IT');
#39条记录

运行结果及报错内容

运行结果1:
100 King IT
101 Kochhar IT
102 De Haan IT
103 Hunold IT
104 Ernst IT
105 Austin IT
106 Pataballa IT
107 Lorentz IT
108 Greenberg IT
109 Faviet IT
110 Chen IT
111 Sciarra IT
112 Urman IT
113 Popp IT
114 Raphaely IT
115 Khoo IT
116 Baida IT
117 Tobias IT
118 Himuro IT
119 Colmenares IT
120 Weiss IT
121 Fripp IT
122 Kaufling IT
123 Vollman IT
124 Mourgos IT
125 Nayer IT
126 Mikkilineni IT
127 Landry IT
128 Markle IT
129 Bissot IT
130 Atkinson IT
131 Marlow IT
132 Olson IT
133 Mallin IT
134 Rogers IT
135 Gee IT
136 Philtanker IT
137 Ladwig IT
138 Stiles IT
139 Seo IT
140 Patel IT
141 Rajs IT
142 Davies IT
143 Matos IT
144 Vargas IT
145 Russell IT
145 Russell Sales
146 Partners IT
146 Partners Sales
147 Errazuriz IT
147 Errazuriz Sales
148 Cambrault IT
148 Cambrault Sales
149 Zlotkey IT
149 Zlotkey Sales
150 Tucker IT
150 Tucker Sales
151 Bernstein IT
151 Bernstein Sales
152 Hall IT
152 Hall Sales
153 Olsen IT
153 Olsen Sales
154 Cambrault IT
154 Cambrault Sales
155 Tuvault IT
155 Tuvault Sales
156 King IT
156 King Sales
157 Sully IT
157 Sully Sales
158 McEwen IT
158 McEwen Sales
159 Smith IT
159 Smith Sales
160 Doran IT
160 Doran Sales
161 Sewall IT
161 Sewall Sales
162 Vishney IT
162 Vishney Sales
163 Greene IT
163 Greene Sales
164 Marvins IT
164 Marvins Sales
165 Lee IT
165 Lee Sales
166 Ande IT
166 Ande Sales
167 Banda IT
167 Banda Sales
168 Ozer IT
168 Ozer Sales
169 Bloom IT
169 Bloom Sales
170 Fox IT
170 Fox Sales
171 Smith IT
171 Smith Sales
172 Bates IT
172 Bates Sales
173 Kumar IT
173 Kumar Sales
174 Abel IT
174 Abel Sales
175 Hutton IT
175 Hutton Sales
176 Taylor IT
176 Taylor Sales
177 Livingston IT
177 Livingston Sales
178 Grant IT
179 Johnson IT
179 Johnson Sales
180 Taylor IT
181 Fleaur IT
182 Sullivan IT
183 Geoni IT
184 Sarchand IT
185 Bull IT
186 Dellinger IT
187 Cabrio IT
188 Chung IT
189 Dilly IT
190 Gates IT
191 Perkins IT
192 Bell IT
193 Everett IT
194 McCain IT
195 Jones IT
196 Walsh IT
197 Feeney IT
198 OConnell IT
199 Grant IT
200 Whalen IT
201 Hartstein IT
202 Fay IT
203 Mavris IT
204 Baer IT
205 Higgins IT
206 Gietz IT

运行结果2:
103 Hunold IT
104 Ernst IT
105 Austin IT
106 Pataballa IT
107 Lorentz IT
145 Russell Sales
146 Partners Sales
147 Errazuriz Sales
148 Cambrault Sales
149 Zlotkey Sales
150 Tucker Sales
151 Bernstein Sales
152 Hall Sales
153 Olsen Sales
154 Cambrault Sales
155 Tuvault Sales
156 King Sales
157 Sully Sales
158 McEwen Sales
159 Smith Sales
160 Doran Sales
161 Sewall Sales
162 Vishney Sales
163 Greene Sales
164 Marvins Sales
165 Lee Sales
166 Ande Sales
167 Banda Sales
168 Ozer Sales
169 Bloom Sales
170 Fox Sales
171 Smith Sales
172 Bates Sales
173 Kumar Sales
174 Abel Sales
175 Hutton Sales
176 Taylor Sales
177 Livingston Sales
179 Johnson Sales

我的解答思路和尝试过的方法

看到百度好像and和or的执行优先级不一样,是因为这个原因吗?如果我就想在这个代码中同时使用or和and能不能实现呢?

  • 写回答

2条回答 默认 最新

  • xtasce2012 2022-05-18 08:49
    关注

    1.执行顺序为:not>and>or
    2.题主写的sql第一段意思变成了:where id相等和部门名字叫sales,或者部门名字叫IT的即可;
    第二段sql是id相等且部门名在sales、IT中。
    题主理解下这两个意思是不是完全不一样
    更改思路:第一段sql中把and后的or条件括号起来即可,括号具有优先级作用,先执行or条件,再执行and条件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 5月17日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像