SQL查询

2023-05-04 19:28:26 浏览数 (1)

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.不要是自己骗自己,不要去函数凑数据

0 人点赞