设为首页 收藏本站
查看: 895|回复: 0

[经验分享] mysql 基础篇-数据查询(1)

[复制链接]

尚未签到

发表于 2018-10-8 09:10:45 | 显示全部楼层 |阅读模式
  一、查询数据的概念:查询数据、筛选数据、确定数据的以什么样的格式输出。
  二、数据查询的基本语句
  1、基本语句格式 :select 字段列表  FROM 表或者视图  where 查询条件
  2.1 单表查询的内容:查询所有字段、查询指定字段、查询指定记录、查询空值、多条件的查询
  对查询结果进行排序。
  2.1.1  查询所有字段,通过* 通配符来实现。
  SELECT * FROM fruits;(*代表所有的表中的字段,fruits是表名)
  数据返回的时候按照定义表时候的顺序显示的。
  一般不推荐使用*查询所有的数据,不然会降低查询和所使用得应用程序的效率
  2.1.2 查询指定单个字段:
  SELECT f_name FROM fruits (f_name 是fruits表中的一个列)
  2.1.3 查询多个字段:
  SELECT f_name, f_price FROM fruits;(f_name,f_price 都是fruits的一个列)。
  不同字段名称之间要用逗号分隔开。
  2.2通过where来写条件 进行数据的过滤筛选
  SELECT 字段名1...n FROM 表名 WHERE 查询条件
  2.2.2  条件判断符  大于(>), 小于(=) ,小于等于(=5 AND f_name= 'apple';
  2.6.1 OR 表示只需要满足其中一个条件的记录即可返回数据,OR可以连接多个甚至多个查询条件,多个条件表达式之间使用OR分开。
  SELECT s_id ,f_name,f_price FROM fruits WHERE s_id =101 OR s_id =102;
  IN 和 OR 的操作符使用后结果是一样的,但是使用IN操作符使得检索语句更加简明,并且IN执行的速度要快于OR ,使用IN操作符,可以执行更加复杂的嵌套查询。
  AND 的优先级高于 OR。
  2.7.1 查询结果不重复   distinct 消除重复的值
  SELECT DISTINCT  s_id FROM fruits;
  2.8.1 对查询结果进行排序
  SELECT f_name FROM fruits ORDER BY f_name;   默认应该都是升序。
  2.8.2  多列排序  对多列数据 进行排序,需将需要排序的列之间用逗号隔开。
  SELECT f_name, f_price FROM fruits ORDER BY f_name, f_price;
  在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中的所有值都是唯一的,将不再对第二列进行排序。
  2.8.3 指定排序的方向  通过关键字DESC来实现
  SELECT f_name ,f_price FROM fruits ORDER BY f_price DESC;  降序
  ASC 是升序, 在排序的时候 ASC是作为默认的排序方式,所以加不加都可以。
  要对多列都进行降序排序,必须要在每一列的列名后面都要加DESC 关键字
  SELECT f_price, f_name FROM fruits ORDER BY f_price DESC ,f_name DESC;
  2.9.1 分组查询  分组查询是对数据按照某个或者多个字段进行分组。 使用GROUP BY 关键字对数据进行分组。
  2.9.2 基本语法: GROUP BY 字段 HAVING 条件表达式
  字段值为进行分组时所依据的列名称;‘HAVING(条件表达式)’ 指定满足表达式限定条件的结果将被显示。
  2.9.3 GROUP BY 关键字通常和集合函数一期使用 如:MAX()、 MIN()、COUNT()、SUM()、AVG()
  SELECT s_id, COUNT(*)  AS total FROM fruits GROUP BY s_id;
  SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;
  2.9.4  GROUP BY 可以和HAVING 一起限定显示记录所需满足的条件,只有满足条件的分组才能会被显示。
  SELECT s_id, GROUP_CONCAT(f_name) AS Names
  FROM fruits
  GROUP BY s_id HAVING COUNT(f_name)>1 ;
  2.9.5 HAVING 和WHERE 的区别 :HAVING在数据分组之后进行过滤来选择分组,而WHERE 在分组之前用来选择记录,在WHERE 排除的记录不在包括在分组内。
  2.9.6 GROUP BY 中使用 WITH ROLLUP
  使用WITH ROLLUP 后,在所有查询出的分组之后增加一条记录,该记录计算查询出的所有记录的综合,即统计数量。
  SELECT s_id ,COUNT(*) AS Total FROM fruits GROUP BY s_id WITH ROLLUP;
  2.9.7 多字段分组   实验无法成功。
  2.9.8 GROUP BY 和 ORDER BY 一起使用
  SELECT o_num, SUM(quantity* item_price)  AS orderTotal
  FROM orderitems
  GROUP BY o_num
  HAVING SUM(quantity*item_price) >=100;
  3.1.1 LIMIT 限制查询结果的数量
  SELECT * FROM fruits LIMIT 4;  显示查询结果的前4行
  SELECT * FROM fruits LIMIT4,3; 显示从第五行开始后的三条记录。
  4.1.1 使用聚合函数查询
  功能:计算数据表中记录行数的总数、计算某个字段列下数据的总和,以及计算表中某个字段下的最大值、最小值或者平均值。
  AVG (某列的平均数) COUNT (某列的行数) MAX (某列的最大值)MIN(某列的最小值) SUM(某列值得和)
  4.1.2 COUNT()函数
  COUNT(*) 计算表中总的行数,不管某列有数值或者为空值。
  SELECT COUNT(*)   AS cust_num FROM customers;
  COUNT(字段名) 计算机指定列下总的行数,计算时忽略空值的行
  SELECT COUNT(o_email)   AS email_num FROM customers;
  4.1.2   COUNT  GROUP BY
  SELECT o_num, COUNT(f_id)
  FROM orderitems
  GROUP BY o_num;
  GROUP BY 关键字先按照哦订单号进行分组,然后计算每个分组中的总记录数。
  4.1.3 SUM
  SELECT SUM(quantity)  AS items_total
  FROM orderitems
  WHERE o_num =30005;
  SELECT o_num ,SUM(quantity)   AS items_total
  FROM orderitems
  GROUP BY o_num;
  count 行的总和, sum 是列的值得总和。
  4.1.4 AVG
  SELECT AVG(f_price)   AS avg_price
  FROM fruits
  WHERE s_id=103;
  SELECT s_id, AVG(f_price )   AS avg_price
  FROM  fruits
  GROUP BY s_id;
  AVG()函数使用时,其参数为要计算的列名称,如果要得到多个列的多个平均值,则需要在每一列上使用AVG()函数
  4.1.5 MAX() 函数
  SELECT MAX(f_price)  AS max_price FROM fruits;
  SELECT s_id, MAX(f_price)   AS max_price FROM fruits GROUP BY s_id;
  SELECT MAX(f_name)   FROM fruits;
  MAX  可以对字母进行大小判断,并返回最大的字符或者字符串值。
  4.1.6   MIN()函数
  SELECT MIN(f_price)  AS min_price FROM fruits;
  SELECT s_id ,MIN(f_price)   AS min_price
  FROM fruits
  GROUP BY s_id;
  GROUP BY 关键字 根据 s_id 字段对记录进行分组,然后计算出每个分组中的最小值。
  5.1.1  连接是数据库模型的主要特点。主要包含内连接,外连接等。
  5.1.2 内连接查询
  使用标胶运算符进行表间某列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新记录。
  SELECT suppliers.s_id, s_name,f_name, f_price
  FROM fruits ,suppliers
  WHERE  fruits.s_id =suppliers.s_id;
  SELECT后面指定的列分别属于两个不同的表。 WHERE 子句作为过滤条件,指明只有两个表中的s_id字段值相等的时候才符合连接查询的条件。
  SELECT suppliers.s_id,s_name, f_name, f_price
  FROM fruits INNER JOIN suppliers
  ON fruits.s_id = suppliers.s_id;
  INNER JOIN 是标准规范
  5.1.3 在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接查询。自连接查询是一种特殊的内 连接,它是指相互连接的表在物理上为同一张表,但在逻辑上分为两张表。
  SEELCT f1.f_id ,f1.f_name
  FROM fruits AS f1 , fruits AS f2
  WHERE f1.s_id = f2.s_id AND f2.f_id = 'a1';


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-616004-1-1.html 上篇帖子: MySQL阶段二——sql语句基础(1) 下篇帖子: pacemaker+mysql+drbd-12764272
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表