之所以写这篇文章呢,是因为看的过程就是记忆——遗忘——记忆——遗忘,所以把看书过程中我觉得我自己没有掌握的地方记下来,之后可以借助这篇文章再回忆一下。看完书之后打算去SQLZOO实战练习,会再写一篇练习过程中的难题有哪些。

这次选择的参考书是MICK的《SQL基础教程》,没有这本书的电子版的,可以去猴子的微信公众号搜一下~

刚开始接触SQL语言,刚开始入门确实坑很多,我安装了一个Navicat ,界面更友好一些,适合入门。!!!!提醒大家,标点符号一定要在英文状态下输入!

1.下载并安装MySQL

2.安装Navicat(可视化MySQL数据管理工具)

3.什么是SQL语言?

访问数据库需要以某种数据库系统能够理解的方式去访问,SQL(structure query language)结构化查询语言,是每一个数据库都通用的语言。

4.练习操作(基础干货)

下面的内容是该书的第二、三、五、六、七章。大家每章看完了我觉得可以自己做做习题,就是有时候你以为你懂了,但是做题的时候还是会发现一些忽略的问题。

在这里再补充一句,SQL真的要多练多练啊!!!!

第二章 查询基础

2-1 SELECT语句基础引用中文的时候要用双引号“”;有时候真的习惯性的用单引号

”_”可以代替空白符号

关于常数的查询:

SELECT常用含义(*代表全部,订单为表名,count为统计数值)

#查询全表

SELECT * FROM 订单

#查询其中的一部分数据列

SELECT 订单ID,销售额,利润 FROM 订单

#查询前n行

SELECT * FROM 订单 LIMIT 10

#查询当前表总共有多少行

SELECT COUNT(*) FROM 订单

关键词DISTANCE用于返回唯一不同的值。(在SELECT语句中使用DISTINCT可以删除重复行。)

语法:SELECT DISTANCE 列名称 FROM 表名称

举例:

#查询独立订单号码

SELECT DISTINCT(订单ID) FROM 订单

#有多少个独立订单号

SELECT COUNT(DISTINCT(订单ID)) FROM 订单

2-2 算术运算符、比较运算符不等于符号是:<>

我已经不止一次用的是!=了

2-3 逻辑运算符

#查询销售额大于10000并且没有亏损的订单

SELECT * FROM 订单 WHERE 销售额>10000 AND 利润>0

#这样的订单有多少?

SELECT COUNT(*) FROM 订单 WHERE 销售额>10000 AND 利润>0

注释:当条件值为数字时不需要引号。但是条件值为文本时需要引号。

SELECT *FROM 订单 WHERE (城市 = '上海' AND 销售额>10000)OR (城市 ='北京' AND 销售额>10000)

上面代码的意思是:

查找出上海市销售额大于10000或者是北京市销售额大于10000的,当有括号时,会优先对括号内的的进行判断或者当有多个括号时先对最里面的括号进行判断。

SELECT * FROM 订单 WHERE 城市 IN ( '北京','上海','南京')

当我们要查询多个条件,比如上海北京南京三个城市,可以使用in,避免连续使用and比较麻烦。

SELECT * FROM 订单 where 邮寄方式 LIKE '%标准%'

上述语句的意思是在邮寄方式这一列查找包含“标准”字段的数据,%代表的是通配符,含义是无所谓“标准”前面和后面是什么意思。如果写的是“标准%”代表字段必须是以标准开始无所谓后面是什么。

总结:and会优先于or,所以要善用括号(),可以控制优先顺序

遇到NULL的时候,会出现第三种逻辑“不确定”,既不为真,也不为假。

补充:where子句中不能有聚合函数,所以如果遇到某些数需要和平均数做对比的话,可以采用子查询。

第三章 聚合与排序

这一章涉及很多十分重要的函数,这些函数看似都很简单,但其实也是我掌握最差的点。

3-1 聚合查询

涉及聚合函数:count,sum,avg,min,maxcount函数

A. count函数对NULL的处理

count(*)可以计算NULL,count(列名)不会计算NULL;

B. count函数和distinct的用法

之前写SQL的时候我有点搞不清这两个的顺序,然后书里写道,是先要distinct筛选出不重复的数据,再统计数目,所以distinct是要作为参数,放在count函数里面的。

如:#有多少个独立订单号

SELECT COUNT(DISTINCT(订单ID)) FROM 订单

2.avg函数

A.avg函数会自动略过NULL值

所以用其计算平均数的时候,分母的数据会自动提出NULL值。

3-2 分组group by

#不同省份的独立订单数

SELECT 省,COUNT(DISTINCT(订单ID)) 订单数 FROM 订单 GROUP BY 省

#不同省、不同城市独立订单数

SELECT 省,城市,COUNT(DISTINCT(订单ID)) 订单数 FROM 订单 GROUP BY 省,城市

#在这里要注意使用GRUOP BY 语句时,要将GROUP BY 后面的元素放在SELECT后面的第一个

如果我想知道每个省一共有多少订单,其中有多少订单类别是家具类,占比是多少,可以利用IF函数来计算还有,在count中0也会计算,所以要把if函数的第三个函数写成null,代表类别不是家具的就排除在外。

SELECT 省,COUNT(订单ID),COUNT(IF (类别 LIKE'%家具%',订单ID,NULL)) FROM 订单 GROUP BY 省

第一列是省,第二列是订单数,第三列表示的类别是家具的订单数。

Having 用于在GROUP BY 语句的条件下继续添加条件,注意不能使用WHERE语句,WHERE语句和GROUP BY 不能共存。

#每订单总利润

SELECT 订单ID,地区,省,城市,SUM(利润) 利润 FROM 订单 GROUP BY 订单ID HAVING 地区='华东

总结:

A.group by遇到NULL的时候,会将其归为单独的一组

B.使用group by子句的时候,select子句中不能出现除本身、聚合键之外的列名,比如

这样的命令会报错,因为select是最后执行的命令,后面的FROM和group by都没有涉及到product_name这个列,所以select也筛选不出来相关的数据。所以使用group by的时候select后面的内容要保证要么是聚合函数,要么是group by 的对象。但order by可以。

C.group by不能写列的别名,order by可以。

D.group by要限制条件,使用HAVING,尤其是需要使用聚合函数的时候。

3-4 排序

1.order by

A.位置处于SELECT句子的末尾

B.碰到有NULL值的列时,会把NULL显示在开头或者末尾汇总显示。

C.与group by相比,order by在使用上几乎没有什么限制。

第五章 视图、子查询、关联子查询

5-1 视图

1. 视图与表的区别,表存储的是实实在在的数据,而视图存储的是SELECT语句,最后出现的表是临时表,我的理解是,视图就是一个已经经过一次查询的表,视图中的数据会根据原表的变化而自动更新。

2. 创建视图

3. 使用视图

相当于是把以前from后面表的位置换成了视图

4. 视图的限制

A.定义视图时不能使用order by子句

B.视图是由原表派生的,所以不能随意更新视图

5. 删除视图

DROP VIEW Productsum

5-2 子查询

子查询我觉得是比较重要的一个东西,特别是面试考SQL的时候基本都会用到, 其实有时候写复杂的子查询语句的时候就是脑袋里创建了几个视图。

#筛选出退货的订单ID

SELECT 订单ID FROM 退货 WHERE 退回='是'

#找出这些订单的详情

SELECT * FROM 订单 WHERE 订单ID IN (SELECT 订单ID FROM 退货 WHERE 退回='是')SELECT语句优先执行子查询语句;尽量为子查询命名。

标量子查询

必须且只能返回1行1列的结果,所以可以用在“=”以及“>”,“

5-3 关联子查询

子查询内部设定的名称只能在子查询内部使用。

第六章 函数、谓词、CASE表达式

6-1 函数绝大多数的函数对于NULL返回的都是NULL;算术函数和字符串函数我觉得跟EXCEL里面大致差不多,可以联合起来记忆

日期函数

当前日期: current_date

当前时间: current_time

当前日期和时间: current_timestamp

截取日期: extract(日期元素 from 日期)

3. 转换函数

数据类型的转换:CAST(转换前的值 AS 想要转换的数据类型)

值的转换:COALESCE函数

coalesce(a,b,c); 如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。相比于CASE WHEN要简单得多。

6-2 谓词

1. LIKE 模糊匹配

其中%可以代表任意个字符,_只能代表一个字符

2. between会包含左右两个临界值

3. IN和NOT IN不能取出NULL

4. 阅读过程中我跳过了exist的部分,之前我练习的时候没怎么接触过,所以下次如果遇到了再补一补CASE表达式

CASE表达式是在多个分类的情况下使用,分为搜索CASE表达式和简单CASE表达式,常用搜索CASE表达式

基本语法:

逻辑是:如果表达式里的结果为真,那么就返回THEN子句中的表达式,CASE表达式的执行就到此为止,如果结果不为真,就跳转到下一个WHEN子句中求值之中。

3 .使用案例

4.CASE里面还有CASE

SQLZOO第三关的13题

CASE WHEN continent IN ('Eurasia', 'Turkey')

THEN 'Europe/Asia'

WHEN continent = 'Oceania'

THEN 'Australasia'

WHEN continent = 'Caribbean'

THEN

CASE

WHEN name LIKE 'B%'

THEN 'North America'

ELSE 'South America'

END

ELSE continent

END

第七章 集合运算

1.表连接

(1)简单的连接查询

SELECT * FROM 订单 A JOIN 退货 B ON A.订单ID = B.订单ID

(2)内连接

SELECT * FROM 订单 A INNER JOIN 退货 B ON A.订单ID = B.订单ID

(3)左连接

SELECT * FROM 订单 A LEFT JOIN 退货 B ON A.订单ID = B.订单ID

8.修改数据表中的数据

(1)alter语句

#添加数据列 ,将成本类型设置为double型,长度为10,小数点数为2

ALTER TABLE 订单 ADD COLUMN 成本 DOUBLE(10,2)

#删除数据列

ALTER TABLE 订单 DROP COLUMN 客户名称

(2)updata 语句

UPDATE 订单 SET 成本=销售额-利润

(3)delete语句

#删除

DELETE FROM 订单 WHERE 邮寄方式='标准级'

最后,建议大家进行数据操作时先复制一下表,一旦操作失误数据不是很容易找回。

mysql语言中有什么运算_SQL知识点,新手感悟相关推荐

  1. mysql语言基础实验报告_sql语言实验报告

    展开全部 数据库大型作业 --药32313133353236313431303231363533e58685e5aeb931333238653962品进销存系统的数据库设计 一.题目背景 随着我国市场 ...

  2. C语言中的移位运算乘法,C语言中 移位操作运算

    移位规律: 左移时总是移位和补零.右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位后补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移.(其实跟扩展逻辑一样 ...

  3. c语言中有bool变量吗,C语言中有bool类型吗?

    之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C ...

  4. C语言无符号数运算问题

    C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 ...

  5. mysql 语言 总结

    mysql 语言 总结 数据库 显示数据库 show databases; 创建数据库 create database database_name(数据库名称); 删除数据库 drop databas ...

  6. c语言字符怎么运算,c语言运算符号(c语言如何输入运算符号)

    C语言运算符都有那些!各个运算符表示什么,怎么排列麻烦各位老师下,谢. 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余( ...

  7. c语言指针一览第一部分(新手向)

    c语言指针一览第一部分(新手向) um-最近学到了指针,又恰逢寒假集训队选拔,把指针复习一下, 函数指针最后在说吧rua. (编者注:以下的p是指明了指向谁的) 一.一维数组与指针: 首先要知道a[1 ...

  8. php简单加减乘除,C++_C 语言简单加减乘除运算,C语言也可以进行加减乘除运算 - phpStudy...

    C 语言简单加减乘除运算 C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表. 加法 减法 乘法 除法 求余数 数学 + - × ÷ 无 C语言 + - * / % 加号.减号与数学 ...

  9. C语言中有符号数和无符号数的问题

    C语言中有符号数和无符号数的问题 项目说明     考虑下列代码, 这段代码试图计算数组a中所有元素的和, 其中元素的数量由参数length给出: /* WARNING: This is buggy ...

最新文章

  1. 那些jdk中坑你没商量的方法
  2. Facebook 架构学习
  3. 十一级指针实现百万qq号的增删查改以及排序写入
  4. 论文浅尝 | 用增强学习进行推理:问答与知识库完善(KBC)
  5. 重磅!大数据知识总结和调参技巧开放下载了
  6. 第一次作业 四班05
  7. 百度之星2018资格赛t6三原色图(MST minimum spanning tree)
  8. 【Shiro第二篇】SpringBoot + Shiro实现用户身份认证功能
  9. conda 安装本地包_export包本地安装以及R包被CRAN移除后如何继续安装
  10. 1. 走进Java语言 —— Java SE
  11. 编译原理 自底向上语法分析
  12. 台达DVP-ES3 ModbusTCP通信案例
  13. 阿里巴巴产品实习生9天
  14. mysql新建用户并授权管理员_MySQL数据库新建用户与授权方法
  15. java毕业设计数码产品导购网站mybatis+源码+调试部署+系统+数据库+lw
  16. 美团App页面视图可测性改造实践
  17. 对待Petya勒索病毒的解决办法
  18. 没有你 万般精彩皆枉然
  19. 如何制作一个在线订酒店的小程序
  20. android sdk安装配置win10环境

热门文章

  1. 处理Redis里的数据
  2. 微软认知服务开发实践(2) - 计算机视觉
  3. 多站点IIS的架设:主机头法
  4. 高二女生制作危险驾驶报警手机软件
  5. Python —— 字符串常用操作
  6. 【例题+习题】【数值计算方法复习】【湘潭大学】(五)
  7. IPC--进程间通信一(管道)
  8. 天池-新闻推荐-Baseline
  9. Spring集成单元测试
  10. F. 张胖胖玩多米诺骨牌 (南阳理工oj—21新生第二场招新赛)