SQL读书笔记

1:SQL语句要以“;”结尾,一条SQL语句描述为一个数据库操作,
语句是逐一执行的。
2:SQL语句不区分大小写。表名和列名也是如此,但插入表中的数据是区分大小写的。
3:SQL语句的但此件需要使用半角空格或换行符来分隔,但不能用全角空格,会出错。
4:SQL中名称必须以半角英文字母开头。
5:在一个数据库中,不能创建两个相同名称的表
6:名称 类型(长度) 约束,约束中“NULL”表示空白,“NOT NULL”给该列设定了不能输入空白,表示必须输入。
7:删除表的语句: DROP TABLE <表名>; //删除的表无法恢复,只能重新创建。
8:更新表的语句: ALTER TABLE<表名> ADD COLUMN<列的定义>;
9:删除表中列的语句:ALTER TABLE <表名>DROP COLUMN<列名>;

例子: 添加一列可以储存100位可变长度字符串的列
ALTER TABLE Shohin ADD COLUMN shohin_mei_kana VARCHAR(100);
删除列:
ALTER TABLE <表名> DROP COLUMN <列名>;

10:向表中插入数据的SQL语句:
BEGIN TRANSACTION;
INSERT INTO <表名> VALUES(‘0001’,’T衬衫’,’衣服’);

11:SELECT语句:
SELECT <列名>,
FROM<表名>;
例子: SELECT shojin_iD,shohin_mei,shiire_tanka FROM Shohin;

12:查询全部的列:
SELEC * FROM <表名>;

13:SQL用AS关键字为列设定别名。
SELECT shohin_id AS id,
Shohin_mei AS name
FROM Shoin;
需要注意的是设定汉语别名的话要用双引号括起来

14:删除重复的数据:
SELECT DISTINCT shohin FROM Sho_in;//删除重复行
注意的是NULL也被视为一类数据,如果存在多NULL行,也会被结合为一条NULL数据

15:在多列前使用DISTINCT
SELECT DISTINCT sho_bun, toro FROM Shonin;
结果是这两列数据都一样的行被合并

16:WHERE语句用于选择记录
SELECT <列名> ,FROM<表名> WHERE <条件表达式>;
例:
SELECT shobin_name,shohuin_mei FROM Shohin WHERE shobin_name = ‘衣服’;
但是也可以不选取出作为查询条件的列。
SQL中子句的书写顺序是固定的,WHERE必须跟在FROM后面,更改位置会报错

17:SQL注释方法
1.一行注释:写在”__”之后,只能写在同一行
2.多行注释:写在”/”和”/”之间,可以跨多行

18:SQL中的算术运算符:
例:以2倍价格读取数据
SELECT shohin_mei, hanbai_tanka,
Hanbai_tanka * 2 AS “hanbai_tanka_x2”
FROM Shohin;
注意NULL,有NULL的运算结果都为NULL
19:比较运算符:
注:<> //不等于

= //不等号和等号的位置不能颠倒,一定让不等号在左,等号在右
别的都知道
可以通过WHERE来选出数据,但不能对NULL用比较运算符

20:字符串的比较:
字符串典型的规则是按照字典顺序来比较,按照条目在字典出现的顺序来排序。
SQL提供了专门来判断是否为NULL的 IS NULL
例: SELECT shohin_mei,shiire_tanka
FROM Shohin
WHERE shiire_tanka IS NULL;

21: 逻辑运算符
NOT运算符: NOT不能单独使用,要组合,例:
SELECT shohin_mei, shohin_bunrui,hanbai_tanka
FROM Shohin
WHERE NOT hanbai_tanka >= 1000;
AND OR运算符 :WHERE A =100 AND B=200;
注:AND运算优先于OR运算,可以用括号来提前OR运算
22:逻辑运算的返回值:
真则返回true,假则返回false。若为NULL返回UNKNOWN

23:聚合函数:
COUNT; 计算表中的行数
SUM; 计算表中列的数据合计值
AVG; 计算列的数据平均值
MAX; 计算列的数据最大值
MIN; 计算列的数据最小值

SELECT COUNT(*) FROM Shohin;
计算全部数据行数,如果把列名作为参数会得到NULL以外的数据行数。
为COUNT特有,其他函数不能用作为参数

24:聚合函数SUM会把NULL排除在外,但COUNT(*)除外,他并不会排除NULL
SELECT SUM(hanbai_tanka)
FROM Shohin;
25:平均值AVG 会事先删除NULL再进行计算

26: MAX和MIN SUM/AVG只能对数值类型的列使用,但MAX/MIN原则上适用于任何数据类型的列

27:对表进行分组:GROUP BY子句,用逗号分隔:
SELECT <列名1>,<列名2>,<列名3>
FROM<表名>
GROUP BY <列名1>,<列名2>;
注意:
GROUP BY的书写位置一定再FROM后面,如果有WHERE就写在WHERE后面
GROUP BY就像切分表的一把刀
顺序:SELECT->FROM->WHERE->GROUP BY

如果数据中包含NULL ,会把NULL看做一组特定的数据,在结果中会以“不确定”行(空行)的形式表现出来

28:如果GROUP BY 和WHERE并用,执行顺序:
FROM->WHERE->GROUP BY->SELECT

29:HAVING:
SELECT <列名1>,<列名2>,<列名3>
FROM <表名>
GROUP BY <列名1>,<列名2>,<列名3>
HAVING<分组结果对应的条件>
注:HAVING子句要写在GROUP BY 后面
例子:从通过商品种类进行分组的结果中,取出“包含数据的行数为2行”的组
SELECT shobin_bunrui,COUNT()
FROM Shohin
GROUP BY shobin_bunrui
HAVING COUNT(
) = 2

30:对结果进行排序 ORDER BY
SELECT<列名1>,<列名2>,<列名3>
FROM<表名>;
ORDER BY<排序准则1><排序准则2>
注:不论何种情况,ORDER BY都要写在SELECT语句的末尾,这是因为对数据进行排序的操作必须再结果即将返回时执行。ORDER BY 子句中书写的列名称为排序键。

顺序:SELECT->FROM->WHERE->GROUP BY->HAVING->ORDER BY
注意::如果没有指定ORDER BY 中的排序时默认升序进行排列,
而且再ORDER BY中可以使用SELECT中定义的别名。

31: SELECT的执行顺序再GROUP BY之后,ORDER BY 之前
32:在ORDER BY不要使用列编号。

33:INSERT的语法
语句:INSERT INTO<表名>(列1,列2,列3.。。。。)VALUES (值1,值2,值3,。。。);
列名和值用逗号隔开,分别括在()内,这种形式称为清单。
重要:列数不一致会出错,导致无法插入数据。原则上执行一次INSERT会插入一行数据

34:INSERT中想给某一列赋予NULL时,可以直接在VALUES的值清单中写入NULL
要注意的是想插入NULL的列不能设置NOT NULL约束。向设置了NOT NULL约束的列中插入NULL时,INSERT语句会出错。

34:插入默认值
我们能向表中插入默认值(初始值)。默认值的设定,可以通过在创建表的CREATE TABLE语句中设置DEFAULT约束累实现。

35:从其他表复制数据:
INSERT…SELECT:
INSERT INTO ShohinCopy(shohin_id,shohin_mei,shohin_bunrui, hanbai_tanka,shiire_tanka,torokubi)
SELECT shohin_id,shohin_mei,shohin_bunrui,hanbai_tanka,shiire_tanka,torokubi FROM Shohin;
复制的话,被复制的表的数据不会发生变化,INSERT…SELECT可以在需要数据备份时使用

36:数据的删除 DELETE语句的使用方法
DROP TABLE;可以将表完全删除
DELETE ;删除内容,但留下容器
语法:DELETE FROM <表名>; //执行该语句时可以删除指定表中的全部数据行。
例:DELETE FROM Shohin;
若语句中忘了FROM而且写成 DELETE<表名>,或者写了多余的列名,会出错。因为DELETE语句无法只删除部分列,
所以:DELETE语句删除对象不是表或者列,而是行。

37:指定删除对象的DELETE语句:
DELETE FROM<表名>
WHERE<条件>;

38:数据的更新(UPDATE的使用)
使用INSERT语句向表中插入数据后,想更改数据可用UPDATE实现。
UPDATE<表名>
SET<列名> = <表达式>;
将更新对象的列和更新后的值都记录在SET中
例:
UPDATE Shohin
SET torokubi = ‘2009-10-10’;

39:指定条件的UPDATE语句(搜索型UPDATE)
UPDATE<表名>
SET<列名> = <表达式>
WHERE<条件>;
注:使用UPDATE语句可以将值清空为NULL(只限于未设置NOT NULL约束的列)

40:多列更新:
UPDATE语句的SET子句支持同时将多个列作为更新对象
例:
UPDATE Shohin
SET hanbai_tanka = hanbai_tanka *10,
shiire_tanka = shiire_tanka / 2
WHERE shohin_bunrui = ‘厨房用具’;

41: 事务
事务代表了对表中数据进行更新的单位。事务卆需要在同一个处理单元中执行的一系列更新处理的集合。
因为通常情况下,更新处理并不是执行一次就结束了,而是需要执行一系列连续的操作。。。
42:创建事务
语法:
DML 语句1;
DML 语句2;
DML 语句3;

事务结束语句(COMMIT或者ROLLBACK);
使用事务开始语句和事务结束语句,将一系列DML语句(INSERT/UPDATE/DELETE语句)括起来,实现一个事务处理

SQL servwr中
BEGIN TRANSACTION;
UPDATE Shohin
SET hanbai_tanka = hanbai_tanka - 1000
WHERE shohin_mei = ‘运动T’;
UPDATE Shohin
SET hanbai_tanka = hanbai_tanka + 1000
WHERE shobin_mei = ‘T’;
COMMIT;

各个DBMS事务的开始语句不经相同,结束有两种
1: COMMIT–提交处理
COMMIT是提交事务包含的全部更新处理的结束指令。相当于文件处理中国的覆盖保存,一旦提交就无法恢复到事务开始前的状态。。
2: ROLLBACK–取消处理
ROLLBACK是取消事务包含的全部更新处理的结束指令,相当于文件处理中的放弃保存。一旦回滚,数据库就会回到事务开始前的状态

43:ACID特性
DBMS事务遵循4中标准规格的约定
1:原子性
指在事务结束的时候,其中包含的更新处理要么完全执行,要么完全不执行
2:一致性
事务中包含的处理,要满足数据库提前设置的约束
3:隔离性
隔离性指的是保证不同事务之间互不干扰的特性,保证事务间不会相互嵌套。在某个事物中进行的更改,在该事务结束前对其它事务是不可见的
4:持久性
事务不论是提交还是回滚,一旦结束,DBMS会保证该时点的数据状态得以保存
44:视图
视图和表的区别在于是否保存了实际的数据。在创建表时会通过INSERT将数据保存到数据库中,SELECT实际上时从存储设备中读取数据,进行各种迅速案后返还结果给用户。
但使用视图时不会把数据保存到存储设备中,也不会将数据保存到其他地方。视图保存的是SELECT语句,我们从视图中读取数据时,视图会在内部执行该SELECT语句并创建一张临时表。

45:创建视图的方法:
CREATE VIEW语句,语法:
CREATE VIEW 视图名称(<视图列名1>,<视图列名2>,…) AS
<SELECT语句>
SELECT语句要写在AS关键字后。SELECT语句中列的排序和视图中列的排序相同。
例:
CREATE VIEW ShohinSum(shohin_bunrui,cnt_shohin)
AS
SELECT shohin_bunrui,COUNT(*) FROM Shohin GROUP BY shobin_bunrui;
这里的AS和定义时使用的AS不同,省略就会报错

46:视图的使用
SELECT shohin_bunrui,cnt_shohin
FROM ShohinSum;
该视图根据商品种类统计出的商品数量作为结果保存,可以方便获取数据。创建出视图后,可以通过简单的SELECT语句获得数据,而且视图会跟着表自动更新。
47:视图的查询:
1:首先执行定义驶入的SELECT语句
2:根据获得的结果,执行在FROM子句中使用视图的SELECT语句。
例:
CREATE VIEW ShohinSunJim(shohin_bunrui,cnt_shohin)
AS
SELECT shohin_bunrui,cnt_shohin FROM ShohinSum
WHERE shohin_bunrui = “办公用品”;

注意:应该避免在视图的基础上创建视图

48:视图的限制
1:定义视图时不能使用ORDER BY 子句
2:对视图进行更新,如果定义视图的SELECT语句能满足某些条件就可以被更新。如下:
1:SELECT未使用DISTINCT
2: FROM中只有一张表
3:未使用GROUP BY子句
4:未使用HAVING子句
代码:向视图中添加数据行:
INSERT INTO ShohinJim VALUES(‘10’,’1’,’SST’);

	49: 视图的删除

DROP VIEW语句
例:
DROP VIEW ShohinSum; // 删除视图

50:子查询
子查询时一次性的视图,SELECT语句,与视图不同,子查询在SELECT执行完毕后就会消失
子查询需要命名
视图不是用来保存数据的,而是通过保存读取数据的SELECT语句来为用户提供连理。子查询就是将用来定义视图的SELECT语句直接用于FROM中。例子:
CREATE VIEW ShohinSum(shohin_bunrui,cnt_shohin)
AS
SELECT shohin_bunrui,COUNT(*) FROM Shohin
GROUP BY shohin_bunrui;

SELECT shohin_bunrui,cnt_shohin
FROM ShohinSum;

首先执行FROM中的SELECT语句
该SELECT语句包含嵌套结构,首先执行FROM中的SELECT语句,然后执行外层的SELECT语句。
SELECT shobin_bunrui,cnt_shohin
FROM{
SELECT shohin_bunrui,COUNT(*) AS cnt_shohin FROM Shobin GROUP BY shohin_bunrui
} AS ShohinSum;

51: 增加嵌套层数
SELECT shohin_bunrui,cnt_shohin
FROM(SELECT * FROM(SELECT shohin_bunrui,COUNT(*) AS cnt_shohin FROM Shohin GROUP BY shohin_bunrui) AS ShohinSum) AS ShohinSum2;

52: 标量子查询
标量时单一的意思
例:选取出单价高于均价的商品
SELECT shohin_id,shohin_mei,hanbai_tanka
FROM Shohin
WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka)FROM Shohin);
1:先执行平均单价的子查询

53:标量子查询的书写位置
标量子查询的书写位置不仅在WHERE中,通常任何可以使用单一值的位置都能使用
例 在SELECT中国使用标量子查询
SELECT shohin_id, shohin_mei,hanbai_tanka,(SELECT AVG(hanbai_tanka)FROM Shohin) AS avg_tanka FROM Shohin;

54: 关联子查询
通过关联子查询按照商品种类对平均销售单价进行比较“:
SELECT shahin_id,shohin_mei,hanbai_tanka
FROM Shohin AS S1
WHERE hanbai_tanka>(SELECT AVG(hanbai_tanka) FROM Shohin AS S2 WHERE S1.shohin_bunrui = S2.shohin_bunrui GROUP BY shohin_bunrui);
关键在于在子查询中添加的WHERE子句条件,在使用关联子查询时,需要在表所对应的列名前加上表的别名,以”<表名>.<列名>”的形式记录。

注: 结合条件一定要卸载子查询中。关联是有有效作用域的,内部能看到外部,但外部看不到内部

55:函数
算数函数:加减乘除,ADS绝对值
字符串函数:
创建SmapleStr表
CREATE TABLE SampleStr(
Str1 VARCHAR(40),
Str2 VARCHAR(40),
Str3 VARCHAR(40);
)

插入数据
BEGIN TRANSACTION;
INSERT INTO SampleStr(str1,str2,str3) VALUES(‘1’,’2’,’3’);
拼接||
字符串1||字符串2
例:拼接两个字符串
SELECT str1,str2,
Str1 ||str2 AS str_concat FROM SampleStr;

56:谓词
谓词就是返回值为真值的函数

LIKE谓词–字符串的部分一致查询
=只有在字符串完全一致时才为真,LIKE谓词更加模糊,当需要进行字符串的部分一致查询时需要用该谓词
1:前方一致查询:
找出作为查询条件的字符串与查询对象起始部分相同的查询方法
2:中间一致:
找出查询对象中含有走位查询条件的字符串
3:后方一致:
找出末尾相投的字符串

BETWEENT谓词–范围查询
SELECT shohin_mei, hanbai_tanka
FROM Shohin
WHERE hanbai_tanka BETWEEN 100 AND 1000;

IN谓词–OR的简便用法
SELECT shohin_mei,shiire_tanka FROM Shohin
WHERE shiire_tanka IN(320,500,5000);
单价是320或500或5000

56:CASE
CASE表达式是条件分歧
CASE分为简单CASE表达式和搜索CASE表达式

CASE WHEN <判断表达式> THEN <表达式>
WHEN <判断表达式>THEN<表达式>
。。。。。。
ELSE <表达式>

例:
SELECT shohin_mei,
CASE WHEN shohin_bunrui = ‘yifu’ THEN ‘A:’||shohin_bunrui
ELSE NULL
END AS abc_shobin_bunrui
FROM Shohin;

注意:CASE表达式中的ELSE可以省略,但END不能省略

57:表的加减法:
集合运算
表的加法:UNION
SELECT shobin_id,shobin_mei FROM Shobin
UNION SELECT shohin_id,shohin_mei FROM Shohin2
1111他会删去重复的记录
注意示项:
1作为运算对象的记录列数必须相同
2作为运算对象的记录类型必须一致
3能使用任何select语句,但ORDER BY 只能在最后使用一次

包含重复行的集合运算–ALL选项
SELECT shohin_id,shohin_mei FROM Shohin
UNION AL
SELECT shohin_id,shoin_mei FROM Shohin2;

58:联结
就是将其他表中的列加过来,进行’添加列的运算’
内联结–INNER JOIN
SELECT TS.id,TS.mei FROM TEN AS TS
INNER JOIN
Shohin AS S ON TS.id = S.id;
ON后面写的是联结条件,连接后会新创建一张表,但这张表只在SELECT语句执行期间存在,执行完毕后会消失,想继续用的话就把他做成视图

外联结–OUTER JOIN
外联结也是通过ON将两张表进行联结。同时从两张表中选取响应的列。结果有所不同
特点1:取出单张表中的全部信息
内联结只能取出同时存在两张表中的数据。而外联结只要数据存在一张表中就能读取。
特点2:有主表,指定主表的关键字是LEFT和RIGHT.使用LEFT时FROM 中写在左边的是主表,RIGHT则有点事主表
例:
SELECT TS.ID FROM Shohin AS S LEFT OUTER JOIN TEN AS TS ON TS.ID = S.ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 是由 Microsoft 公司开发的关系型数据库管理系统,它可以用于存储、管理和处理数据。下面是一些 SQL Server 的笔记: 1. 数据库的创建 可以使用 SQL Server Management Studio(SSMS)创建数据库,也可以使用 T-SQL 语句创建数据库。例如: ``` CREATE DATABASE mydatabase; ``` 2. 表的创建 使用 T-SQL 语句可以创建表。例如: ``` CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50), age INT, email VARCHAR(100) ); ``` 3. 数据的插入 可以使用 INSERT INTO 语句将数据插入表中。例如: ``` INSERT INTO mytable (id, name, age, email) VALUES (1, 'John', 30, '[email protected]'); ``` 4. 数据的查询 可以使用 SELECT 语句查询数据。例如: ``` SELECT * FROM mytable; ``` 5. 数据的更新 可以使用 UPDATE 语句更新数据。例如: ``` UPDATE mytable SET age = 31 WHERE id = 1; ``` 6. 数据的删除 可以使用 DELETE 语句删除数据。例如: ``` DELETE FROM mytable WHERE id = 1; ``` 7. 索引的创建 可以使用 CREATE INDEX 语句创建索引。例如: ``` CREATE INDEX idx_name ON mytable (name); ``` 8. 存储过程的创建 可以使用 CREATE PROCEDURE 语句创建存储过程。例如: ``` CREATE PROCEDURE get_users AS SELECT * FROM mytable; ``` 9. 触发器的创建 可以使用 CREATE TRIGGER 语句创建触发器。例如: ``` CREATE TRIGGER mytrigger ON mytable FOR INSERT AS BEGIN PRINT 'New record has been inserted.'; END ``` 以上是一些 SQL Server 的笔记,希望对你有帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值