数据库Select语句总结、连接查询及注意事项SQL 编程 —Select 详解
⼀般语句的书写顺序和执⾏顺序如下:
![]
0、关于分组函数
1.所有的分组函数都是对“某⼀组”数据操作的
2.分组函数⾃动忽略NULL
3.数据库表达式中如果有NULL参与运算,最后的结果只能是NULL
4.分组函数不能直接使⽤在where语句中
1、关于from:
from+表名这个没啥说的。
sql left join 多表连接
唯⼀值得⼀提的就是表名通常给他起个别名,这样⽅便表中数据的引⽤。
【例】:ame,d.dname from emp e,dept d;.
2、关于where
1.where⽤于对表中要显⽰的数据进⾏的的筛选
2.要注意的是:where后⾯不能够接分组函数。
原因:sql语句执⾏顺序是where->group by,⽽分组函数是对group by分组后的顺序进⾏求最⼤/最⼩值/…的。
3.模糊查询like:
% 表⽰任意多个字符
_ 表⽰任意⼀个字符
3、关于group by
1.按照某个字段或者某些字段将数据分组。
会将group by 后⾯的条件相同的分为⼀组。
【例】:select job from emp group by job;
作⽤:将所有员⼯的⼯作分组显⽰,即显⽰所有种类的⼯作。
(⾏数仍等于总⾏数,没有执⾏任何过滤操作,其实没什么太⼤的意义)。
然⽽,group by 除了这种简单的应⽤,我们常常将group by与分组函数连⽤⽐如:出每种⼯作中薪资最⾼的,出每个班的平均分数…
2.select后⾯的字段名只能接group by分组的字段或者分组函数,否则查询结果⽆意义。
3.可多个字段联合分组但尽量先⽤where过滤
**
3、分组having
1.只需要记住having是对group by 分组的结果过滤/显⽰限制,有group by 才能有having。
4、关于select
1.select 字段名 as xxx from…
2. 查询结果集的去重: select distinct job from emp;
5、关于order by
1.升序asc 可省略
2.降序desc
3. 按照⼯资降序排列,当⼯资相同的时候再按照名字的升序排序:
select name,sal from emp order by sal desc , name asc;
7、关于limit
2.limit startIndex, length
第⼀个数是起始⾏,注意⾏数从0开始。第⼆个数是长度
总的来说
sql语句的执⾏顺序就是:
a.⾸先,你总要知道是对哪张表进⾏查询(from),不然数据都不知道从哪来的,何来后续操作。(from)
b.然后,可能整张表有很多的信息,⽽你关⼼的只是其中⼀部分,因此要先把你需要的数据筛选出来(where)
c.对于筛选出的数据,你可以进⾏按组别来操作,⽐如你想知道每个部门的平均⼯资是多少。(group by)
d.对于分组后的数据,你可能想看到符合某标准⼀部分,这样就需要having再⼀次对分组的结果进⾏过滤。(having)
e.然后,就可以按照你的要求查询出最后结果了。(select)
f.为了查询得到的数据更只管的显⽰,对结果进⾏升序/降序(order by)/只显⽰其中的⼏⾏(limit)
连接查询
1.笛卡尔积现象: 如果两张表连接查询没有任何限制,最终的条数是两张表条数的乘积。这也是连接查询本质。(可类⽐双层for循环)
2.如何解决以上为题呢?------->对查询的结果进⾏过滤和限制。
但是!不会减少匹配次数!!只不过显⽰的是有效记录。
3.内连接 包括等值连接 ⾮等值连接 和⾃连接
两个表的字段名⼀样且不区分是否有主表。
还有就是只会显⽰A,B两表都不为空的记录。
4.外连接包括左外连接和右外链接
外连接就是在内连接的基础上会显⽰主表不为空的记录
怎么区分主表呢?
简单来说可以总结为:左上右下
即,如果是 left join 就是left join前⾯(上⾯)的 表为主表若是left join ,则是left join后⾯(下⾯)的表为主表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。