sql 数据库前两列值乘_SQL学习 - 重点整理及练习心得

这周开始进入SQL的学习,才发现SQL原来是这么好玩的东西啊,也没有编程语言这么复杂。

看完基本资料一定要上手实践,最重要的经验就是不管记的多好,上手了总会有各种错误。

数据库基本概念

列:字段

行:记录

关系数据库必须以行为单位进行数据读写

关键字是指那些含义或使用方法已事先定义好的英语单词,存在包含“对表进行查询”或者“参考这个表”等各种意义的关键字。

P26:SQL分三类:DDL-处理数据表、DML-处理记录、DCL- 确认或者取消对数据库中的数据进行的变更及设置权限

SQL以”;” 为结尾,不区分大小写,但插入的 数据区分大小写

在 SQL 语句中直接书写的字符串、日期或者数字等称为常数

字符串、日期用单引号(')括起来,数字不用

SQL 的单词需使用半角空格或换行符来分隔

导入SQL文件前加一句:DROP TABLE IF EXISTS `blalalala`;

只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称,且要英文开头,不能重名

P34:数据类型表示数据的种类,包括数字型、 字符型和日期型等。

P36:约束

实操时会忘记SQL语句的某些单词,有时会忘了需要选取指定SQL语句运行,有时乱加逗号,字符串忘了加单引号

设定汉语别名时需要使用双引号(")括起来。

1行注释: 书写在“--”之后,只能写在同一行
多行注释: 书写在“/*”和“*/”之间,可以跨多行

SQL语法

DDL

Create database DB;

Create table AAA (A CHAR(10) Not null, B Integer, C VARCHAR(128), Primary Key (A));

Drop table AAA;

Alter table AAA add/drop XXX;

INSERT INTO Product VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20');

DML

编写顺序:SELECT → FROM → WHERE → GROUP BY → HAVING →ORDER BY (永远最后)

运行顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

Select A, B, C From AAA;

Select * From AAA;

Select A as a1 From AAA; --设定汉语别名时需要使用双引号(")括起来

Select ‘A1’ as …, A, B, C from AAA; --可以把常数A1在结果中显示出来

Select Distinct A From AAA; --删除重复项,DISTINCT只能用在第一个列名之前

Select … from … where … ; --where后面加查询条件,=, <> (不等于), <=, >=, <, >, 也可以where not …, 来查询非…的数据

可在select时加算术运算符+ - * /

包含 NULL 的计算,结果肯定是 NULL

字符串搜索时,是把字符串按照字典排序后列出搜索的字符串前/后的数据

Null不能用比较查询,要用Is null / not null

And-并且,Or-或者,AND优先于OR,想要优先执行OR时可以使用括号把某段语句同时处理

P81 聚合函数

Count/sum/avg/… (Distinct …),聚合函数中用distinct可以删除重复值

P91 Group By

WHERE不能写聚合函数,要用HAVING。WHERE子句用来指定数据行的条件, HAVING子句用来指定分组的条件

有GROUP BY时,SELECT不能有多余的列

SELECT因为在最后运行,所以如果用了as, 在Group By里无法识别该别名

Order by … ,列名后可加ASC (升序) / DESC (降序), 不过升序可以省略。它可以使用不包含在select里的列

INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);

Insert into BBB (A, B, C, D)

Select A, SUM(B), AVG(C), D

Where …

From AAA

Group by …;

DELETE From AAA Where <条件> ;

Update AAA

Set 列名 = 新记录

Where <条件> ;

UPDATE Product
SET (A, B,C) = (a1, b1,c1) 或

SET A = a1, B = b1, C = c1
WHERE <条件> ;

事务:

Start transaction;

<操作语句>;

Commit / Rollback;

Part 5 视图:

CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……)

AS

<SELECT语句>

视图尽量不要引用其他视图,且不能用order by

DROP VIEW 视图名称(<视图列名1>, <视图列名2>, ……)

子查询 – 视图中select的嵌套

标量子查询,只返回单一值的查询,可用于=, <>这类条件语句中,尤其是用于where等语句中代替常数

关联子查询,标量子查询基础上加一段where语句,实现分类的查询

各类函数:

类似于Excel,输入参数,得到返回值

算术函数(用来进行数值计算的函数)

字符串函数(用来进行字符串操作的函数)

日期函数(用来进行日期操作的函数)

转换函数(用来转换数据类型和值的函数)

聚合函数(用来进行数据聚合的函数)

算术函数

NUMBERIC (全体位数 , 小数位数) 指定数值的大小

ABS(数值) ——绝对值

MOD(被除数,除数) ——求余

ROUND(对象数值,保留小数的位数) ——四舍五入

字符串函数

字符串1||字符串2 ——拼接

MySQL的拼接是:Concat (字符串1,字符串2,…….)

LENGTH(字符串) ——算字符串长度

UPPER / LOWER (字符串) ——大小写转换

REPLACE(对象字符串,替换前的字符串,替换后的字符串) ——字符串的替换

SUBSTRING(对象字符串 FROM 截取的起始位置 FOR 截取的字符数)——字符串的截取(PostgreSQL/MySQL专用语法)

日期函数

CURRENT_DATE ——当前日期(因为没参数,所以无需括号)

CURRENT_TIME ——当前时间

CURRENT_TIMESTAMP ——当前日期和时间

EXTRACT(日期元素 FROM 日期) ——截取日期元素(年月日等,返回数值)

转换函数

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

COALESCE(数据1,数据2,数据3……) ——将NULL转换为其他值

谓词就是返回值为真值的函数(TRUE/ FALSE/ UNKNOWN)

Like函数,查找一致字符串,用%区分,前方一致/中间一致/后方一致

BETWEEN值1 AND 值2 ——范围查询(会包括临界值)

>值1 AND <值2 ——范围查询(不包括临界值)

IS NULL、 IS NOT NULL ——判断是否为NULL

IN / Not IN (对象1,对象2,….) ——OR的简便用法,可搭配子查询

EXIST / NOT EXIST

CASE WHEN <求值表达式> THEN <表达式>

WHEN <求值表达式> THEN <表达式>

WHEN <求值表达式> THEN <表达式>

ELSE <表达式>

END

(最后才加)As …..

集合运算:

1.作为运算对象的记录的列数必须相同

2.作为运算对象的记录中列的类型必须一致

3.可以使用任何SELECT语句,但ORDER BY子句只能在最后使用一次

UNION ——表的加法(并集)

SELECT a,b

FROM 表1

UNION

SELECT a,b

FROM 表2

UNION ALL ——保留重复行

INTERSECT ——选取公共部分(交集) ——MYSQL无法使用

EXCEPT ——表的减法, a-b,则a写前面b写后面——MYSQL无法使用

联结(JOIN),将其他表中的列添加过来,进行“添加列”的运算

内联结——INNER JOIN

SELECT SP.ID SP.A, SP.B, P.C, P.D

FROM 表1 AS SP INNER JOIN表2 AS P ①

ON SP.ID = P.ID;

外联结——OUTER JOIN

可以选出仅在一张表中存在的信息

需要用Left、Right来指定主表

3+表的时候,要在前一个的On后再做OUTER JOIN,以此类推

SELECT SP.ID SP.A, SP.B, P.C, P.D

FROM 表2 AS P LEFT OUTER JOIN 表1 AS SP

ON SP.product_id = P.product_id;

交叉联结——CROSS JOIN

对两张表中的全部记录进行交叉组合,因此结果中的记录数通常是两张表中行数的乘积,一般无用

SQLZOO:

学完基本的,还是要上手做,SQLZOO就挺不错的

做的时候我更喜欢直接删除给出的例子再做,这样不会被限制,而且也能更好锻炼对SQL语句的调用能力,毕竟现实中用的时候不会有人提醒你这时候该用什么语法,都是要自己想出来的。

以下是实操时候发现的问题:

Exclusive OR (XOR),多选一

As的别名如果多字段需要加单引号

有与EXCEL共通的Left,Right函数,用于取左/右起的N个字符

名字里有’的那些,要把’替换为两个’

经常在SQL语句中,子查询里忘了加入From Table

ALL函数,搭配大于小于,a > ALL b,大于所有b的a

做完所有题最大的感触就是自己逻辑不够清晰,往往答案三四行就能解决的问题我要花8-9行,在逻辑上绕了几个弯。这也是因为对语法不熟悉所致,很多地方题目用的语法一行顶我写的5,6行,所以回头看看语法书,互相补充着才是最好的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值