mysql数据库子查询实践报告_MySQL数据库总结(4)子查询与联合

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设

1、子查询:

子查询就是在原有的查询语句中,嵌入新的查询,来得到我们想要的结果集。一般根据子查询的嵌入位置分为,where型子查询,from型子查询

1、Where 型子查询: 把内层查询的作为外层查询的比较条件

典型语法:

select * from tableName

where colName = (select colName from tbName where ….)

{where colName in (select colName from tbName where ..)}

典型题:查询最大商品,最贵商品

查询出最新一行商品(以商品编号最大为最新,用子查询实现)

select goods_id,goods_name from goods where goods_id=(select max(goods_id) from goods);

每个栏目最贵的商品

Select goods_id,cat_id,goods_name,shop_price from goods where shop_price in (select max(shop_price) from goods group by cat_id);

2、From 型子查询: 把内层的查询结果当成临时表,供外层sql再次查询

给临时表加一个别名 as

典型语法:

select * from (select * from tableName where …) where….

典型题:查询栏目下最新/最贵商品1增 2删 3改 4查 1where各种条件查询场合 2group常用语统计场合 3having 4order by各种排序场合 5limit 在语句的最后起到限制条目的作用 5模糊查询Like 1、增 插入单行或者多行 insert into msg (id,title,name,content) values (1,‘又来了’,‘李四’

试查询两门及两门以上不及格同学的平均分(where、from子查询)

select name,avg(score) from stu where name in (select name from (select name,sum(score<60) as h from stu group by name having h>1) as tmp) group by name;

3、Exists 型子查询:外层sql查询的代入内层sql查询,要使内层查询能够成立 。查询可以与in型子查询互换,但效率要高.

典型语法:

select * from tablename

where exists(select * from tableName where …)

典型题:查询有商品的栏目

Select cat_id,cat_name from category where exists (select * from goods where goods.cat_id = category.cat_id);

2 、Union:联合

作用: 把2次或多次查询结果合并起来

要求:两次查询的列数一致

推荐:查询的每一列,相对应得列类型也一样

可以来自于多张表,多次sql语句取出的列名可以不一致,此时,以第1个sql的列名为准

如果不同的语句中取出的行,有完全相同的(每个列的值都相同),那么相同的行将会合并(去重复).

如果不去重复,可以加all来指定 union all

想取第4栏目的商品,价格降序排列,还想取第5栏目的商品,价格也降序排列

(select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 4 order by shop_price desc) union (select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 5 order by shop_price desc) order by shop_price desc;

取第3个栏目价格前3高的商品和第4个栏目价格前2高的商品,union来实现

(Select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 3 order by shop_price desc limit 3) union

(Select goods_id,cat_id,goods_name,shop_price from goods where cat_id = 4 order by shop_price desc limit 2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2008数据库实验 1.SQL SEVER 2000的系统工具、使用交互方式建库、建表 2.T—SQL的简单查询、连接查询 3.子查询及组合 4.数据控制、数据导入/导出、数据备份和恢复 实验1 SQL SEVER 2000的系统工具、使用交互方式建库、建表实验 实验目的和要求:了解SQL SEVER 2000的功能及组成,熟练掌握利用SQL SEVER 2000企业管理器和查询分析器创建数据库、表、索引和修改表结构及向数据库输入数据、修改数据和删除数据的操作方法和步骤,掌握定义数据约束条件的操作。 实验内容和步骤: (1)熟悉SQL SEVER 2000的界面和操作。 (3)熟悉企业管理器和查询分析器的界面和操作。 (3)创建数据库和查看数据库属性。 (4)创建表、确定表的主码和约束条件。 (5)查看和修改表的结构。 (6)向数据库输入数据,观察违反列级约束时出现的情况。 (7)修改数据。 (8)删除数据,观察违反表级约束时出现的情况。 实验2 T—SQL的简单查询、连接查询 实验目的和要求:,了解SQL语句的数据定义与数据更新功能,了解SQL语句的查询功能,掌握SQL中的数据定义语句的用法,熟练掌握SQL中的插入、修改和删除语句的操作,熟练掌握使用SQL语句进行数据库的简单查询、连接查询。 实验内容和步骤: (1)在SQL SEVER 2000的查询分析器里,用SQL语句建库、建表并插入记录。 (2)修改表结构,包括修改属性列的数据类型,增加新的属性列,删除已有的属性列。 (3)使用单个元组和多元组插入。 (4)简单查询操作,包括投影、选择、数据排序、模糊匹配查询等。如果结果不正确,要进行修改,直至正确为止。 (5)连接查询操作,包括等值连接、自然连接、一般连接、自身连接、外连接。 实验3 子查询及组合 实验目的和要求:了解SQL语句的查询功能,理解视图的概念。熟练掌握使用SQL语句进行数据库的嵌套查询及组合查询的操作;掌握视图创建语句和视图的使用方法,加深对视图作用的理解。 实验内容和步骤: (1)在DBMS的交互式环境里,用SQL语句建库、建表并插入记录。 (2)使用In、比较符和Exists操作符进行嵌套查询操作。 (3)分组查询,包括分组条件表达、选择组条件表达的方法。 (4)集合查询。 (5)使用视图创建语句建视图,通过视图查询数据 (6)带子查询的修改和删除 (7)通过视图修改和删除数据 实验4 数据控制、数据的导入/导出、数据库备份和恢复 实验目的和要求:掌握数据控制(安全性)的方法,了解SQL SEVER 2000的数据备份和恢复机制,掌握SQL SEVER 2000中数据库备份和恢复的方法。 实验内容和步骤: (1)使用SQL对数据进行安全性控制,包括授权和权利收回。 (2)查看授权和权利收回后的结果 (3)SQL SEVER 2000工具对表中的数据导出到其它格式的文件。 (4)将其它格式的文件数据导入到数据库中。 (5)使用SQL SEVER 2000工具创建一个数据库的备份(海量备份、增量备份)。 (6)使用SQL SEVER 2000工具及所创建的数据库备份恢复这个数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值