当前位置:首页 > 问答 > 正文

说说那些常用的SQL数据库查询代码,简单介绍一下怎么写和用法

说到常用的SQL查询代码,其实就是我们跟数据库“对话”的几种基本句式,想象一下,数据库就是一个巨大的、井井有条的仓库,里面有很多表格(就像Excel表格一样),每个表格里存放着不同类型的数据,SQL查询就是你向仓库管理员发出的指令,告诉他你想查看或操作哪些东西。

最基本的查询:SELECT(看看有什么)

这是你用得最多的命令,相当于“给我看看……”。

  • 怎么写SELECT 列名1, 列名2 FROM 表名;
  • 用法:你想看哪几列的数据,就把列名写在SELECT后面,用逗号隔开,从哪个表里看,就把表名写在FROM后面。
  • 例子
    • SELECT name, age FROM students; 意思是:从“学生”这个表格里,把每个人的“姓名”和“年龄”这两列数据找出来给我看。
    • 如果你想看这个表里的所有列,可以用一个星号来代替所有列名:SELECT * FROM students; 这就相当于说“把学生表里所有人的所有信息都给我看”。

带条件的查询:WHERE(只看我关心的)

仓库里的东西太多了,你通常只想看满足特定条件的部分。WHERE就是用来加条件的。

  • 怎么写SELECT 列名 FROM 表名 WHERE 条件;
  • 用法:在WHERE后面写上你的条件,条件可以是比较大小(比如大于>、小于<、等于、不等于),也可以是模糊匹配。
  • 例子
    • SELECT name FROM students WHERE age > 20; 意思是:只找出那些年龄大于20岁的学生的名字。
    • SELECT * FROM products WHERE price < 50; 意思是:找出“产品”表里所有价格低于50块的产品信息。
    • 模糊匹配用LIKESELECT name FROM students WHERE name LIKE '张%'; 这里的百分号代表任意字符,所以这句是找出所有姓“张”的学生。

给结果排个序:ORDER BY(按顺序摆好)

查出来的数据可能很乱,你可以要求数据库按某一列的大小顺序给你排列好。

说说那些常用的SQL数据库查询代码,简单介绍一下怎么写和用法

  • 怎么写SELECT 列名 FROM 表名 ORDER BY 排序列名 ASC|DESC;
  • 用法ORDER BY后面跟上你想根据哪一列来排序。ASC是从小到大(升序),DESC是从大到小(降序),如果不写,默认是ASC
  • 例子
    • SELECT name, score FROM students ORDER BY score DESC; 意思是:把学生的姓名和成绩查出来,并且按照成绩从高到低(降序)排列,这样第一名就排在最前面。
    • SELECT * FROM products ORDER BY price ASC, sales DESC; 意思是:先按价格从低到高排,如果价格一样,再按销量从高到低排。

统计一下数据:COUNT, SUM, AVG(数一数、算总和、求平均)

有时候你关心的不是具体每一条数据,而是整体的统计情况。

  • 怎么写SELECT 统计函数(列名) FROM 表名;
  • 用法:这几个是常用的统计函数。
    • COUNT(*):数一数总共有多少条记录。
    • SUM(列名):计算某一列所有数值的总和。
    • AVG(列名):计算某一列所有数值的平均值。
  • 例子
    • SELECT COUNT(*) FROM students; 意思是:数一数学生表里总共有多少个学生。
    • SELECT AVG(score) FROM students WHERE class='一班'; 意思是:计算“一班”学生的平均成绩是多少。

把数据分分组:GROUP BY(分类统计)

这个听起来有点复杂,但其实很简单,比如你想看每个班级的平均分,而不是全年级一个总的平均分,这就需要先把学生按班级分组,再对每个组计算平均分。

说说那些常用的SQL数据库查询代码,简单介绍一下怎么写和用法

  • 怎么写SELECT 分组的列名, 统计函数(列名) FROM 表名 GROUP BY 分组的列名;
  • 用法GROUP BY后面跟着你按什么来分组,通常会和COUNTSUM这些统计函数一起用。
  • 例子
    • SELECT class, AVG(score) FROM students GROUP BY class; 意思是:先把所有学生按照“班级”分组,然后分别计算每个班级的平均成绩,结果会显示“一班平均分XX,二班平均分YY……”。
    • SELECT department, COUNT(*) FROM employees GROUP BY department; 意思是:统计“员工”表里,每个部门分别有多少人。

多表关联查询:JOIN(把几个表的信息拼起来)

很多时候,我们需要的信息分散在不同的表里,比如一个表存学生基本信息(学号、姓名),另一个表存成绩(学号、科目、分数),你想看每个学生每科的具体分数,就需要把两个表根据“学号”这个共同点关联起来。

  • 怎么写(最常用的内连接)SELECT A.列名, B.列名 FROM 表A JOIN 表B ON A.共同列 = B.共同列;
  • 用法JOIN用来连接另一个表,ON后面指定两个表通过哪一列来建立关系,这种查询只显示两个表中能匹配上的记录。
  • 例子
    • SELECT students.name, scores.subject, scores.score FROM students JOIN scores ON students.id = scores.student_id; 意思是:从“学生”表和“成绩”表中,把学号能对应上的记录连接起来,然后选出学生的姓名、科目和分数,这样你就能在一个结果里看到“张三的数学得了95分,李四的英语得了88分”这样的信息了。

往表里加新数据:INSERT(添点新东西)

  • 怎么写INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);
  • 例子INSERT INTO students (name, age) VALUES ('王五', 22); 意思是:往学生表里添加一条新记录,姓名是“王五”,年龄是22岁。

修改已有的数据:UPDATE(改改内容)

  • 怎么写UPDATE 表名 SET 列名=新值 WHERE 条件;注意:这里WHERE非常重要,没有它会把整个表都改了!
  • 例子UPDATE students SET age=23 WHERE name='王五'; 意思是:把姓名为“王五”的那个学生的年龄改成23岁。

删除数据:DELETE(清理掉不要的)

  • 怎么写DELETE FROM 表名 WHERE 条件;同样,WHERE条件极其重要,否则会清空整个表!
  • 例子DELETE FROM students WHERE name='王五'; 意思是:删除学生表里所有叫“王五”的记录。

就是最核心、最常用的SQL查询代码了,你完全可以把它当成一套固定的句式来理解和记忆,多练习几次就能熟练掌握了,和数据库“对话”的关键就是想清楚:你想看什么(SELECT)、从哪看(FROM)、看哪些符合条件的(WHERE)、怎么看(ORDER BY/JOIN等)