sql语句菜鸟教程
```html 写SQL最怕的句菜就是一上来就背语法。我见过太多人抱着“21天精通SQL”的鸟教书啃,结果连一个带WHERE条件的句菜查询都写不利索。其实你只要记住三件事:从哪张表拿数据、鸟教拿哪些列、句菜有什么条件。鸟教剩下的句菜都是在这个骨架上添肉。 先看最基础的鸟教。假设你有一张叫 星号 接下来加条件。比如只想看北京的用户: 字符串要用单引号包起来,数字不用。这个坑新手经常踩。还有 排序和限制条数也常用。按年龄从大到小排,只看前10条: 数据多了就得聚合。 想按城市分组看每个城市的平均年龄,就得用 注意了, 为什么 多表查询是绕不过去的坎。假设还有一张 插入、更新、删除也顺手说一下。插入一行: 更新: 删掉: 跑 最后提一嘴索引。 SQL这东西,看十遍不如自己建张表敲一遍。找个在线的SQL练习网站,把上面这些语句挨个跑通,比看什么教程都管用。users的句菜表,里面有id、鸟教name、句菜age、鸟教city四个字段。句菜想看看所有人的鸟教名字和年龄,就这么写:SELECT name,句菜 age FROM users;*是偷懒写法,代表所有列。但我不建议你老用它——尤其是表里字段多的时候,拉一堆用不上的数据回来,看着就烦。明确写出列名,代码可读性会好很多。SELECT name, age FROM users WHERE city = '北京';WHERE age > 18、WHERE age BETWEEN 18 AND 30、WHERE city IN ('北京', '上海'),都是很顺手的写法。LIKE用来模糊匹配,WHERE name LIKE '张%'能找出所有姓张的。百分号代表任意多个字符。SELECT name, age FROM users WHERE city = '北京' ORDER BY age DESC LIMIT 10;DESC是降序,ASC是升序(默认就是升序,不写也行)。LIMIT在MySQL和PostgreSQL里都这么用,SQL Server得换成TOP,这个差异知道就好。COUNT、SUM、AVG、MAX、MIN这五个函数能解决大部分统计需求。比如算一下北京用户的平均年龄:SELECT AVG(age) FROM users WHERE city = '北京';GROUP BY:SELECT city, AVG(age) FROM users GROUP BY city;SELECT后面除了聚合函数,其他列都必须出现在GROUP BY里。这条规则很多人栽过跟头。分组之后还想过滤,不能用WHERE,得用HAVING。比如只看平均年龄大于25的城市:SELECT city, AVG(age) FROM users GROUP BY city HAVING AVG(age) > 25;WHERE不行?因为WHERE在分组前过滤行,HAVING在分组后过滤组。执行顺序是FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT。记住这个顺序,写复杂查询时脑子不乱。orders表,字段是id、user_id、amount。想查每个用户的名字和订单金额:SELECT users.name, orders.amount FROM users JOIN orders ON users.id = orders.user_id;JOIN默认是INNER JOIN,只返回两边都匹配上的行。如果想让没有订单的用户也显示出来,就用LEFT JOIN,右边没匹配的字段会填NULL。这个区别在报表里特别重要——漏掉没下单的用户,老板能跟你急。INSERT INTO users (name, age, city) VALUES ('李四', 28, '广州');UPDATE users SET age = 29 WHERE name = '李四';DELETE FROM users WHERE name = '李四';UPDATE和DELETE之前,先用同样的WHERE条件写个SELECT看看会影响到哪些行。这个习惯能救你的命。我就干过忘了写WHERE,把整张表的age全改成18的蠢事。WHERE和JOIN里用到的列,加上索引查询会快很多。但别瞎加——索引占空间,写操作也会变慢。一般给主键、外键、经常用来过滤的字段加就行。用EXPLAIN命令看看查询计划,能帮你判断索引有没有生效。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-