SQL 学习整理

【知乎】从零学会SQL:复杂查询

PHPer 2020-03-27 1802 0 0
内容太多了,还没来得及看,是想进一步学习SQL的,先在网上找些,有空时再仔细看 20200327 00:18从零学会SQL:复杂查询crazy1.视图1. 在实际的数据库中,每...

内容太多了,还没来得及看,是想进一步学习SQL的,先在网上找些,有空时再仔细看 20200327 00:18


从零学会SQL:复杂查询

1d78879457_normal.jpg

crazy

1.视图

1. 在实际的数据库中,每一张表会有很多个字段,但是不同的用户只想了解自己想了解的字段,对于其他的字段并不感兴趣,这时候使用视图可以把自己想要的一些字段再封装成一张表,这样每次特定用户只需要访问这张封装成的表即可了解自己想知道的字段。再说的专业一点,视图是对SQL语句的封装,这个说法在下面进行解释

2. 视图是对SQL语句的封装。因为,我们在数据库中建立的一张张表会实际存储到存储设备上,比如磁盘,我们每次使用select语句,实际上就是在访问内存中的表,但是视图并不是,视图保存的并不是数据,而是select语句,每次从视图中读取数据的时候,相当于是在内部执行select语句并创建出一张临时表

3. 视图的优点:(1)视图不需要保存实际数据,节省存储空间(2)可以将频繁使用的select语句保存成视图,这样就不用每次都书写复杂的SQL了

4716ee463c_normal.jpg/*

创建视图

create view 视图名称(<视图列名1>,<视图列名2>,...)

as

<select 查询语句>;

*/

create view 按性别汇总(性别,人数)

as

select 性别,count(*)

from student

group by 性别;

select*

from 按性别汇总; -- 在from子句中,使用视图名称代替表名称

-- 视图中存放的是sql查询语句,所以视图中的语句会随着原表的变化而更新,视图也不需要保存数据

-- 注意事项:避免在视图的基础上再去创建视图;不能往视图插入数据,否则会报错

2.子查询

嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回。

select 性别,人数
from (
select 性别,count(*) as 人数
from student
group by 性别 -- 先运行子查询
) as 按性别汇总;

select 性别,count(*) as 人数
from student
group by 性别;

-- in/any/all(子查询)

-- 找出每个课程里成绩最低的学号
-- 1.查找出每门课程的最低成绩有哪些值
select 课程号,min(成绩)
from score
group by 课程号;

-- 2.在成绩表里查找这些值对应的学号
select 学号,成绩
from score
where 成绩 in(80,50,40);

-- 这个可以显示正确的结果
select 学号,成绩
from score
where (课程号 =0001 and 成绩 =80) or (课程号 =0002 and 成绩 =50) or (课程号 =0003 and 成绩 =40);

select 学号,成绩
from score as s1
where 成绩 =(select min(成绩) 
from score as s2 
where s1.课程号 = s2.课程号 -- 在同一课程号中对各学号的成绩与最低成绩进行比较
group by 课程号);

-- 这个语句查询结果不太对,上面的两块代码可以正确显示每门课程里成绩最低的学号
select 学号,成绩
from score
where 成绩 in (
select min(成绩)
from score
group by 课程号
);

/*
any(子查询) 与some(子查询)相同
select 列名1
from 表名1
where 列名 > any(子查询);
*/

/*
哪些学生的成绩比课程0002的全部成绩里的任意一个高呢?
第一步:课程0002的全部成绩,比如是(10,30)
第二步:某个学生的成绩大于任何一个第一步里的成绩,就符合条件
*/
-- 第一步
select 成绩
from score
where 课程号 = '0002';

-- 第二步
select 学号,成绩
from score
where 成绩 > any(
select 成绩
from score
where 课程号 = '0002'
);


-- 哪些学生的成绩比课程0002的全部成绩都高呢?
select 学号,成绩
from score
where 成绩 > all(
select 成绩
from score
where 课程号 = '0002'
);

/*
使用子查询的注意事项
1.a>3*all(b)是错的,正确格式是a/3=all(b)
2.避免使用多层嵌套子查询
3.select...from...子查询 as 子查询名称(可省略)
*/

3.标量子查询

标量子查询就是返回值只能有一行一列的子查询...

立即注册
分享的网址网站均收集自搜索引擎以及互联网,非查问网运营,查问网并没有提供其服务,请勿利用其做侵权以及违规行为。

更新于:2020-03-27 00:18:40
    您需要登录后才可以评论。 立即注册
    相关内容

    mysql 中文全文索引模糊查询和like模糊查询的速度对比

    Mysql问题整理

    Yii2数据库报错-SQLSTATE[HY093]: Invalid parameter number: no para...

    Mysql server has gone away 报错原因分析及解决办法

    mysql 警告 could not be resolved: Name or service not known

    Mysql用特殊字符设置密码遇到的问题

    Mysql的函数substring使用注意事项

    MySQL 5.7内存使用分析

    mysql 命令整理

    【mysql】主键、普通索引、唯一索引和全文索引的比较

    没有接收到要导入的数据。可能是文件名没有提交,也可能是文件大小超出 PHP 限...

    Mysql 报错'SQLSTATE[HY000] [1045] Access denied for user 'root'@'...

    php连接mysql报错The server requested authentication method unknown to ...

    Mysql登录提示ERROR 2003 (HY000): Can't connect to MySQL server o...

    Mysql报错SQLSTATE[HY000]: General error: 1366 Incorrect string ...

    全网最详尽的Centos和Windows系统 Mysql8 root忘记密码解决办法

    mysql数据库操作 报错 #1030 - Got error 176 "Read page with wrong ...

    Linux系统彻底卸载MySQL数据库

    Linux下mysql5.7忘记root密码的解决方法

    ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to...

    mysql创建数据类型为JSON时,显示的longtext数据类型

    mysql 修改编码utf8mb4依旧无法保存表情 Incorrect string value: '\x解决办法

    MySQL 中 不等于 会过滤掉 Null 的问题

    Mysql知识学习

    MySQL 8.0 索引特性1-函数索引

    MySQL字符串函数substring:字符串截取

    Mysql的临时变量取值3例

    mysql查找字符串出现位置

    mysql 更改AUTO_INCREMENT 失败的解决办法

    MYSQL 数据库导入导出命令

    mysql如何判断不包含某个字符串

    Mysql中不要用操作符和函数名等等来命名字段

    ORM 实例教程

    Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

    MySQL 中 datetime 和 timestamp 的区别与选择

    Invalid default value for ‘updated_at‘

    设置MySQL的group_concat_max_len长度为最大值

    MySQL中concat()、concat_ws()、group_concat()函数使用技巧与心得

    mysql的left join和inner join的效率对比,以及如何优化

    mysql查询指定列的重复行数

    SQL 学习整理

    SQL中EXISTS的使用

    Yii2报错没有关联命名 common\models\Post has no relation named

    SQL常用语句

    SQL复杂查询(案例一)

    Sql常用查询操作

    【知乎】从零学会SQL:复杂查询

    sql查询两张表中不同的数据

    推荐内容

    分享几个好用的bt搜索bt资源下载网址网站

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享

    全网最新bt磁力搜索引擎bt资源bt网站网址分享

    人气美女女优百度指数排行榜(波多野结衣,苍井空,三上悠亚,深田咏美,桥本有菜,北条...

    最强人造人深田咏美,业界的社交女王

    人生起起落落的三上悠亚,成名前的清纯风,怎么搭配出来的?

    业内第一大长腿,桥本有菜的腿究竟有多长

    波多野结衣,岛国业界著作最多的超级劳模

    日本AV界NO.1,苍井空是多少宅男的疯狂?

    美女女优视频混剪 This Girl-Laza Morgan

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    影视电影剧集动漫综艺bt资源在线播放网址网站推荐分享