子查询——学习.docx_第1页
子查询——学习.docx_第2页
子查询——学习.docx_第3页
子查询——学习.docx_第4页
子查询——学习.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新的学习模式通过备份 数据库文件 查看备份代码 学习基本语句!语句更加规范 并且明白备份原理子查询from 把内层的查询结果作为外层查询比较查询例:查最新商品(以 goods_id最大为最新)1 select * from goods where goods_id = 最大的 gooods_id;2 select * from goods where goods_id = (select max(goods_id) from goods);where 表达式则取出哪一行 表达式在哪一行成立 =,!= ,= in ,between and or,and,nothaving 表达式数据在表中,表在硬盘或者内存中以文件的形式存在where就是针对文件发生作用查询结果,也可以看做是一张表,去文件一般临时存在于缓冲区having 就是针对查询结果发挥着作用group by 分组 一般和统计函数(sum ,avg,min,max)结合使用order by 默认是升序的 如果想显示声明升序排列 可用asc来声明可以字段名 desc 来声明降序排可以用来查询商品等价格 以及新旧注:可以按照多条件排序,前面的条件优先!order by 列1 asc/desc, 列2 asc/desc; exists 把外层的查询结果代入内层,看内层是否成立查询商品栏目select * from category where exists(select * from goods where goods.cat_id = categor.cat_id);cat_id字段相同 需要加上表前缀limit在语句的最后 起到限制显示结果条目个数 limit offset,N;offset表示偏移量(跳过几个)N 表示取出的条目个数如果offset不写 相当于0 #在 mysql 里 表示 注释union 的用法 (一般用于多张表的union)合并查询结果将两次或者两次以上的结果合并在一起要求: 两次查询的列数一致推荐,查询每一列,相对应的列类型是一样的多次sql语句 取出 的列名可以不一致,此时以取第一个sql 的列名为准。如果不同的语句中取出的行 有每个列的值都相同,那么相同的行将被合并成一行(去重复)如果不想去重复union加上 all如果子句里 有 order by | limit 需要 union 两边加小括号例如 (select good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 4 order by shop_price desc )union (select good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 5 order by shop_price desc);但是 容易有误解决方案1 order by 尽量放在最后使用 即岁最终合并后的结果 进行排序(select good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 4 )union (select good_id,cat_id,goods_name,shop_price from goods _id =where cat_id = 5 order by shop_price desc;2 每个子语句 加上limit连接查询 (左连接 右连接 内连接)笛卡尔乘积集合特性 : 确定性 无序性 唯一性一张表可以看做是一个集合,每行数据相当于集合的一个元素Union时 去掉重复 原理 就是集合元素的唯一性表中存在完全相同的两行 是因为 表内部 存在 rowid进行区分笛卡尔积如果 aA, bBA*B = ( a, b);例如 A=(1,2,3,4,5);B=(11,12);那么 A*B (1,11), (2,11), (3,11), (4,11), (5,11),(1,12), (2,12), (3,12), (4,12), (5,12);A有 M 个元素 B 有N 个元素 那么 A*B 有 M*N个元素同理表A有 M 行 表B 有N 行 那么 A*B 有 M*N行例如:ta tb 两表笛卡尔积通过分析可以看出tb 表的 a b c d 每个分别和 ta 的a b c d 组合一遍左连接1 连上表2 连接条件例如:select good_id,goods.cat_id,goods_name,shop_pricefromgoods left join categoryon good.cat_id = category.cat_id;字段名重复那么需要加表前缀,否则会报错;error 1052(23000) column * in field list is ambiguous最后两行可以看 作是一张表。左连接语法:select 列1,列2,列Nfrom table 1 left join table 2on table 1 列 = table 2 列;on 后面的条件只要是条件就可以 可以不是等于 但是常用是等于。将from 后面的当做一个普通表看待。右连接语法:select 列1,列2,列Nfrom table 1 right join table

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论