前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL查询

SQL查询

作者头像
xiaozhangStu
发布2023-05-04 19:28:26
1.7K0
发布2023-05-04 19:28:26
举报
文章被收录于专栏:xiaozhangStu

MySQL查询一

DQL语言

SELECT语法
代码语言:javascript
复制
SELECT   [ALL | DISTINCT] 
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
    [ left|out|inner  join  table_name2 ]    #联合查询
    [ WHERE  … ]    #指定结果需满足的条件
    [ GROUP BY …]   #指定结果按照哪几个字段来分组
    [ HAVING …] #过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]   #指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;

查所有

代码语言:javascript
复制
select   *   from student

查指定的结果

代码语言:javascript
复制
SELECT     StudentNo, StudentName, Phone  FROM  student;
​
SELECT  student.StudentNo , StudentName, StudentResult   
FROM   student  , result ;
​
AS子句
作用

可给数据列取一个新别名 可给表取一个新别名 可把经计算或总结的结果用另外一个新名称来代替

代码语言:javascript
复制
SELECT   StudentNo   AS “学号”   FROM   student;
SELECT   a.StudentNo   FROM   student AS  a;
SELECT   Phone+1  AS  Tel    FROM   student;
​

DISTINCT关键字

作用

去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条

代码语言:javascript
复制
SELECT     DISTINCT   字段名1, 字段名2...     FROM   表名
​
在SQL语句中使用表达式
代码语言:javascript
复制
SELECT  version() ,   100*3        #返回MySQL版本和计算结果
SELECT  SubjectName “课程名称”, ClassHour+10  AS “新学时”  FROM subject;
#给返回结果中的课时都加10个课时
​
where条件语句

用于检索数据表中符合条件的记录 搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假 搜索条件的组成 逻辑操作符 比较操作符

逻辑操作符

操作符名称

语法

描述

AND或&&

a AND b 或 a && b

逻辑与,同时为真,结果才为真

OR或||

a OR b 或 a||b

逻辑或,只要一个为真,则结果为真

NOT或!

NOT a 或 !a

逻辑非,若操作数为假,结果则为真

比较操作符

操作符名称

语法

描述

IS NULL

a IS NULL

若操作符为NULL,则结果为真

IS NOT NULL

a IS NOT NULL

若操作符不为NULL,则结果为真

BETWEEN

a BETWEEN b AND c

若a范围在b与c之间则结果为真

LIKE

a LIKE b

SQL模式匹配,若a匹配b,则结果为真

IN

a IN (a1,a2,a3,….)

若a等于a1,a2…中的某一个,则结果为真

BETWEEN AND范围查询
代码语言:javascript
复制
SELECT  字段列1,字段2 ,…FROM 表名 WHERE   字段x  BETWEEN  值1 AND  值2 
LIKE模糊查询

在WHERE子句中,使用LIKE关键字进行模糊查询 与“%”一起使用,表示匹配0或任意多个字符 与“_”一起使用,表示匹配单个字符

代码语言:javascript
复制
#查询包含“数学”的所有课程
SELECT   *  FROM subject WHERE SubjectName  LIKE  "%数学%";
#查询所有姓名为“李**”三个字的学生信息
SELECT  StudentNo,StudentName FROM student  
  WHERE StudentName LIKE "李__";
​
使用IN进行范围查询
代码语言:javascript
复制
SELECT  字段列1,字段2 ,…FROM 表名 WHERE   字段x  IN  ( 值1,值2,值3…) 
代码语言:javascript
复制
SELECT  *  FROM  subject  where    ClassHour = 100  OR ClassHour =110 OR ClassHour  = 120;  #普通处理方式
SELECT  *  FROM  subject  where ClassHour  IN ( 100, 110,120 );
#使用IN进行查询方式,更为简洁,效率更高
​
连接查询

如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询 分类包括 内连接 ( inner join) 等值和非等值的连接查询 自身连接查询 外连接 ( out join ) 左连接(LEFT JOIN) 右连接 ( RIGHT JOIN)

内连接查询

INNER JOIN内连接

在表中至少一个匹配时,则返回记录

代码语言:javascript
复制
SELECT   字段1,字段2,…  FROM  table_1 
INNER  JOIN   table_2    ON  table_1.字段x   =  table_2.字段y;
#  INNER JOIN  与 JOIN 是相同的;
#  如table_1中的行在table_2中没有匹配,则不返回

等值和非等值的连接查询 与单表查询类似,都是SELECT语句 把多个表放到FROM后,并用逗号隔开 可使用AS关键字取别名,便于引用 如无重名查询字段则可省略数据表的指定

代码语言:javascript
复制
#要求:从subject和grade数据表查询课程名称和所属年级名称
#非等值连接查询
SELECT  SubjectName, GradeName  FROM  subject,  grade;  
#等值查询
SELECT  SubjectName, GradeName  FROM  subject,  grade 
WHERE  subject.GradeID = grade.GradeID;  
​
左外连接(LEFT JOIN)

从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行

代码语言:javascript
复制
SELECT   字段1,字段2,… FROM table_1 
LEFT  [ OUTER ]   JOIN   table_2    ON  table_1.字段x   =  table_2.字段y;
​
右外连接(RIGHT JOIN)

从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行

代码语言:javascript
复制
SELECT   字段1,字段2,… FROM table_1 
RIGHT   [ OUTER ]   JOIN   table_2    ON  table_1.字段x   =  table_2.字段y;
三个join对比

操作符名称

描述

INNER JOIN ( JOIN )

如果表中有至少一个匹配,则返回行

LEFT JOIN

不论右表是否有匹配,都会返回左表的所有行

RIGHT JOIN

不论左表是否有匹配,都会返回右表的所有行

自连接查询

自连接查询 自连接就是一个表和它自身进行连接,是多表连接的特殊情况。 在自连接查询中,要先在FROM字句中为表分别定义两个不同的别名, 然后使用这两个别名写出一个连接条件。

代码语言:javascript
复制
SELECT DISTINCT c1.CouNo 课程编号, c1.CouName 课程名称, 
                  c1.Kind 课程类别, c1.DepartNo 系部编号
FROM Course c1 JOIN Course c2 ON c1.Kind=c2.Kind AND c1.DepartNo!=c2.DepartNo
ORDER BY c1.CouNo;

查询二

ORDER BY排序

对SELECT语句查询得到的结果,按某些字段进行排序 与DESC或ASC搭配使用,默认为ASC

LIMIT

公式 limit (curPage-1)*pageSize,pageSize

子查询

代码语言:javascript
复制
SELECT    
s.StudentNo,StudentName  
FROM  student AS s  
WHERE   
studentNo  
IN 
 (  
    SELECT  
    StudentNO 
    FROM  
        result 
    WHERE  
    SubjectNo =  (SELECT SubjectNo FROM subject WHERE SubjectName = "高等数学-2") 
    AND   
    StudentResult  >=  80  
 )

函数

函数名称

描述

COUNT( )

返回满足SELECT条件的记录总和数,如 SELECT COUNT(*)…

SUM( )

返回数字字段或表达式列作统计,返回一列的总和

AVG( )

通常为数值字段或表达列作统计,返回一列的平均值

MAX( )

可以为数值字段、字符字段或表达式列作统计,返回最大的值

MIN( )

可以为数值字段、字符字段或表达式列作统计,返回最小的值

GROUP BY分组

对所有的数据进行分组统计 分组的依据字段可以有多个,并依次分组 与HAVING结合使用,进行分组后的数据筛选

总结:

分析题目 1.分析题目 2.找出这个题目相关的表 3.找出这几个表之间的联系 4.分析顺序分析是不是要内连还是外连 5.看看查出来的结果跟你想象的是不是差不多 6.自己去做10条数据,看看结果是不是达到需求了

分析错误 如果你觉得结果出来了不满足你的预期一般有一下几种原因 0.内外连接使用是否恰当 1.外连顺序 2.多表连接的层级 3.分组把空值自动忽略 4.不要是自己骗自己,不要去函数凑数据

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL查询一
    • DQL语言
      • DISTINCT关键字
      • 查询二
        • ORDER BY排序
          • LIMIT
            • 子查询
              • 函数
              • 总结:
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档