添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大力的电梯  ·  adb ...·  1 年前    · 
前几篇文章中,我们查询的数据都是在一张表中进行操作的,而在实际工作中,我们经常需要在不同的表中查询数据,今天我们来学习从多张表中获取数据的方法--多表查询。表的加法表的联结用SQL联结解决业务问题case 表达式1.表的加法(union)表的加法在SQL语句中用union表示,是将两个表的数据按行合并到一起。使用union语句时,重复的数据只会保留一个。若想要保留表中重复的行,则使用union a...
PL/ SQL Developer是一个集成开发环境,专门面向Oracle 数据 库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/ SQL 编程也成了整个开发过程的一个重要组成部分。PL/ SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要优势。    登录界面PL/ SQL 编辑器,具有语法加强、 SQL 和PL/ SQL 帮助、对象描述、代码助手、编译器提示、PL/ SQL 完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息时,它将自动出现,至多单击即可将信息调出。 集成调试器   该调试器(要求Oracle 7.3.4或更高)提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何程序单元(包括触发器和Oracle8 对象类型),无需作出任何修改。 PL/ SQL 完善器   该完善器允许您通过用户定义的规则对 SQL 和PL/ SQL 代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/ SQL 代码的可读性,促进了大规模工作团队的协作。 SQL 窗口   该窗口允许您输入任何 SQL 语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合中查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的 SQL 语句。该 SQL 编辑器提供了同PL/ SQL 编辑器相同的强大特性。   使用PL/ SQL Developer 的命令窗口能够开发并运行 SQL 脚本。该窗口具有同 SQL *Plus相同的感观,另外还增加了一个内置的带语法加强特性的脚本编辑器。这样,您就可以开发自己的脚本,无需编辑脚本/保存脚本/转换为 SQL *Plus/运行脚本过程,也不用离开PL/ SQL Developer集成开发环境。   PL/ SQL Developer提供内置的报告功能,您可以根据程序 数据 或Oracle字典运行报告。PL/ SQL Developer本身提供了大量标准报告,而且您还可以方便的创建自定义报告。自定义报告将被保存在报告文件中,进而包含在报告菜单内。这样,运行您自己经常使用的自定义报告就非常方便。   您可以使用Query Reporter免费软件工具来运行您的报告,不需要PL/ SQL Developer,直接从命令行运行即可。   PL/ SQL Developer内置的工程概念可以用来组织您的工作。一个工程包括源文件集合、 数据 库对象、notes和选项。PL/ SQL Developer允许您在某些特定的条目集合范围之内进行工作,而不是在完全的 数据 库或架构之内。这样,如果需要编译所有工程条目或者将工程从某个位置或 数据 库移动到其他位置时,所需工程条目的查找就变得比较简单。 To-Do条目   您可以在任何 SQL 或PL/ SQL 源文件中使用To-Do条目快速记录该文件中那些需要进行的事项。以后能够从To-Do列 中访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器   可配置的树形浏览能够显示同PL/ SQL 开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑 格、浏览 数据 、在对象源中进行文本查找、拖放对象名到编辑器等。   此外,该对象浏览器还可以显示对象之间的依存关系,您可以递归的扩展这些依存对象(如包参考检查、浏览参考 格、图 类型等)。   使用PL/ SQL Profiler,可以浏览每一执行的PL/ SQL 代码行的时序信息(Oracle8i或更高),从而优化您 SQL 和PL/ SQL 的代码性能。   更进一步,您还可以自动获取所执行的 SQL 语句和PL/ SQL 程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、 格扫描、分类等。 HTML指南   Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/ SQL Developer工作环境中,以便在编辑、编译出错或运行时出错时提供内容敏感帮助。 非PL/ SQL 对象   不使用任何 SQL ,您就可以对 格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/ SQL Developer提供了一个简单易用的窗体,只要将信息输入其中,PL/ SQL Developer就将生成相应的 SQL ,从而创建或转换对象。 模板列 PL/ SQL Developer的模板列 可用作一个实时的帮助组件,
这个例子里面我们从 两个 取出 头两行,然后合并到一个 中。   在现实中我们常常会遇到这样的情况,在一个 数据 库中存在 两个 ,假设 1储存着公司个产品本季度销售信息, 2储存着公司本季度欠款金额情况。在一个页面中我们想把这 两个 信息显示出来。通常的做法是在程序中进行两次 SQL 查询,返回 两个 结果集,在分别显示出来,非常麻烦。   下面是实现这个功能的代码: CREATE PROCEDURE test    SET NOCOUNT ON --指示存储过程不返回查询影响的行数   DECLARE @col1c varchar(20),@col2c varchar(20), @inde
select * from B where (select count(1) from A where A.ID = B.ID) = 0 如果是查询相同的 数据 可以用union all select * from a union all select * from b
My SQL 如何从 取出 随机 数据 以前在群里讨论过这个问题,比较的有意思.my sql 的语法真好玩. 他们原来都想用PHP的实现随机,但 取出 多条好像要进行两次以上查询. 翻了手册,找到了下面这个语句,可以完成任务了 SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND()  RAND(N)  返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。  my sql > select RAND();         -> 0.5925 my sql > select RAN
在默认情况下:当 两个 查询时,规则 1.从第一张 中, 取出 一行和第二张 的每一行进行组合,返回结果[含有两张 的所有列. 2.一共返回的记录数第一张 行数*第二张 的行数3.这样 多表查询 默认处理返回的结果,称为笛卡尔集 3.解决这个问题需要写出正确的过滤条where -- 多表查询 -- ?显示雇员名,雇员工资及所在部门的名字【笛卡尔集】 -- 老韩分析 -- 1.雇员名,雇员工资来自emp -- 2.部门的名字来自dept -- 3.需求对emp和dept查询 SELECT e
SQL 中,我们可以使用 JOIN 关键字来 两个 关联查询。例如,假设有 两个 :table1 和 table2,并且它们之间有一个关联字段 field1。你可以使用如下的语句来 两个 关联查询: SELECT * FROM table1 JOIN table2 ON table1.field1 = table2.field1; 你也可以使用多种不同的 JOIN 类型来执行不同的关联方式,例如 ...
A×B 和 B×A 的结果就叫做 两个 集合的笛卡尔积。 两个 集合相乘,不满足交换率,即 A×B≠B×A。A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。 多表查询 遵循的算法就是以上提到的笛卡尔积, 之间的连接可以看成是在做乘法运算 1. sql 查询的基本原理: 第一,单 查询,根据WHERE条件过滤 中的记录,形成中间 (中间 对用户不可见)根据SELECT的选择列选择相应的列进行返回最终结果 第二,两 连接查询,对两 求积并用ON条件和连接类型进行过滤形成中间 ,然后根据WHERE条件过滤中间 的记录,并根据SELECT指定的列返回查询结果 第三,多 连接查询,先对第一个和第二个 做两 连接查询,然后用查询的结果和第三个 做连接查询,自此类推,直到所有的 都连接上为止,最终形... SELECT “A厂” ,定额名称,规格,year(日期) as 年份,数量 FROM [材料进货明细 $] SELECT “A厂” as 工厂 ,定额名称,规格,year(日期) as 年份,数量 FROM [材料进货明细 $] 比较一下上面两句 SQL 语句的区别,没有as 工厂与有as 工厂的区别 二、选择 中若干元组 1、消除取重复的行 例4、查询材料进货明细 的定额名称 SELECT 定额名称 FROM [材料进货明细 $] 该查询结果会包含很多重复的行。消除重复行的话,必须指定关键词 distinct SELECT distinct 定额名称 FROM [材料进货明细 $] 2、查询满足条件的元组 例5、查询材料进货明细 中单位为“套”的所有记录 SELECT * FROM [材料进货明细 $] where 单位= ‘套’ 本句语句中,要学会where的用法: 要查询满足指定条件的元组,可以通过where子句实现。where子句查询条件是: 比较: =,>,<,>=,<=,!=,<>,!>,!<;not +上述比较运算符 确定范围: between and ,not between and 确定集合:in,not in 字符匹配:like,not like 空值:is null,is not null 多重条件:and,or,not 例6、查询材料进货明细 中数量在50—100之间的所有记录 SELECT * FROM [材料进货明细 $] where 数量 between 50 and 100 如果是不在50-100之间的话,直接改成: SELECT * FROM [材料进货明细 $] where 数量 not between 50 and 100 例7、查询材料进货明细 中单位为“只”或“支”的所有记录 SELECT * FROM [材料进货明细 $] where 单位 in(‘只’,'支’) 3、字符匹配 可以用like来实现,通配符%和_ a、%代 任意长度的字符串,如a%b 示以a开头,以b结尾的任意的字符串 b、_代 任意单个字符 例8、查询材料进货明细 中定额名称以“天津”开头的所有记录 SELECT * FROM [材料进货明细 $] where 定额名称 like ‘天津%’ 例9、查询材料进货明细 中定额名称以“天津”开头且字符为4个的所有记录 SELECT * FROM [材料进货明细 $] where 定额名称 like ‘天津__’ 例10、查询材料进货明细 中定额名称不以“天津”开头的所有记录 SELECT * FROM [材料进货明细 $] where 定额名称 not like ‘天津%’ 4、涉及空值的查询 主要是以:null出现 例11、查询材料进货明细 中规格为空的的所有记录 SELECT * FROM [材料进货明细 $] where 规格 is null 5、多条件查询 例12、查询材料进货明细 中定额名称为“天津三通”的并且数量大于30的所有记录 SELECT * FROM [材料进货明细 $] where 定额名称 = ‘天津三通’ and 数量>30 三、order by 子句 desc(降序)、asc(升序) 例13、查询材料进货明细 中数量大于30的所有记录,并且要按照数量来降序排列。 SELECT * FROM [材料进货明细 $] where 数量>30 order by 数量 desc 四、聚集函数 count(distinct/all 列名):统计元组个数 sum:求和 avg:求平均值 max:最大值 min:最小值 例14、查询材料进货明细 中天津大小头的最大数量。 SELECT max(数量) FROM [材料进货明细 $] where 定额名称 = ‘天津大小头’ 或:SELECT max(数量) as 最大数量 FROM [材料进货明细 $] where 定额名称 = ‘天津大小头’ 2. Excel源 数据 及分析下载:Excel 数据 透视 教程:分类百分比 SQL 语句: select *, Hz1.分类销量/Hz2.分类销量 as 分类百分比 from (select 品种,分公司, sum(数量) as 分类销量 from [ 数据 $] group by 品种,分公司) Hz1, (select 分公司, sum(数量) as 分类销量 from [ 数据 $] group by 分公司) Hz2 where hz1.分公司=Hz2.分公司 SQL 语句解释: select 品种,分公司, sum(数量) as 分类销量 from [ 数据 $] group by 品种,分公司 实现对品种、分公司两字段分组的统计求和 select 分公司, sum(数量) as 分类销量 from [ 数据 $] group by 分公司 实现对分公司字段分组的统计求和 对分公司分组统计求和数是对品种、分公司两字段分组统计求和项目再对不同品种的总就和,也就是后者包含前者。 整句语句的意思就是,将 两个 查询结果作为新的查询 分别命名为Hz1、Hz2,用 ”where hz1.分公司=Hz2.分公司“来组合 数据 , 没有条件的制约的话,将统计的结果再进行除数运算, 各品种的分组统计数(分组含品种字段)除以各品种已求和了的分组统计数(分组不含品种字段)求得所占比率, 最后在字段单元格设置为百分数就可以了。 在Excel中使用MS Query查询外部 数据 库的内容的优点是:不用设置公式、编写VBA代码、源 数据 库不用打开。 但要注意:源 数据 库的记录要有字段名,由于设置查询时的路径固定,。 因此源 数据 库文件不能随意移动(如确实要移动可以通过手工修改查询或VBA解决) 以下示例采用MS Query在“查询”工作簿中查询关闭的“销售”工作簿中sheet1的指定 “店铺”和指定“颜色”的内容(sheet1有“店铺”、“数量”、“颜色”等字段名及若干 数据 )。 操作前请先确定是否安装有MS Query。附上举例文件,请解压到D盘根目录下: 销售.xls为源 数据 ,查询.xls中设置了msquery查询。 下载:MS Query查询未打开工作簿的内容例子 1、 新建一个工作 ,选择菜单【 数据 】—【导入外部 数据 】—【新建 数据 库查询】, 界面如图,由于查询excel 数据 库的内容,因此选择【Excel Files*】并确定; 2、 弹出〖选择工作簿〗对话框,选择“销售”工作簿,〖确定〗; 3、 弹出〖选择列〗对话框,如果此时弹出“没用内容”,确定后在〖选项〗中将“系统 ”勾上。 将所选工作簿的各个工作 及工作 中的字段名添加到查询结果中,全选可直接将工作 名添加, 〖下一步〗〖下一步〗,选择“在MS query中继续编辑查询”; 4、 弹出MS Query查询编辑,点击【显示/隐藏条件】图标,在“条件字段”中添加“店铺”, 值改为“[店]”(方括号中内容随意),再添加个条件为“颜色”,值改为“[色]”,点击【将 数据 返回Excel】 5、 回到excel的“导入 数据 ”对话框,点击〖参数〗,选中“店”字段,再选择“从下列单元格中获取 数据 ”, 选择一个用来更改查询关键字的单元格(如B1),并勾选“单元格值更改时自动刷新”, “色”字段改成从单元格“B2”中获取,〖确定〗。 数据 放置位置选择“A3”。〖确定〗。 6、 当更改B1和B2单元格的内容(做个 数据 有效性)时,A3及以下的 数据 会即时刷新。 此法对于需要经常在局域网中查询 数据 非常方便,比如: 数据 放在局域网内的一台主机上,通过MS Query即可不打开工作簿查询 数据
前段时间在写一个服务端程序的时候,  需要用到my sql . 客户端连接服务端执行 sql 分好几种情况, { 查询 SQL , 执行 SQL , 执行 SQL 事务, 批量执行支持, 查询执行混合 } ... 其中的"批量执行"就有点让我头疼, 玩过 sql 的都知道, 批量执行一般以";" 终结符算一条 sql 语句, 以此分割. 难点就是把批量的 sql 语句, 分割为单条, 一个一个的执行.    估计有的易友可能想到了"分割文本, 发送文本数组" 首先"发送文本数组", 我不喜欢,  有时候显得麻烦. 其次"分割文本", 你可能会遇到这样以下这样的情况, 也就是 sql 字符串中出现了";", 你能怎么办? 你也很绝望对吧? [font=微软雅黑]INSERT INTO `User`(name) values('剑''齿;虎');  SELECT LAST_INSERT_ID();[/font] 以上问题还有, 字符串中包含单引号就需要用 两个 单引号 示.... 实在不想屈服于前面两种蛋疼的方式,  试着自己封装子程序解析, 忽略字符串什么的.   有时候脑子是个好东西,  可惜我好像没有似的...   感觉设计起来还挺复杂麻烦的,  我没学过什么脚本设计,  编译设计的. 于是前段时间论坛有几个帖子被顶起来了,  一个叫"无间酱"的大佬制作了好几个练手的脚本语言设计, 我灵机一动...  脚本也会遇到这样的问题,   就把源码中的解析终结符部分给抠出来了...  总算说到重点了. 刚开始还不能直接用,   改了改还算可以了. INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');--注释A:插入语句-- SELECT * FROM User; /*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1 数组:3{ “INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');”, “--注释A:插入语句-- SELECT * FROM User;”, “/*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1” 首先建立了一个 ,随意插入的一些测试 数据 结构和 数据 如下图: 现在假设我们要做的是每页5条 数据 ,而现在我们要取第三页的 数据 。( 数据 太少,就每页5条了) select top 5 * from [StuDB].[dbo].[ScoreInfo] where [SID] not in (select top 10 [SID] from [StuDB].[dbo].[ScoreInfo] order by [SID]) order by [SID] 此方法是先 取出 前10条的SID(前两页),排除前10条数
SELECT product_name, SUM(quantity) AS total_quantity FROM sales WHERE MONTH(sale_date) = MONTH(CURRENT_DATE()) AND YEAR(sale_date) = YEAR(CURRENT_DATE()) GROUP BY product_name ORDER BY total_quantity DESC LIMIT 1; 查询本月销售金额最多的菜品: SELECT product_name, SUM(quantity * unit_price) AS total_amount FROM sales WHERE MONTH(sale_date) = MONTH(CURRENT_DATE()) AND YEAR(sale_date) = YEAR(CURRENT_DATE()) GROUP BY product_name ORDER BY total_amount DESC LIMIT 1; 这里假设销售记录存在一个名为 `sales` 的 中,包含字段 `product_name`(菜品名称)、`quantity`(销售数量)和 `unit_price`(单价)。 两个 查询分别使用了 `SUM` 聚合函数计算本月的销售数量和销售金额,并使用 `GROUP BY` 子句按菜品名称进行分组。使用 `MONTH` 和 `YEAR` 函数过滤出本月的销售记录,使用 `ORDER BY` 子句排序并 取出 第一条记录,即为本月销售数量或销售金额最多的菜品。