SQL牛客网刷题知识所得

select * from 表名

select 列名 from 表名

select 列名1,列名2 from 表名 limit 2(只取两行数据)

select 列名1 as 列名111 from 表名 limit 2(取这列数据的前两个数据,把列名1改成列名111)

如果需要筛选出去重数据,那么就用group by

如果要按照哪一列数据排序,就用order by

如果先按照a列数据排序,再按照b列数据排序,那就order by a,b

升序asc降序desc

--**--

如果说想要查到一个列的数据,里面排倒数第三的,那就用 select * from datatable where column1=(select distinct column1 from datatable order by column1 desc limit 1 offset 2) ;

这括号里面的就是查到了这个倒数第三的数据,外面就是去显示这个列的数据等于这个查到的数据,然后显示这一行的所有数据。distinct是去重,返回值是唯一的。

如果说我们有两张表,我们要显示的内容是两张表中一些列,那么我们用right join的话,就是

比如select 表1.列1,表1.列3,表2.列2 from 表1 right join 表2 on 表2.列3=表1.列3 order by 表1.列1

这个意思就是我最终显示的是 表1.列1,表1.列3,表2.列2 ,是从一张左边是表1,右边是表2 的连接表,这个表会返回左表的所有行,以及右表中在on这里匹配上的行

也就是 表2.列3=表1.列3 ,然后是按照表1的列1来排的

--**--

左连接和右连接(left join right join都是外连接,对于需要匹配的数据所返回的行,都会显示,没匹配上的就显示null,但是内连接就不显示没匹配上的)

select emp_no,count(emp_no) as record_count from salaries group by emp_no having count(emp_no)>15;
这个意思是从salaries表中选择员工编号,对出现员工编号的次数进行计数,再按照emp_no分组,输出emp_no 计数大于15的数据
如果我们想反向操作显示不在表2的列a的数据,那么我们写完什么left right join后匹配完on后,我们写一个where 小表.列a is null
--**--
比如说我们现在有两张表,我们表1是员工的编号,员工的部门编号。表2是部门编号,部门经理的员工编号。
我们想输出一个是员工号,一个是员工对应的经理的员工号。如果这个员工就是经理,就不显示。不显示没匹配上的,我们用内连接。
那我们先
select 表1的员工号,表2的员工号
from 表1 inner join 表2 
on 表1.部门号=表2.部门号  #这里的意思是选了这两列员工号,其中两行数据的部门号对的上的,他们这两行的员工号是要的,第一个员工号是员工,第二个是经理的
where 表1.员工号!=表2.员工号;#这里面的数据,部门号对上,员工就是经理,那就不显示。
--**--
 select count(columnname) as columnname,
round(avg(columnname),1) as columnname
from tablename;
#这里的round函数是保留了1位小数,别的不多说。
--**--
 
posted @ 2024-02-29 01:00  静听微风tom  阅读(1)  评论(0编辑  收藏  举报