MySQL高阶语句(上)

  • 一、MySQL高级语句
    • 1、ORDER BY----按关键字排序
      • 单字段排序
      • 多字段排序
    • 2、OR/AND----或/且
    • 3、DISTINCT----查询不重复记录
    • 4、GROUP BY----对结果进行分组
    • 5、LIMIT----限制结果条目
    • 6、设置别名
    • 7、AS连接语句
    • 8、通配符
    • 9、子查询
      • 子查询----别名as
      • 子查询----EXISTS
  • 二、视图
    • 1、创建视图
  • 三、NULL值
    • 1、null值和空值的区别

实验准备创建一张表
如下:

数据库有一张test表,记录了学生的id,姓名,分数,地址和爱好
create table test (id int(10) primary key not null auto_increment,name varchar (20) not
null,score decimal (5,2),address char (40),hobby varchar (10));
insert into test values(1,'liuyi',80,'beijing','2');
insert into test values(2,'wangwu',90,'shenzheng','2');
insert into test values (3,'lisi',60,'shanghai','4');
insert into test values(4,'tinqi',99,'nanjing','5');
insert into test values (5,'jiaoshou',100,'laowo','3');
insert into test values (6,'xiaoming',10,'zhenjiang','3');
select * from test;

一、MySQL高级语句

1、ORDER BY----按关键字排序

使用SELECT 语句可以将需要的数据从Mysql 数据库中查询出来,如果对查询的结果进行排序,可以使用
ORDER BY
语句来完成排序,并最终将排序后的结果返回给用户。这个语句的排序不光可以针对某一个字段,也可以会对多个字段#语法:
SELECT column1,column2,... FROM table_name ORDER BY column1,column2,... ASC (DESC;ASC |DESC:
ASC是按照升序进行排序的,是默认的排序方式,即 ASC可以省略。SELECT语句中如果没有指定具体的排序方式,则默认按AsC方式进行排序。
DESC是按降序方式进行排列。当然ORDER BY前面也可以使用WHERE子句对查询结果进一步过滤。

单字段排序

按分数排序,默认不指定则为升序排序asc

select name,score from test order by score [asc];

按降序排序使用DESC

select name, score from test order by score desc;

多字段排序

原则:
order by 之后的参数,使用“,”分割,优先级是按先后顺序而定,例如:
select id,name,hobby from test order by hobby desc,id asc;小结:order by 之后的第一个参数只有在出现相同数值,第二个字段才有意义

2、OR/AND----或/且

select * from test where score >70 and score <=90;
select * from test where score >70 or score <=90;
#嵌套/多条件
select * from test where score >70 or (score >75 and score <90) ;



3、DISTINCT----查询不重复记录

select distinct 字段 from 表名;
select distinct hobby from test;PS:以下语句是否可以筛重
select name,hobby from test where hobby in (select distinct hobby from test);
1.distinct必须放在最开头
2.distinct只能使用需要去重的字段进行操作。
----也就是说我distinct了name,hobby两个字段,我后面想根据id进行排序,是不可以的,因为只能name,age两个字段进行操作.
3.distinct去重多个字段时,含义是:几个字段同时重复时才会被过滤。

4、GROUP BY----对结果进行分组

通过 SQL查询出来的结果,还可以对其进行分组,使用GROUP BY 语句来实现,GROUP BY通常都是结合聚合函数一起使用的,常用的聚合函数包括:计数(COUNT)、求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分组的时候可以按一个或多个字段对结果进行分组处理语法:
select hobby,count(id) as sum from test where hobby<=5  group by hobby;selet字段,聚合函数 from 表名,(where 字段名(匹配)数值) group by 字段名;

5、LIMIT----限制结果条目

在使用MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录。有时候仅需要返回第一行或者前几行,这时候就需要用到LIMIT子句
语法
SELECT column1,column2,... FROM table_name LIMIT[offset, ] numberoffset, number
LIMIT的第一个参数是位置偏移量(可选参数),是设置MySO从哪一行开始显示。
如果不设定第一个参数,将会从表中的第一条记录开始显示。需要注意的是,第一条记录的位置偏移量是0,第二条是1,以此类推。第二个参数是设置返回记录行的最大数目。
offset:索引下标
number:索引下标之后的几位
结合order by排序:
select * from test order by id desc limit 3,3;

6、设置别名

在Mysql查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,简洁明了,增强可读性语法:
列的别名
select 字段 as 字段别名 表名
对于表的别名:
select 字段 from 表名 as 别名
PS: AS可以省略列别名设置示例:
select name as 姓名,hobby as 爱好 from test;
表数据别名设置示例:
select i.name as 姓名,i.score as 成绩 from test as i;使用场景:
1、对复杂的表进行查询的时候,别名可以缩短查询语句
2、多表相连查询的时候(通俗易懂、减短sql语句)

7、AS连接语句

As作为连接语句
create table tmp as select * from test;
#此处As起到的作用:
1、创建一个新表tmp定义表结构,插入表数据(与info表相同)
2、但是"约束"没有被"复制"过术,但定如木外衣人l相似:
克隆、复制表结构

8、通配符

通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来通常通配符都是跟LIKE(模糊查询)一起使用的,并协同WHERE子句共同来完成查询任务。常用的通配符有两个,分别是:
%:百分号表示零个、一个或多个字符
_:下划线表示单个字符查询名字是l开头的记录模糊查询'%,示例:
select * from test where name like 'l%';
模糊查询、’示例:
select * from test where name like 'l_s_';
结合使用示例:
select * from test where name like 'l_%_';

9、子查询

定义、示例
#子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句
#子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。
PS:子语句可以与主语句所查询的表相同,也可以是不同表相同表:
示例:
select name,score from test where id in (select id from test where score>80);以上:
主语句: select name,score from test where id
子语句(结果集): select id from test where score>80
in:将主表和子表关联/连接起来的语法in 之后的子查询语句会给他提供的一个范围(集合),作为'in'之前where 的判断条件#示例:
需求:查询test表id为1,3,5的数据(通过子查询的方式)
#单表查询方式:不同表:
select * from test where id in (1,3,5)#子查询方式
create table num (id int (4));
insert into num values (1),(3),(5);
select * from test where id in (select id from num) ;
#子查询不仅可以在SELECT语句中使用,在INERT、UPDATE、DELETE中也同样适用。
#支持多层嵌套。
#in语句是用来判断某个值是否在给定的集合内(结果集),in 往往和select 搭配使用
#可以使用not in表示对结果集取反


子查询----别名as

#先查询test表id,name字段
select id,name from test;
以上命令可查看到test表的内容(结果集)#将结果集作为一张"表"进行查询的时候,我们也需要用到别名,示例:
mysql>select id from (select id,name from test);
#此时会报错
ERROR 1248 (42000): Every derived table must have its own alias
#原因:
select * from 表名,此为标准格式,而以上的查询语句,"表名"的位置其实是一个结果集,mysql并不能识别,
而此时给与结果集设置一个别名,并且以"select a.id,name from a;的方式查询,
将此结果集"视为"一张表,就可以正常查询出数据了#所以:
select a.id from (select id,name from test) a;
相当于:
select test.id,name from test;
select 表.字段,字段 from 表;

子查询----EXISTS

select count(*) as number from tmp where exists (select id from test where name='zhangsan')
PS: as number将count统计的结果作为number(列名)返回exists :布尔值判断,后面的内查询语句(返回的结果集)是否成立where:之后跟条件判断加exists:只是为了判断exists之后的条件是否成立,如果成立,则正常执行主语句的匹配,如不成立,则不会执行主语句查询PS: count为计数,sum为求和,使用sum求和结合exists,如子查询结果集不成立的话,输出为null


二、视图

数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了映射镜花水月/倒影,动态保存结果集(数据)
视图我们可以定义展示的条件
示例:
需求:满足80分的学生展示在视图中
PS:这个结果会动态变化,同时可以给与不同的人群(例如权限范围)展示不同的视图

1、创建视图

create view v_score as select * from info where score>=80;
show table status\G

查看视图

select * from v_score;

修改原表数据

update test set score='60' where name='wangwu';

查看视图

select * from v_score;



三、NULL值

在SQL语句使用过程中,经常会碰到NULL这几个字符。通常使用NULL来表示缺失的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用NOT NULL关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL并且没有值,这时候新记录的该字段将被保存为NULL。
需要注意的是,NOLL值与数字О或者空白(spaces)的字段是不同的,值为NULL的字段是没有值的。在SQL 语句中,使用IS NULL可以判断表内的某个字段是不是NULL值,相反的用IS NoT NULL可以判断不是NULL值。
查询test表结构,id和name字段是不允许空值的

1、null值和空值的区别

空值长度为0,不占空间,
NULL值的长度为null,占用空间
is null无法判断空值
空值使用"-"或者"<>"来处理( != )
count()计算时,NULL.会忽略,空值会加入计算
验证:
alter table test add column addr varchar(50);统计数量:检测null是否会被加入统计中
select count(addr) from test;将test表中其中一条数据修改为空值''
update test set addr='' where name='wangwu';统计数量:检测空值是否会被添加到统计中
select count(addr) from test;查询null值
select * from test where addr is null;查询不为空的值
select * from test where addr is not null;



MySQL——高阶语句(上)相关推荐

  1. Mysql数据库(七)——mysql高阶语句(上)

    Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...

  2. MySQL——高阶语句、存储过程(下)

    MySQL--高阶语句(下) 一.数据库函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.概述 2.简介 3.优点 4.创建存储过程 调用存储过程 带参数的存储过程 ...

  3. MySQL——高阶语句(中)

    MySQL--高阶语句(中) 一.正则表达式 二.运算符 三.比较运算符 四.逻辑运算符 五.位运算符 六.连接查询 1.内连接 2.左连接 3.右连接 一.正则表达式 MySQL 正则表达式通常是在 ...

  4. Mysql数据库(九)——mysql高阶语句(下)

    Mysql数据库(九)--mysql高阶语句(下) 一.函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.简介 2.优点 3.语法 ①.例 ②.参数分类 ③.带参数 ...

  5. Mysql数据库(八)——mysql高阶语句(中)

    Mysql数据库(八)--mysql高阶语句(中) 一.正则表达式(同shell脚本的正则表达式) 1.以"."代替任意一个字符 2.匹配前面字符多次 3.匹配前面字符至少一次 4 ...

  6. mysql高阶语句一

    高阶语句一 1.按关键字排序 (1)按一个字段排序: (2)多字段排序 2.区间判断及查询不重复记录 2.1 AND/OR --且/或 2.2.对结果进行分组统计 3.限制结果条目 4.设置别名(al ...

  7. MYSQL sql 高阶语句 (sequel)

    sql 高阶语句 一.空值(NULL) 和 无值('') 的区别 · 无值的长度为 0,不占用空间的:而 NULL 值的长度是 NULL,是占用空间的. · S NULL 或者 IS NOT NULL ...

  8. 学习笔记:MySQL高阶知识体系(下)——索引、锁、日志、隔离级别与MVCC

    转载自https://www.ydlclass.com/doc21xnv/database/mysqladvance/mysqlAdvance2.html MySQL高阶知识体系(下) 6. 索引 6 ...

  9. Hive建表高阶语句、Hive视图

    Hive建表高阶语句.Hive视图 Hive建表高阶语句 - CTAS and WITH 创建临时表 Hive视图(Views) 视图概述 应用场景 Hive视图操作 Hive侧视图(Lateral ...

最新文章

  1. access导出MySQL表格_如何将Access数据库里的表内容导出到Excel
  2. Android NDK开发之 NEON基础介绍
  3. POJ1741 Tree(树分治——点分治)题解
  4. python pandas dataframe 转json_python-将嵌套的json转换为pandas dataframe
  5. Cloudera Manager安装之Cloudera Manager安装前准备(Ubuntu14.04)(一)
  6. SAP CRM business partner Address and person name format
  7. Java 面试题经典 77 问
  8. SpringCloud |第二篇: 服务消费者(Ribbon)
  9. IEEE 802.1x 硬件参加的过程
  10. “symbol lookup error”
  11. Magic Cube
  12. 以下哪些是微型计算机,2017版计算机试题及答案
  13. Word VBA自动排版(1)-新建窗口,并且设置并列分布
  14. 城市级智能网联示范区情况全扫描(2022版)
  15. explaining and harnessing adversarial examples(FGSM)
  16. PTA 7-23 求序列立方和
  17. 微信小程序开发需要注意的29个坑
  18. 广东省产业园区——清远华侨工业园
  19. 删除程序时弹出没有权限
  20. SOEM协议栈代码研读笔记(二)

热门文章

  1. 开天辟地 —— Go scheduler 初始化(二)
  2. OS- -请求分页系统、请求分段系统和请求段页式系统(一)
  3. Django模版(二)
  4. 【全真互联网下音视频技术创新应用】
  5. 音视频、AI和5G等技术在东京奥运会中的应用
  6. 抓不到娃娃?不能总怪运气差!
  7. JVM之GCRoots概述
  8. nginx源码分析(5)——监听socket初始化
  9. nginx源码分析之网络初始化
  10. 验证OpenStack安装