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

[经验分享] SQL语句小总结

[复制链接]

尚未签到

发表于 2018-10-21 06:21:06 | 显示全部楼层 |阅读模式
  无论是面试过程中,还是未来工作中,SQL都是一定会考到和用到的。所以,在此对之前看过的一些SQL知识点进行一下总结和记录,算是起到一个笔记本的作用。没有深入学习过SQL的和对SQL印象不太深的朋友可以看一下,起到一个快速使用SQL语句的作用(针对有一点SQL知识的人的)。
  首先,SQL最基础的就是语句的使用,SQL根据功能分为查询语句、插入语句、修改语句和删除语句,这里用到最多的便是查询语句,首先便总结一下查询语句的用法:
  1.简单查询
  (1).select name from table;
  意思是在table这张表里查询一个名为name的列,它会将表中name下的所有数据查询出来。

  (2).select>  表示在table中查询出id和name列下的所有数据,两个被查询的列名之间用逗号分隔。
  (3).select * from table;
  *号表示所有,意思是查询出table表中的所有内容;
  注:这样查询出的语句没有过滤也没有排序,是最简单的查询结果;SQL中不区分大小写;且SQL语句可以分成多行写,很多人认为这样更方便阅读和调试,结尾要用“;”号。
  2.不同值查询
  一个表中存储的数据肯定不会全都不同,查询出来的很多也都是相同的值,如果你不想显示重复值的话,可以在查询时使用“DISTINCT”关键字,作用是去重;
  例:select distinct name from table;
  意思查询table表中的name一列,并把不出现重复后的结果显示出来,比如一开始的查询结果是 x,x,x,y,y,z,z,z,z,去重之后的结果就是x,y,z。
  3.限制结果查询
  一般来说限制结果查询会在分页当中用到,因为限制结果查询的用处就是,让查询结果按你想要的行数显示出来,只简单介绍Oracle和MySQL的语句:
  (1).select name from table where rownum  意思就是查找table表中id和name两列的数据并按name的A-Z升序排列显示。

  select>  结果就是降序排列显示,需要在order by的属性后面加上关键字“desc”。
  5.过滤数据查询
  数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。想要使用不同的条件,就需要使用到“where”关键字,在“where”后面加各式的条件以达到目的。

  (1).select * from table where>  意思是查询出table中id列为1的这一行的所有数据。另外还有大于(>)、小于(  意思是查询出table表中id为1或者01 且价格大于等于10的数据的name和price;这里涉及到优先级,and的优先级要高于or,所以要加括号,括号的优先级更高,不然结果就只会显示价格高于10的情况。

  (4).select>  意思是查询table表中name以“f”开头的所有行的id和name数据。 这里用到了“like”关键字和通配符“%”,通配符可以表示其后的所有字符,若是“%f%”则代表name中包含“f”的意思。"f%y"代表“f”开头“y”结尾的意思。

  (5).select>  意思是查询table表中的id并升序排列且查询出的结果赋予一个新的列名为“idd”,可以用“as”关键字实现,表示另命名。
  6.聚集函数查询
  聚集函数分为Avg()、Max()、Min()、Sum()、Count()分别表示返回某列的平均值、返回某列的最大值、返回某列的最小值、返回某列的值之和、返回某列的行数。
  (1).select avg(price) as new_price from table;
  意思是返回table表中 价格属性的平均值并另命名为new_price。
  (2).select count(*) as new from table;
  意思是对table表中的行数进行统计,不管表中包含空值还是非空,而count(name),表示统计name列的行数,但是忽略了null值。其余三个函数用法相同,这里就不一一写明。
  7.分组数据查询
  使用分组可以将数据分为多个组,对每个组进行运算更方便。
  (1).select name, count(*) as num from table GROUP BY name;
  意思是对table中的name进行分组和计算,例如
  name         num
  A           3
  B           2
  C           4
  可以看到他对name为ABC的数据行进行了统计并分组。

  (2).select>  意思是对table中的id进行分组,并统计每组数,这里也用到了过滤数据,要求统计数目大于等于2,这里的关键字HAVING可以代替“where”的作用,但是平常应使用“where”,HAVING是结合Group By使用的。
  8.子查询
  可以把select的查询结果用于另一条select的where子句中,以实现一条语句直接完成多条件查询的功能。
  SELECT cust_id FROM table WHERE order_num IN (SELECT order_num FROM Order WHERE prod_id = '01’);
  可以拆分来看,先看括号里是查询order表中的order_num,条件是id为01;而括号外的意思是查询table中的id,条件是num为什么,这里num为括号里查询到的结果。用关键字“IN”来连接子句,执行了两个查询操作,同样可以在括号里再嵌套一个IN(),里面同样可以再添加查询语句。
  9.表连接
  SQL 最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用 SQL 的 SELECT 能执行的最重要的操作,很好地理解联结及其语法是学习 SQL 的极为重要的部分。
  SELECT vend_name, prod_name FROM Vendors, Products WHERE Vendors.vend_id = Products.vend_id;
  意思是查询Vendor和Product表中的两个name列,且两表的id相等。
  目前为止使用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内联结(inner join)。其实,可以对这种联结使用稍微不同的语法,明确指定联结的类型。另外还有左外连接等。
  当下,是我对于SQL查询语句的一个总结,并不是相当细致和深入,但也算是对查询语句的一个小的学习笔记,都是我一点一点打出来的,也算是原创吧,希望可以帮助到我自己和其他看到的人。另外插入语句和删除、更新语句之后有时间会再写一篇,2016年12月3日。


运维网声明 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-624206-1-1.html 上篇帖子: QT开发(四十八)——数据库SQL接口层 下篇帖子: pdo如何防止 sql注入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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