MYSQL基础操作 查询部分

参考的还是:b站戴戴戴师兄

【课程2.0】SQL从入门到实战|云端数据库搭建|Excel&Tableau连接数据库_哔哩哔哩_bilibili

里面的代码都可以运行,用的是这个线上数据库,直接在里面敲敲就能显示结果:

SELECT from WORLD Tutorial - SQLZOO

1、SELECT& FROM

  • SELECT name AS 姓名, gender AS 性别, class FROM student;

        As:取别名

        输出表的顺序按照你SELECT的名称先后顺序

  • SELECT * FROM student;
  • SELECT DISTINCT gender FROM student;

        distinct让输出的字符不重复,最后显示的得到去重的数据

        SELECT DISTINCT gender, class FROM student;这种有两个的就是只有当两个字段的值都相同才算重复,并且distinct必须放在所有字段的前面

  • SELECT name, gdp, population, gdp/population 人均gdp FROM world;

        可以简单计算(加减乘除,函数也可以)形成新字段,然后将显示名称放后面,这个只适用于单行内的操作,无法行与行操作,且必须为数值型

2、WHERE

  • SELECT name, gdp/population 人均gdp FROM world WHERE population>=200000000;

        And or则是连接几个判断语句的,and优先级大于or,当然一般最好用()来分隔开方便看SELECT name, area FROM world WHERE (name LIKE '%a%a%a%' AND area > 6000000) OR (population > 1300000000 AND area>5000000);

  • ·  Between and 要从小到大,并且是闭区间,要是想去除边界,需要用到and !=

        Null在存储的时候比较的特殊,在数据库中<null>即为空,而在excel中null就是字符了,用=’null’  而为空是 is null

  • SELECT name, population FROM world WHERE name in ('Germany','Sweden','Norway');

        查找时只能在in中出现的,当实际表格中没有时,则不显示。Not in则是除去那些的()

  • 模糊查询LIKE  SELECT name FROM world WHERE name LIKE 'C%ia';

        LIKE+进行数据过滤常用的通配符有%和_,%用来匹配多个字符可以是零个、一个也可以是多个字符,_仅能用来匹配单个字符

3、order by

  • SELECT winner, yr, subject FROM nobel WHERE winner like 'Sir%' ORDER BY yr DESC, winner ASC;

        asc指定该字段升序排序,desc为降序排序,升序默认不写,order by 可以对多个字段按照主字段和次字段排序,每个字段都可以指定升序还是降序排序

  • SELECT winner, subject FROM nobel WHERE yr=1984 ORDER BY subject in ('chemistry','Physics'), subject, winner;

        此处就是判断,要是为化学和物理就是1,其他为0,1要比0放在后面一点(因为默认升序)

4、limit

  • SELECT name FROM world ORDER BY area DESC LIMIT 3;    

        Limit n返回前n条数据

        通过排序+限制几个,就可以达到取前几的作用(这里就是第1到第3)

  • SELECT name FROM world ORDER BY area DESC LIMIT 3,4; 

        limit x,n返回从x+1个到x+n个数据(这里就是第4到第7行),小心n是位移量

5、聚合函数&group by

  • SELECT SUM(population) 人口总数 FROM world WHERE continent='Africa';

        聚合函数不适配运算符*,并且有空值时会忽略计算。并且select存在聚合函数时,没有group by是不允许select中出现不含有聚合函数的字段,很神奇。

  • SELECT count(*) FROM world;

         计算表的总行数,对于这种count(*)是最快的,而count某个字段那就不快了,且count(字段)时,空值的行是不计数的

  • SELECT continent FROM world GROUP BY continent;

        每个continent只会展示一次,与distinct结果一样,但是原理不同

  • SELECT continent,count(name) 个数 FROM world GROUP BY continent;

        GROUP BY相当于重新建立了一个通过group by后面不同指标的新表和新划分,然后select就都需要在新划分进行操作

  • SELECT yr, subject, count(winner) 人数 FROM nobel WHERE yr BETWEEN 2013 AND 2015 GROUP BY yr,subject ORDER BY yr DESC,人数 DESC;这个组合挺有意思的,康康

        Group by后面又多个字段,是依次根据字段进行分区,顺序会影响结果?(存疑)

6、having

  • SELECT continent,sum(population) 总人口 FROM world GROUP BY continent having 总人口 >= 100000000;

        having子句不能脱离group by子句单独使用,having子句本质上是对group by分组的筛选。

        having的表达式和where的表达式基本相同,但是having的表达式中可以使用聚合函数,where的表达式中不可以,因为where是对原表的行数据筛选,having是对group by分组后的数据筛选。这句就不能用WHERE

  • SELECT continent,AVG(gdp) 人均gdp,sum(population) 总人口 FROM world WHERE gdp>20000000000 AND population>60000000 OR gdp<8000000000 AND capital LIKE '%a%a%a%' GROUP BY continent having 总人口 >= 300000000 ORDER BY count(name) DESC LIMIT 1;

7、常见函数

  • SELECT recovered 累计治愈人数, CASE WHEN recovered=1 THEN 'one' WHEN recovered>1 THEN 'more' ELSE '0' END FROM covid WHERE recovered>0;

        这个输出结果第二行命名很奇怪

  • SELECT whn 更新时间,YEAR(whn) 年, MONTH(whn) 月, DAY(whn) 日 FROM covid WHERE recovered>0
  • SELECT whn 更新时间, date_add(whn,interval 2 day) 加两天 FROM covid WHERE recovered>0;
  • SELECT confirmed,deaths,recovered,recovered/confirmed,concat(round((recovered/confirmed)*100,2),'%') 治愈率 FROM covid WHERE recovered/confirmed>0.3;

        可以用这种方法去表达百分数

  • SELECT DISTINCT name,replace(name,'a','替换') 替换 FROM covid;

  • SELECT DISTINCT name,substring(name,2,3),substring(name,2) FROM covid WHERE recovered/confirmed>0.3;

基础综合:

  • SELECT name, capital FROM world WHERE LEFT(name,1)=LEFT(capital,1) AND name !=capital;
  • SELECT name, capital FROM world WHERE capital LIKE CONCAT('%',name,'%') AND name !=capital;

特别的:

1、关键字实际的运行顺序:

(4条消息) SQL各关键字执行顺序(MySQL)_tterminator的博客-CSDN博客_mysql关键字执行顺序

FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT limit最后

2、GROUP BY后面跟多个字段对结果的影响,我认为最后结果没有影响,所有的分组结果与顺序无关,只有这两个字段对应的都是相同才分为一组

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值