多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

篇02_SELECT_FROM_WHERE_基础查询

篇02_SELECT_FROM_WHERE_基础查询 零基础学SQL 02SELECT / FROM / WHERE —— 写出你的第一条查询系列前文篇01 什么是数据库什么是 SQL一文搞懂系列目录SQL 从入门到精通 · 总目录置顶先说点真话我 2016 年刚入行做数据分析那会儿师傅丢给我第一张几百万行的业务表说把某部门工资大于 8000 的人拉出来。我当时盯着屏幕连从哪张表取、取哪些列、按什么条件都没捋清写出来的 SQL 要么报错要么把全公司的人全查出来了被师傅笑了一周。后来我才明白90% 的 SQL 入门都卡在同一件事上搞不清 SELECT、FROM、WHERE 这三兄弟谁干啥。今天这篇就把它们一次讲透。一、这条查询到底在干啥一条最基础的 SQL长这样SELECT列名FROM表名WHERE条件;把它翻译成人话FROM去哪张表拿数据先定位仓库SELECT从这张表里挑哪些列要苹果还是香蕉WHERE只拿满足条件的行挑红苹果记住顺序先 FROM 找表再 WHERE 过滤最后 SELECT 挑列。虽然书写顺序是 SELECT→FROM→WHERE但数据库真正执行的顺序是 FROM→WHERE→SELECT这点后面调错很有用。二、最小可运行例子我们统一用系列练习表里的员工表来练手本系列所有文章都基于这 4 张表建一次表就能跟着全系列练-- 本系列统一练习表复制即可建表随时练手CREATETABLE员工表(员工idINTPRIMARYKEY,姓名VARCHAR(20),部门VARCHAR(20),工资DECIMAL(10,2),邮箱VARCHAR(50),手机VARCHAR(20),入职日期DATE);CREATETABLE订单表(订单idINTPRIMARYKEY,员工idINT,订单金额DECIMAL(10,2),下单时间DATETIME,付款时间DATETIME,状态VARCHAR(20));CREATETABLE用户表(用户idINTPRIMARYKEY,姓名VARCHAR(20),手机VARCHAR(20),邮箱VARCHAR(50),地址VARCHAR(100));CREATETABLE任务表(任务idINTPRIMARYKEY,员工idINT,备注VARCHAR(100),状态VARCHAR(20));-- 先往员工表插几条示例数据INSERTINTO员工表VALUES(1,张三,技术部,9000,zhangsanx.com,13800000001,2019-03-12),(2,李四,技术部,7500,lisix.com,13800000002,2020-07-01),(3,王五,销售部,8200,wangwux.com,13800000003,2018-11-23),(4,赵六,人事部,6000,zhaoliux.com,13800000004,2021-05-09);例子 1查所有人的姓名和工资SELECT姓名,工资FROM员工表;结果姓名工资张三9000李四7500王五8200赵六6000例子 2只查技术部的人SELECT*FROM员工表WHERE部门技术部;*表示所有列。结果只剩张三、李四两行。三、WHERE 里能写哪些条件WHERE 后面可以接各种判断最常用的写法含义示例等于WHERE 部门 技术部大小比较WHERE 工资 8000或!不等于WHERE 部门 人事部AND/OR并且 / 或者WHERE 部门技术部 AND 工资8000IN (...)在列表里WHERE 部门 IN (技术部,销售部)BETWEEN a AND b区间WHERE 工资 BETWEEN 6000 AND 8000LIKE模糊匹配WHERE 姓名 LIKE 张%姓张的组合一下技术部且工资大于 8000SELECT姓名,工资FROM员工表WHERE部门技术部AND工资8000;结果只有张三。四、当年我踩过的 3 个坑重点看忘写 WHERE把全表都查出来了早期做报表本来只想看某个月的数据结果漏了WHERE 入职日期 2020-01-01把历史几年全拉出来数字直接错得离谱。结论统计/导出前先确认过滤条件。字符串忘了加引号WHERE 部门 技术部会报错正确是WHERE 部门 技术部。SQL 里字符串必须加单引号数字不用。日期格式乱写不同数据库日期写法不一样Oracle 常用TO_DATEMySQL 用2020-01-01。最稳的办法先用SELECT * FROM 员工表 WHERE 入职日期 2020-01-01试报错就查对应数据库的日期函数。五、3 个练习自己跑一遍基于上面的员工表查工资在 7000 到 9000 之间的人提示BETWEEN。查不是人事部的人提示或NOT 部门 人事部。查姓王的人提示LIKE 王%。参考答案先自己写再对照-- 1SELECT姓名,工资FROM员工表WHERE工资BETWEEN7000AND9000;-- 2SELECT姓名,部门FROM员工表WHERE部门人事部;-- 3SELECT姓名FROM员工表WHERE姓名LIKE王%;六、小结FROM找表 →WHERE过滤 →SELECT挑列字符串加单引号数字不加统计/导出前一定先确认 WHERE 条件下一篇我们讲排序与去重ORDER BY / DISTINCT / LIMIT教你把查出来的结果排个序、去个重。互动时间你第一次写 SQL 时最卡壳的是哪一步是装环境、还是写不出 WHERE 条件、还是被报错劝退评论区聊聊我挑典型的下篇解答。
返回列表