




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MySQL 学习笔记学习笔记 1 查询语句查询语句 1 1 简单查询简单查询 1 1 1distinct 删除重复行删除重复行 SELECT 语句中使用 ALL 或 distinct 选项来显示表中符合条件的所有行或删除 其中重复的数据行 默认为 ALL 使用 distinct 选项 时 对于所有重复的数据行 在 SELECT 返回的结果集合中只保留一行 distinct 一般需要处理单一字段时使用 一般需要处理单一字段时使用 不能用于多个字段 不能用于多个字段 例如 select distinct ID AA BB from tName select distinct ID from tName 区别在于 第一种情况是把三个字段的内容都相同的记录认为是相同的记录 合 并一条 如果有一个字段是不同的 认为不是相同 不合并 我要消除 name 字段值重复的记录 同时又要得到 id 字段的值 其中 id 是自增 字段 如何用 distinct 消除重复记录的同时又能选取多个字段值 select distinct name from t1 能消除重复记录 但只能取一个字段 现在要同时 取 id name 这 2 个字段的值 select distinct id name from t1 可以取多个字段 但只能消除这 2 个字段值全部 相同的记录 最后解决方法 最后解决方法 SELECT id name FROM t1 WHERE id IN SELECT MAX id FROM t1 GROUP BY name order by id desc 注意开头的 id 的一定要 后面的 order by 里有的字段一定要加进 select 结果 要不然排序无效 1 1 2限制返回的行数限制返回的行数 使用 TOP n PERCENT 选项限制返回的数据行数 TOP n 说明返回 n 行 而 TOP n PERCENT 时 说明 n 是表示一百分数 指定返回的行数等于总行数的百分 之几 例如 SELECT TOP 2 FROM testtable SELECT TOP 20 PERCENT FROM testable 1 1 3WHERE 子句设置查询条件子句设置查询条件 WHERE 子句可包括各种条件运算符 1 比较运算符 大小比较 select age from person where name 孙权 1 2 2in 嵌套查询嵌套查询 in 关键字用于 where 子句中用来判断查询的表达式是否在多个值的列表中 返 回满足 in 列表中的满足条件的记录 示例 select name from person where countryid inin select countryid from country where countryname 魏国 输出结果为 1 2 3some 嵌套查询嵌套查询 some 在 sql 中的逻辑运算符号 如果在一系列比较中 有些值为 True 那么 结果就为 True some 的语法是 some 子查询 示例 select name from person where countryid somesome 用等号和以下查询到的值比较 如果与其中一个相等 就返回 select countryid from country where countryname 魏国 输出结果为 1 2 4all 嵌套查询嵌套查询 all 是 sql 中的逻辑运算符好 如果一系列的比较都为 true 那么结果才能为 true allall 当 countryid 大于以下返回的所有 id 此结果才为 True 此结果才返回 select countryid from country where countryname 魏国 输出结果为 1 2 5exists 嵌套查询嵌套查询 exists 是 sql 中的逻辑运算符号 如果子查询有结果集返回 那么就为 True exists 代表 存在 的意义 它只查找满足条件的那些记录 一旦找到第一个 匹配的记录后 就马上停止查找 exists 子查询 其中子查询是一个首先的 select 语句 不允许有 compute 子句和 into 关键字 exists 的意思是 子查询是否有结果集返回 例如 SELECT FROM Person WHERE exists SELECT 1 1 SELECT 0 SELECT NULL 返回结果都一样 因为这三个子查询都有结果集返回 因此总是 True SELECT FROM Person 照常执行 但是如果子查询中因为加了条件而没有结果集返回 则主语句就不执行了 SELECT FROM Person WHERE exists SELECT FROM Person WHERE Person Id 100100 如果不存在 Person Id 的记录 则子查询没有结果集返回 主语句不执行 1 3 连接查询连接查询 1 3 1左连接 左连接 LEFT JOIN LEFT JOIN 关键字会从左表 table name1 那里返回所有的行 即使在右表 table name2 中没有匹配的行 数据库在通过连接两张或多张表来返回记录时 都会生成一张中间的临时表 然后再将这张临时表返回给用户 在在 left join 下 下 on 和和 where 两者的区别 两者的区别 on 是在生成临时表的时候使用的条件是在生成临时表的时候使用的条件 不管 on 的条件是否起到作用 都会返 回左表 table name1 的行 where 则是在生成临时表之后使用的条件则是在生成临时表之后使用的条件 此时已经不管是否使用了 left join 了 只要条件不为真的行 全部过滤掉 SQLSQL 语句 语句 select a id a No b name from table1 a left join table2 b on a No a No b Nob No andand b name aaa b name aaa select a id a No b name from table1 a left join table2 b on a No a No b No b No wherewhere b name aaa b name aaa 表 1 table2 ididNoNo 1n1 2n2 3n3 表 2 table2 NoNonamename n1aaa n2bbb n3ccc 第一个结果集 第一个结果集 id No name 1 n1 aaa 2 n2 Null 3 n3 Null 第二个结果集 第二个结果集 id No name 1 n1 aaa 第一个 sql 的执行流程 首先找到 b 表的 name 为 aaa 的记录行 on a No b No and b name aaa 然后找到 a 的数据 即使不符合 b 表的规则 生成临时表返 回用户 第二个 sql 的执行流程 首先生成临时表 然后执行 where 过滤 b name aaa 不为真的结果集 最后返回给用户 因为 on 会首先过滤掉不符合条件的行 然后才会进行其它运算 所以按理说 on 是最快的 在多表查询时 on 比 where 更早起作用 系统首先根据各个表之间 的联接条件 把多个表合成一个临时表后 再由 where 进行过滤 然后再计算 计 算完后再由 having 进行过滤 由此可见 要想过滤条件起到正确的作用 首先要 明白这个条件应该在什么时候起作用 然后再决定放在那里 对于 JOIN 参与的表的关联操作 如果需要不满足连接条件的行也在我们的查 询范围内的话 我们就必需把连接条件放在 ON 后面 而不能放在 WHERE 后面 如果我们把连接条件放在了 WHERE 后面 那么所有的 LEFT RIGHT 等这些操作 将不起任何作用 对于这种情况 它的效果就完全等同于 INNER 连接 对于那些 不影响选择行的条件 放在 ON 或者 WHERE 后面就可以 记住 所有的连接条件都必需要放在记住 所有的连接条件都必需要放在 ON 后面 不然前面的所有后面 不然前面的所有 LEFT 和和 RIGHT 关联将作为摆设 而不起任何作用 关联将作为摆设 而不起任何作用 select pj id pj name IFNULL COUNT vm1 vmname 0 as 虚拟机数量 from project pj LEFT JOIN select vm project id vm name as vmname from vm host vm where vm status A vm1 on pj id vm1 project id where pj status P GROUP BY pj id 1 3 2右连接 右连接 RIGHT JOIN 1 3 3内连接内连接 内连接 也叫等值连接 inner join 产生同时符合 A 和 B 的一组数据 mysql select from A inner join B on A name B name id name id name 1 Pirate 2 Pirate 3 Ninja 4 Ninja 1 3 4全连接全连接 注意 mysql 不支持不支持 Full join 不过可以通过 UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN 来模拟 FULL join 1 4 联合查询 联合查询 UNION union 对两个结果集进行并集并集操作 重复数据只显示一次 重复数据只显示一次 union all 对两个结果集进行并集并集操作 重复数据全部显示 重复数据全部显示 1 4 1语法语法 SELECT column name FROM table1 UNION SELECT column name FROM table2 UNION 用于合并两个或多个 SELECT 语句的结果集 并消去表中任何重复行 UNION 内部的 SELECT 语句必须拥有相同数量的列 列也必须拥有相似的数 据类型 同时 每条 SELECT 语句中的列的顺序必须相同 1 4 2实例实例 stud
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年科技行业人工智能应用前景研究报告
- 2025年智能交通系统的市场前景研究报告
- 2025年区块链行业区块链技术应用与数字货币发展前景研究报告
- 屏山县2025四川宜宾市屏山县发展和改革局第二次招聘编外聘用人员1人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中国地质科学院招聘拟聘人员(第二批)笔试历年参考题库附带答案详解
- 流动资金借款合同标准版5篇
- 吉安市江西吉安市峡江县2025年县直事业单位公开招聘高层次人才【37人】笔试历年参考题库附带答案详解
- 南宁市2025广西南宁中心血站招聘笔试历年参考题库附带答案详解
- 2025鲁控环保科技有限公司招聘20人(山东)笔试参考题库附带答案详解
- 2025浙江杭州西湖康养有限公司招聘2人笔试参考题库附带答案详解
- 2025贵州民航产业集团有限公司社会招聘考试参考试题及答案解析
- 2025年江西省高考物理试卷真题(含答案及解析)
- 高三励志课件
- 河南省人民医院2025年护士规范化培训招生考试参考题库及答案解析
- 防消联勤课件
- 绿色交通系统无人驾驶车辆示范项目可行性研究报告
- 2025年领导干部政治理论知识竞赛题库及答案
- 2025国庆中秋节前安全教育
- 东北三省2025~2026学年度上学期高考单元检测示范卷 数学(选择性必修第一册 人教版 第1章)(含答案)
- 读书的力量课件
- 华为年度业务规划
评论
0/150
提交评论