MySQL高阶语句

MySQL高阶语句

  • 前言
  • 按关键字排序
    • 升序
    • 降序
    • 结合where降序
    • 多字段降序
  • 区间判断及查询不重复记录
    • And且
    • OR或
    • 嵌套多条件
    • 查询不重复的记录
    • 对结果进行分组
    • 结合where语句
  • 限制结果条目
    • 查看前三行
    • 查看第3行后面的3行
    • 输出最后3行
  • 设置别名
    • 设置列别名
    • 查询表字段数
    • 加入where 语句判断
  • 通配符
    • %
  • 子查询
    • 查询和id在test2范围中的info的信息且按id升序排列
    • 查询分数大于80的记录
    • 将id为2的成绩改为50
    • 将其他成绩改为100
  • 视图
    • 视图与表的区别
    • 创建视图
    • 修改视图数据
    • 修改表数据
    • 多表创建视图
  • NULL
    • 统计数量
    • 对NULL查询
    • 查询空值

前言

对数据库的查询,除了基本的增删改查外,有时候需要对查询的结果集进行处理。例如只取20条数据,对查询结果进行排序或者分组等等。

按关键字排序

用select语句将数据查出来,如果要对查询结果进行排序,可以用order by语句,这个语句可以针对某个字段或者多个字段。
ASC是按照升序进行排序,是默认的排序方式,即ASC可以省略。
DESC是按降序方式进行排序,也可以在order by前面使用where子句对查询结果进一步过滤。

升序

//
mysql> select id,name,score from ky17 order by score;  ##查看表ky17里的id name score,按score升序排序

MySQL高阶语句_第1张图片

降序

// 
mysql> mysql> select id,name,score from ky17 order by score desc; ##以score大小,desc降序排列

MySQL高阶语句_第2张图片

结合where降序

order by还可以结合where进行条件过滤,筛选地址是杭州的学生按分数降序排

// 
mysql> select name,score,address from ky17 where address='nanjing' order by score desc;
##分三步理解就不难了
##select name,score,address from ky17
##where address='nanjing'
##order by score desc

MySQL高阶语句_第3张图片

多字段降序

ORDER BY 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,再按照第二个字段进行排序,ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定
但order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义哦

//
mysql> select id,name,hobbid from ky17 order by hobbid desc,id desc;
##先按照hobbid大小降序,如果hobbid大小相同,则按id大小降序排列

MySQL高阶语句_第4张图片

区间判断及查询不重复记录

And且

// 
mysql> select * from ky17 where score >60 and score <=90;
##找出ky17表里分数大于60且小于等于90

MySQL高阶语句_第5张图片

OR或

// 
mysql> select * from ky17 where score >90 or score <=60;
##找出ky17表里分数大于90的或者小于等于60

MySQL高阶语句_第6张图片

嵌套多条件

// 
mysql> select * from ky17 where score >70 or (score >40 and score <60) order by score desc;
##找出ky17表里分数大于70或者在4060之间的,并以score字段降序排序

MySQL高阶语句_第7张图片

查询不重复的记录

// 
mysql> select distinct hobbid from ky17;

MySQL高阶语句_第8张图片

对结果进行分组

通过 SQL 查询出来的结果,还可以对其进行分组,使用 GROUP BY 语句来实现 ,GROUP BY 通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分组的时候可以按一个或多个字段对结果进行分组处理。

//
mysql> select count(name),hobbid from ky17 group by hobbid;
按hobbid相同的分组,计算相同分数的学生个数(基于name个数进行计数)

MySQL高阶语句_第9张图片

结合where语句

筛选分数大于等于80的分组,计算学生个数

//
mysql> select count(name), hobbid from ky17 where score>=80 group by hobbid;

MySQL高阶语句_第10张图片

限制结果条目

limit 限制输出的结果记录
在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅 需要返回第一行或者前几行,这时候就需要用到 LIMIT 语句

查看前三行

//
mysql> select * from ky17 limit 3;

MySQL高阶语句_第11张图片

查看第3行后面的3行

结合order by 语句

// 
mysql> select * from ky17 order by id limit 3,3;

MySQL高阶语句_第12张图片

输出最后3行

//
mysql> select id,name from ky17 order by id desc limit 3;
##把整个表先按id降序,再输出前三行,就是倒数后三行的记录

MySQL高阶语句_第13张图片

设置别名

  1. 在 MySQL 查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者 多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性。
  2. 在使用 AS 后,可以用 alias_name 代替table_name,其中 AS 语句是可选的。AS之后的别名,主要是为表内的列或者表提供临时的名称,在查询过程中使用,库内实际的表名 或字段名是不会被改变的

设置列别名

// 
mysql> select name as 姓名,score as 成绩 from ky12;

MySQL高阶语句_第14张图片

查询表字段数

以number显示

//
mysql> select count(*)as number from ky12;

MySQL高阶语句_第15张图片
列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用
使用场景:
1、对复杂的表进行查询的时候,别名可以缩短查询语句的长度
2、多表相连查询的时候(通俗易懂、减短sql语句)

AS 还可以作为连接语句的操作符。
创建ky17p表,将info表的查询记录全部插入ky17p表

// 
mysql> create table ky17p as select * from ky17;

MySQL高阶语句_第16张图片
注意:”约束“没有被完全”复制“过来 #但是如果原表设置了主键,那么附表的:default字段会默认设置一个0。

加入where 语句判断

//create table test1 as select * from info where score >=60;

通配符

通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。

通常通配符都是跟 LIKE 一起使用的,并协同 WHERE 子句共同来完成查询任务。常用的通配符有两个,分别是:

%:百分号表示零个、一个或多个字符
** _:下划线表示单个字符**

%

查询名字是l开头的记录

// 
mysql> select id,name from ky17 where name like 'l%';

MySQL高阶语句_第17张图片

查询名字里是和l中间有一个字符的记录

// 
mysql> select id, name from ky17 where name like 'l_lei';

MySQL高阶语句_第18张图片
查询han后面6个字符的名字记录

// 
mysql> select id,name from ky17 where name like 'han______';

MySQL高阶语句_第19张图片
注意:通配符“%”和“_”不仅可以单独使用,也可以组合使用

// 
mysql> select id,name from ky17 where name like 'han___%';

MySQL高阶语句_第20张图片

子查询

子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。
子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。
子语句可以与主语句所查询的表相同,也可以是不同表

查询和id在test2范围中的info的信息且按id升序排列

MySQL高阶语句_第21张图片

查询分数大于80的记录

MySQL高阶语句_第22张图片

将id为2的成绩改为50

MySQL高阶语句_第23张图片

将其他成绩改为100

MySQL高阶语句_第24张图片

视图

数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性
本质而言视图是一种select(结果集的呈现)

视图与表的区别

  1. 视图是已经编译好的sql语句。而表不是
  2. 视图没有实际的物理记录。而表有。
  3. 表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
  4. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
  5. 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
  6. 视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

创建视图

在这里插入图片描述
MySQL高阶语句_第25张图片

修改视图数据

MySQL高阶语句_第26张图片

修改表数据

MySQL高阶语句_第27张图片

多表创建视图

MySQL高阶语句_第28张图片

NULL

NULL和空值的区别
NULL就是在字段中存储NULL值,空值就是字段中存储空字符 ‘ ’ ;
MySQL高阶语句_第29张图片
从上面可以看出(’ ')的长度是0,是不占用空间的;而NULL长度是NULL,其实它是占用空间
使用COUNT (字段)统计会过滤掉NULL值,但是不会过滤掉空值
NULL值查询使用is null/is not null查询,而空值(’ ')可以使用=或者!=算术运算符查询

统计数量

MySQL高阶语句_第30张图片

对NULL查询

MySQL高阶语句_第31张图片

查询空值

MySQL高阶语句_第32张图片

你可能感兴趣的:(mysql,数据库)