万的英文
sqldistinct多个字段_SQL基础⼁检索数据
人事厅
SELECT 查询的基础语法
SELECT可以从⼀个表或多个表中进⾏数据查询。
⼀个数据表是由列(字段名)和⾏(数据⾏)组成的,要返回满⾜条件的数据⾏,就需要在SELECT后⾯加上想要查询的列名,可以是⼀列,也可以是多个列。
实例
- 王者荣耀英雄数据表,⼀共63个英雄,23个属性值(不包含英雄名)。
数据表中24个字段(除id)
⽰例
- 检索数据表中都有哪些英雄
SQL:SELECT name FROM heros
运⾏结果(69条记录)巴黎圣母院音乐剧
宋元战争
对多个列进⾏检索,在列名之间⽤逗号(,)分割。
⽰例
- 检索有哪些英雄,他们的最⼤⽣命、最⼤法⼒、最⼤物攻和最⼤物防分别是多少
SQL:SELECT name, hp_max, mp_max, attack_max, defen_max FROM heros
运⾏结果(69条记录)
查询所有字段名称
SQL:SELECT * FROM heros
运⾏结果(69条记录)movie怎么读
注:⽣产环境时尽量避免使⽤SELECT *
起别名
使⽤SELECT查询的时候,可以给列名起别名
⽰例
- 在检索时,给英雄名、最⼤声明、最⼤法⼒、最⼤物攻和最⼤物防等取别名
SQL:SELECT name AS n, hp_max AS hm, mp_max AS mm, attack_max AS am, defen_max AS dm FROM heros
SELECT查询还可以对常数进⾏查询
⽰例
- 对heros数据表中英雄名进⾏拆线呢,同时增加⼀列字段platform,这个字段固定值为王者荣耀
SQL:SELECT '王者荣耀' as platform, name FROM heros
运⾏结果(69条记录)
相当虚构了⼀个platform字段,并且把它设置为固定值“王者荣耀”
注:如果常数是个字符串,需要使⽤单引号。单引号说明引号中的字符串是个常数,否则SQL会把王者荣耀当成列名进⾏查询。去除重复⾏
使⽤关键字DISTINCT去重
⽰例
- 查询heros表中攻击范围的取值有哪些
SQL:SELECT DISTINCT attack_range FROM heros
运⾏结果(2条)
带上英雄的名称
SQL:SELECT DISTINCT attack_range, name FROM heros
运⾏结果(69条记录)
注意:
1、DISTINCT需要放到所有列名的前⾯,否则会报错
2、DISTINCT其实是对后⾯所有列名的组合进⾏去重。
如果排序检索数据
检索数据,需要按照某种顺序进⾏结果的返回,就需要使⽤ORDER BY⼦句
ORDER BY知识点:
1、排序的列名:ORDER BY后⾯有⼀个或多个列名,如果是多个列名进⾏排序,会按照后⾯第⼀个列先进⾏排序,当第⼀列的值相同的时候,在按照第⼆列进⾏排序,⼀次类推。
2、排序的顺序:ORDER BY后⾯可以注明排序顺序,ASC代表递增排序,DESC代表递减排序。默认ASC递增排序。
3、⾮选择列排序:ORDER BY可以使⽤⾮选择列进⾏排序,即使在SELECT后⾯没有这个列名,也可以放到ORDER BY后⾯进⾏排序
台湾十大名茶4、ORDER BY的位置:ORDER BY通常位于SELECT语句的最后⼀条⼦句,否则会报错
⽰例
- 查询英雄名称及最⼤⽣命值,按照最⼤⽣命值从⾼到低的⽅式进⾏排序
SQL:SELECT name, hp_max FROM heros ORDER BY hp_max DESC
运⾏结果(69条记录)
显⽰英雄名称及最⼤⽣命值,按照第⼀排序最⼤法⼒从低到⾼,当最⼤法⼒值相等时按照第⼆排序进⾏,即最⼤⽣命值从⾼到低的⽅式进⾏排序
SQL:SELECT name, hp_max FROM heros ORDER BY mp_max, hp_max DESC
运⾏结果(69条记录)
约束返回结果的数量
约束返回结果的数量,使⽤LIMIT关键字
⽰例
- 返回英雄名称及最⼤⽣命值,按照最⼤⽣命值从⾼到低排序,返回5条记录。
SQL:SELECT name, hp_max FROM heros ORDER BY hp_max DESC LIMIT 5
运⾏结果(5条记录)
注:约束返回结果的数量,在不同的DBMS中使⽤的关键字不同。MySQL、postgreSQL、SQLite中使⽤LIMIT关键字。
SELECT 的执⾏顺序
SELECT查询时的两个顺序
1、关键字的顺序时不能颠倒的
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
2、SELECT语句的执⾏顺序(MySQL和Oracle中,顺序基本相同)
FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT
⽰例
SELECT DISTINCT player_id, player_name, count(*) as num #顺序5FROM player JOIN team am_id = am_id #顺序1WHERE height > 1.80 #顺SELECT语句执⾏这些步骤时,都会产⽣⼀个虚拟表,然后将这个虚拟表传⼊下⼀个步骤作为输出。这些步骤隐含在SQL的执⾏过程中。
SQL的执⾏原理
1、⾸先先通过CROSS JOIN求笛卡尔积,相当于得到虚拟表vt1-1
2、通过ON进⾏筛选,在虚拟表vt1-1的基础上进⾏排序,得到虚拟表vt1-2
3、添加外部⾏。如果使⽤的是左连接、右连接或者全连接,就会设计到外部⾏,也就是在虚拟表vt1-2的基础上增加外部⾏,得到虚拟表
雪乡国家森林公园
vt1-3
如果操作的是两张以上的表,会重复上⾯的步骤,直到所有表都被处理完为⽌。
当拿到了数据表的原始数据,也就是最终的虚拟表vt1,就可以在此基础上在进⾏WHERE阶段。
然后进⼊第三步和第四步,也就是GROUP和HAVING阶段。实际上是在虚拟表vt2的基础上进⾏分组和分组过滤,得到中间的虚拟表vt3和
vt4.
当完成条件筛选部分之后,就可以筛选表中提取的字段,进⼊到SELECT和DISTINCT阶段。
SELECT阶段会提取想要的字段,然后再DISTINCT阶段过滤掉重复的⾏,分别得到中间的虚拟表vt5-1和vt5-2.
之后就可以按照指定的字段进⾏排序,就是ORDER BY阶段,得到虚拟表vt6
最后再vt6的基础上,取出指定⾏的记录,也就是LIMIT阶段,得到最终的结果,对应的就是虚拟表vt7。自然的反义词
总结