联合查询,子查询 视图,视图数据操作

联合查询

基本语句包括select 语句1   ,  union【union选项】   ,   select语句2。。。。

union选项   : all保留所有不管重复          distinct   去重  默认的

1 . select * from my_class 

union    --- 默认去重

select * from my_class

2. select * from my_class 

union   all   --- 不去重

select * from my_class

3. select id , c_name,room from my_class

union all ---不去重

select name,number,id from my_student

select * from my_student order by sex asc,height desc

--需求:男生升序,女生降序(年龄)   (select* from my_student where sex=' 男 ' order by age asc    limit  999999)            union           (select * from my_student where sex=' 女 ' order by age desc limit  999999)

子查询(sub query)

1 按位置分类       

from 子查询,

where子查询,

 exists子查询 。 select * from my_student where exists(select * from my_class)  ---是否成立

select * from my_student where exists(select * from my_class where id = 3)

select * from my_student where exist (select * from my_class where id = 2)

2 按结果分类      

[1]标量 子查询(一行一列),

select * from my_class              select * from my_student

select * from my_student where c_id=?     select id from my_class where c_name = 'Python1910'    ---id一定只有一个值(一行一列)

[2]列  子查询(一列多行),

select * from my_class                select * from my_student where c_id in(select id from my_class)

{  

1 。 =any等价于in   --其中一个就可以                    select * from my_student where c_id =  any(select id from my_class)          ---所有结果除了NULL除外

2。 any等价于some   ---二者是一样的select * from my_student where c_id =  some(select id from my_class)              ---所有结果除了NULL除外

3 。 == all为全部     select * from my_student where c_id =  all(select id from my_class)     ---NULL除外

}

---查询年龄最大且身高最高       select * from my_student where age = (select max(age) from my_student) and height = (select max(age) from my_student)

[3]行 子查询(多列一行或多行多列),select * from my_student where           --(age ,height)称为行元素       (age,height) = (select  max (age),max(height) from my_student)

select * from my_student order by age desc,height desclimit 1 --可能查询结果不是预想的

[4]表 子查询(多行多列)

---插入学生    insert into  my_student value(null,'bc200007','小红','23',''186)

--查找每个班身高最高的学生   select * from (select * from my_student order by height desc limit 999999 ) as student group  by c_id       -----每个班选出一个学生

视图(view)

定义:是一种有结构,但是没有结果的虚拟表

创建视图

基本语句  create view 视图名字 as select 语句;

创建单表视图  基表只有一个 

创建多表视图  基表来源至少两个

--视图: 单表+ 多表

   create view my_v1 as       select * from my_student

create view my_v2 as         select * from my_class 

create view my_v3  as      select * from my_student as s left join my_class as c on s.c_id    -----错误, id重复

-----多表视图

create view my_v3  as      select s.*,c.c_name,c.room  from my_student as s join my_class as c on s.c_id 

外链接  不符合条件不放入

内链接  符合条件放入

--查看视图创建语句    show create view my_v3\G

查看视图

show tables[like] / desc 视图名/ show create table 视图名

show create view my_v3\G  --查看视图创建语句

show views  不可以v查看所有视图

show * from my_v1

show * from my_v2

show * from my_v3

修改视图

alter view 视图名字  as 新的select语句

alter view my_ v1 as                  select id,name,age,sex,height,c_id from my_student

删除视图

drop view  视图名字

create view my_v4 as                select * from my_student                ---删除视图v4                  drop table my_v4   --删除失败(不能删表)   drop  view my_v4  - -- 删除成功

新增数据

{ 1 }多表视图不能新增数据

---多表视图不能插入数据   insert into my_v3 value(null,'bc20200008','张山','男',15,180,3,'Python1910','A204')      -----插入失败

--将学生表的学号字段设置成不允许为空   alter tabel my_student modify number char(10) not null  unique    

{ 2 }  可以向单表视图插入数据,但是视图中包含的字段必须有基表中所不能为空,或没默认值的字段

---单表视图插入数据  : 视图不包含所有不允许为空的字段  insert into my_v1 values(null,'张山','男',15,180,3)

--单表视图插入数据   insert  into my_v2 values(2,'Python1903','A204')

{ 3 }  视图是可以向基表插入数据的

删除数据

多表视图不能删除数据

单表视图可以删除数据

更新数据

更新限制  with check option

---视图  age 字段限制更新

create view my_v4 as 

select * from  my_student where age>30 with cheak option

--表示视图的数据来源都是年龄大于30岁 是由where age 》30 的

--将视图可以查到数据改成年龄小与30   update my_v4 set  age = 29 where id = 5  

---可以修改数据源让视图可以查到 可以该    但是无效果

uodate my_v4 set  age = 32 where id=3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342