写在前面:
SQL不难,学习SQL的四字箴言是“孰能生巧”,两周的时间把《SQL基础教程》学习完了,一边学习一边跟着做思维导图,方便日后复习关键点,在这篇文章中我不仅会把思维导图放上来,还会不断更新一些琐碎的,重要但是容易忘记的概念和代码。
思维导图
要点一:有关创建表的一些细节
CREATE TABLE Product(
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(100) NOTNULL,
sale-price INT,
purchase_price INT,
regist_date DATE,
PRIAMRY KEY (product_id)
);
- 命名规则:字母,数字和下划线,不能有空格
- 四种基本数据类型:INT 整形:用于存储整数,可不设置长度
CHAR 字符型:用于存储字符串,字符串以定长字符串形式保存,
要设置长度, CHAR(10)表示最多10个字符
VARCHAR 字符串类型:用于存储字符串,字符串以可变长形式保存,
要设置长度,VARCHER(10)表示最多10个字符
- 约束:1.NOT NULL约束
2.主键约束:用于确定唯一的一行数据,可组合。PRIMARY KEY(product_id)
关于varchar的到底能存多少个汉字和英文,以及各种编码的解释,这篇文章给了详细的解释:https://ruby-china.org/topics/24920
关于char、varchar和text的区别:https://blog.csdn.net/brycegao321/article/details/78038272
关于varchar(n)的最大空间是65535的解释:数据库一个字段最多可存16位二进制即两个字节,转化为十进制即65535.(不能用64*1024计算)。
要点二:(group)having函数和where的区别
- 使用group by函数时,后面的条件元素是select中出现的,而不能按照其他的七七八八的元素来分类
- where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且后面不能接聚合函数,where后面之所以不能使用聚合函数是因为where的执行顺序在聚合函数之前
- having是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即结果返回之后起作用,且后面可以接聚合函数
要点三:联结Join的含义
- 基于ANSI标准的SQL列出了五种JOIN方式:内连接(INNER),全外连接(FULL OUTER), 左外连接(LEFT OUTER), 右外连接(RIGHT OUTER)和交叉连接(CROSS)。在特定情况下,一张表可以和自身进行连接,成为自连接(self-join).
- 连接产生的结果集,可以定义为首先对两张表做笛卡尔积(交叉连接)--将A中的每一行和B中的每一行组合,然后返回满足连接谓词的记录。
- 语法:JOIN ON接在from后面,SELECT a.s_id
FROM (SELECT s_id,s_score FROM score WHERE c_id='01') AS a
JOIN (SELECT s_id,s_score FROM score WHERE c_id='02') AS b
ON a.s_id=b.s_id
WHERE a.s_score>b.s_score;
要点四:为什么不加group by的时候,结果只显示一行呢?
- 原因是:不加group by的时候,没有分组依据,每次sum操作是针对已有的所有的分数进行的,因此每次sum后只有一个单一结果,即只会显示一行数据。
要点五:错误Every derived table must have its own alias(每个派生表都需要有它自己的别名)
- from后面括起来的sql的执行结果是一张派生表,要留下姓名!
要点六:一个栗子搞定update的用法
要点七:sql如何求百分数?
要点八:遇到复杂的题目,先分别求出结果,在用join连接起来
要点九:单引号的使用' '
- 加单引号--表示一个名字;不加单引号--表示一个变量(一张表,一个视图什么的)?
- 别表名不加单引号,加了会报错
- 给变量名命名,可以加也可以不加
要点十:怎么计算名次?
要点十一:limit的妙用~
要点十二:delete和drop的区别
要点十三:insert的注意事项